Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
new_urlparser.pdf
Search
Yosuke Furukawa
PRO
May 09, 2023
Programming
620
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
デザインシステムが必須の時代に
yosuke_furukawa
PRO
2
240
Node.js, Deno, Bun 最新動向とその所感について
yosuke_furukawa
PRO
10
5.2k
Welcome JSConf.jp 2024
yosuke_furukawa
PRO
1
4.8k
tc39 x jsconf.jp Panel Discussion 2024
yosuke_furukawa
PRO
0
350
Removing Corepack
yosuke_furukawa
PRO
9
2k
JavaScript Runtime とはなにか
yosuke_furukawa
PRO
15
3.1k
Strip Types と Storage
yosuke_furukawa
PRO
4
520
Module Harmony について
yosuke_furukawa
PRO
4
1.9k
LTのやり方
yosuke_furukawa
PRO
16
3k
Other Decks in Programming
See All in Programming
コーディングルールの鮮度を保ちたい for SRE NEXT 2026 / keep-fresh-go-internal-conventions-sre-next-2026
handlename
0
140
AI時代の仕事技芸論〜ソフトウェア開発で「遊ぶように働く」職人的熟達のすすめ(スクフェス仙台 2026バージョン)
kuranuki
0
620
20260623_Loop Engineeringで自分の分身の問い合わせBotを作る
ryugen04
0
210
地域 SRE コミュニティ最前線 - ホンマでっかSRE勉強会
tk3fftk
0
220
【SRE NEXT 2026 Lunch Session】一人目専任SREの立ち上げを加速する ― AIと進めたオンボーディングで2分を0.04秒にした話
pkshadeck
PRO
0
2.4k
1B+ /day規模のログを管理する技術
broadleaf
0
140
琵琶湖の水は止められてもNet--HTTPのリトライは止められない / You might be able to stop the water flow of Lake Biwa but you can't stop Net::HTTP retries
luccafort
PRO
0
150
フィードバックで育てるAI開発
kotaminato
1
110
ソフトウェア設計に溶けるインフラ ― AWS CDK のインフラ認識論
konokenj
2
200
【やさしく解説 設計編 #0】DDDのコード、読めるのに分からない人へ
panda728
PRO
2
260
「なぜそう決めたのか」を残し続ける仕組み ― Notion AI カスタムエージェント × Slack連携による設計判断の自動記録 - NIKKEI Tech Talk #47
niftycorp
PRO
0
260
エンジニア向け会社紹介/Findy Company Profile
findyinc
6
360k
Featured
See All Featured
Ecommerce SEO: The Keys for Success Now & Beyond - #SERPConf2024
aleyda
1
2.1k
The Cost Of JavaScript in 2023
addyosmani
55
10k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.2k
Leading Effective Engineering Teams in the AI Era
addyosmani
9
2.1k
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
72
40k
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
710
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
390
YesSQL, Process and Tooling at Scale
rocio
174
15k
Claude Code のすすめ
schroneko
67
230k
The #1 spot is gone: here's how to win anyway
tamaranovitovic
3
1.1k
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
1
170
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
220
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!!