Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
new_urlparser.pdf
Search
Yosuke Furukawa
PRO
May 09, 2023
Programming
630
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
new_urlparser.pdf
Yosuke Furukawa
PRO
May 09, 2023
More Decks by Yosuke Furukawa
See All by Yosuke Furukawa
Webの地図
yosuke_furukawa
PRO
6
3.9k
XHTMLが残したもの
yosuke_furukawa
PRO
2
650
jsmini JavaScript Engine を作ってみた話
yosuke_furukawa
PRO
0
400
デザインシステムが必須の時代に
yosuke_furukawa
PRO
2
280
Node.js, Deno, Bun 最新動向とその所感について
yosuke_furukawa
PRO
10
5.3k
Welcome JSConf.jp 2024
yosuke_furukawa
PRO
1
4.8k
tc39 x jsconf.jp Panel Discussion 2024
yosuke_furukawa
PRO
0
360
Removing Corepack
yosuke_furukawa
PRO
9
2k
JavaScript Runtime とはなにか
yosuke_furukawa
PRO
15
3.2k
Other Decks in Programming
See All in Programming
[GoCon2026] When Goroutines Are Not Enough: Runtime Locality in High-Throughput Go
takehaya
6
1.7k
AI時代に学ぶ 好きなルール 嫌いなルール Linter編
shorty5121
0
910
Swift愛好会と私(ウホーイ) / Swift Fan Club and Uhooi
uhooi
0
150
tsc.rip を支える技術 / Kyoto.なんか #8
susisu
0
4.4k
スマート反転とウェブアクセシビリティ
camiha
0
180
モバイル交通系ICへのチャージ実例から考える、クロスプラットフォーム開発におけるiOS実機テスト設計とCI運用
yusuga
1
280
AIの中の人になってみる
htkym
0
170
フロントエンドUIフレームワークのこれまでとこれから
ssssota
5
2.1k
業務時間外もAIに働いてもらう話
colorful12
3
10k
個人開発基盤をまるごとCloudflareに引っ越して爆速で総合的体験を向上させた話
tinykitten
0
140
Building an Out-of-Order CPU
latte72
1
750
DroidKaigi 2026 「個人開発という実験場: Android エンジニアが手にする4つの自由」
slashnephy
0
230
Featured
See All Featured
[SF Ruby Conf 2025] Rails X
palkan
2
1.4k
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
430
A Soul's Torment
seathinner
7
3.6k
ラッコキーワード サービス紹介資料
rakko
1
4.8M
Reflections from 52 weeks, 52 projects
jeffersonlam
356
21k
The SEO Collaboration Effect
kristinabergwall1
1
550
Everyday Curiosity
cassininazir
0
310
BBQ
matthewcrist
89
10k
New Earth Scene 8
popppiees
3
2.5k
Making the Leap to Tech Lead
cromwellryan
135
10k
State of Search Keynote: SEO is Dead Long Live SEO
ryanjones
0
270
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
2
500
Transcript
Node.js v20 ͰՃ͞Ε ͨ URL Parser Ada ʹͭ ͍ͯ 2023/05/09
@ ؔNodeֶԂ
Twitter: @yosuke_furukawa Github: yosuke-furukawa
URL Parser ͳʹͦΕ͓͍͍͠ ͷʁ • URL Parser ͦͦԿʁ > new
URL("https://example.com"); URL { href: 'https://example.com/', origin: 'https://example.com', protocol: 'https:', username: '', password: '', host: 'example.com', hostname: 'example.com', port: '', pathname: '/', search: '', searchParams: URLSearchParams {}, hash: '' }
URL Parser ͳʹͦΕ͓͍͍͠ ͷʁ • URL Parser ͦͦԿʁ > new
URL("https://example.com"); URL { href: 'https://example.com/', origin: 'https://example.com', protocol: 'https:', username: '', password: '', host: 'example.com', hostname: 'example.com', port: '', pathname: '/', search: '', searchParams: URLSearchParams {}, hash: '' } ͜͏͍͏ͭ
URLͬͯͨ͘͞ΜͷύʔπͰͰ ͖ͯΜͶΜɻ • ͦΕͧΕ෦͝ͱʹׂ͓ͯ͘͠ͱ৭ʑྑ͍͜ͱ͕͋Δɻ • ྫ͑ϧʔςΟϯά • ྫ͑ϦΫΤετ࣮ߦ • Node.js
ͩͬͯ ESM ͷϩʔμʔͰϞδϡʔϧऔಘ͢Δͱ͖ͬ ͯͨΓ͢Δ
URL Parser ͕ʁͲ͏ͳͬͨΜʁ • ؆୯ʹݴ͏ͱ͘ͳͬͨɻ • Node.js v20 ͔Β v19
ͷൺֱ
URL Parser ͕ʁͲ͏ͳͬͨΜʁ • ͞ΒʹDeno v1.32.1 Bun v0.5.8ͱͷൺֱ
ԿΛͨ͠Β͘ͳͬͨͷ͔
Legacy URL Parser • const url = require("url"); • Ͱݺͼग़ͭ͢
• JavaScript • Legacy URL Parser ͱͯ͠ղઆ͞Ε͍ͯΔ • طʹࠓ deprecated ѻ͍
Ұݸલͷ URL Parser • new URL() Ͱݺͼग़ͭ͢ • JavaScript Ͱ
binding ͞ΕͯΔ͕ɺ parser ຊମ C++ (not ada) • φΠʔϒͳ࣮ • ͍͜ͱΑΓ spec ʹ࣮ͳ͜ͱΛࢦͯͨ͠
JavaScript vs C++
JavaScript vs C++ • Αٞ͘ʹͳΔ • JavaScript ͰίʔυΛॻ͘ͱॳظίετ͍͕ɺJITͷӨڹͰߴԽͰ ͖Δɻ •
C++ ͰίʔυΛॻ͘ͱ͍͕ɺJITͷԸܙड͚ΒΕͳ͍ɻ • C++ Ͱશ෦ॻ͍ͨΒ͡Ό͋ྑ͍ͷ͔ʁͱ͍͏ͱɺͦ͏Ͱͳ͍ɻ։ൃί ετϝϞϦͷέΞ͕ॏཁʹͳΔɻ • ͜ͷ࣌Ͱ WHATWG URL vs Legacy URL ͲͪΒ͍ͯ͘͠ํ Ͱ։ൃ͞Ε͍ͯͯɺύϑΥʔϚϯεൺֱͦΜͳʹଟ͘͞Ε͍ͯͳ͍ɻ
JavaScript and C++
JavaScript and C++ • ݁ہ C++ Ͱॻ͘ͱͯ͠ JavaScript ͷΠϯλϑΣʔεͰఏڙ͞ Ε͍ͯΔͷͰɺJS
<=> C++ ؒͷใͷड͚͕͠ඞཁʹͳΔɻ • ݴ͍͑Δͱ JS ͷੈքͱ C++ ͷੈք͕ Node.js ʹଘࡏ͢Δɻ • JS ͔Β C++ ʹใͷड͚͠Λ͢Δ࣌ʹߦ͍ͬͯΔͷ͕ String ͷ serialize ͱ͍͏ॲཧɻ • Node.jsͰBuffer Λͬͨ͜ͱ͕͋Δਓ serialize ͞Εͨจ ࣈྻΛ͍ͬͯΔɻ
Serialize ॲཧΛԿʹߴʹ ͢Δ͔͕ϙΠϯτ
ݱࡏͷ URL Parser • new URL() Ͱݺͼग़ͭ͢ • Ada ͱݺΕΔύʔαʔ(C++)Ͱ࣮͞Εͯ
Δɻ • JSͱC++ͷόΠϯσΟϯά༻ҙ͞Ε͍ͯΔɻ • String ͷ serialize ΛۃྗলྗԽ͍ͯ͠Δɻ
࡞ઓ1: จࣈྻΛύʔε͢Δ࣌ʹશ෦ Λจࣈʹม͠ͳ͍࡞ઓ
શ෦Λจࣈʹม͠ͳ͍࡞ઓ • URL ͷͲ͔͜ΒͲ͜·Ͱ͕Կͷใͳͷ͔ͱ ͍͏ offset ͚͓ͩ࣋ͬͯ͘ɻ
શ෦Λจࣈʹม͠ͳ͍࡞ઓ • URL ͷͲ͔͜ΒͲ͜·Ͱ͕Կͷใͳͷ͔ͱ ͍͏ offset ͚͓ͩ࣋ͬͯ͘ɻ จࣈྻͷTFSJBMJ[FҰճ͚ͩʂͲ͜ͷจࣈ͔ΒͲ͜ͷจࣈ·Ͱ͕Կͳͷ ͔Λ͓͖ͬͯɺͦΕ͕+4ʹόΠϯυ͞ΕΔΈΛ࡞ͬͯΔ
࡞ઓ2: C++͔ΒJSʹόΠϯσΟ ϯά͢Δ࡞ઓ
C++͔ΒJSʹόΠϯσΟϯ ά͢Δ࡞ઓ • AliasedUint32ArrayͱݺΕΔಛघͳ TypedArray Λͬͯ C++ ࣮͔ΒJSʹ ૹΔɻ •
Serialize Λͱ͜ͱΜߴԽ͢Δɻ
࡞ઓ3: ԆಡΈࠐΈ
ԆಡΈࠐΈ • ඞཁʹͳΔΪϦΪϦ·Ͱ࣮ߦ͠ͳ͍࡞ઓ • ΞΫηε͢Δͱ͖ͷඞཁͳϓϩύςΟ͕Θ ͔ͬͨΒͦ͜·ͰύʔεΛߦ͏ɻ
͜͏ͯ͠ߴԽ͞Εͨ Ada ΛͬͨURL Parser͕ ੜͨ͠
Enjoy Node.js v20!!