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
jsmini JavaScript Engine を作ってみた話
yosuke_furukawa
PRO
0
290
デザインシステムが必須の時代に
yosuke_furukawa
PRO
2
240
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
Strip Types と Storage
yosuke_furukawa
PRO
4
520
Module Harmony について
yosuke_furukawa
PRO
4
1.9k
Other Decks in Programming
See All in Programming
Claude CodeとAgentCore Gatewayを繋ぐ際の認証認可 / Authentication and authorization when connecting Claude Code with AgentCore Gateway
har1101
1
250
為什麼你並不需要ViewModel / No, you don't need a ViewModel
lovee
1
480
プロポーザルを書いてもらう
pvcresin
0
280
yield再入門 #phpcon
o0h
PRO
0
970
作るコストが小さくなった時代 幸せに働くために改めて考えたいこと 〜エンジニアとして価値を出し続けるために注視している二分野〜
yuppeeng
0
190
改善しないと、タスクが回らない。 “てんこ盛りポジション” を引き継いだ情シスの、入社3ヶ月の業務改善録
krm963
0
260
霧の中の代数的エフェクト
funnyycat
1
480
テーブルをDELETEした
yuzneri
0
140
AI Engineeringは、AIプロダクトだけのものか? 〜AIがソフトウェアを作る時代の新しい当たり前〜 / No AI in your product. AI Engineering in your development.
rkaga
4
380
Android CLI
fornewid
0
210
【SRE NEXT 2026 Lunch Session】一人目専任SREの立ち上げを加速する ― AIと進めたオンボーディングで2分を0.04秒にした話
pkshadeck
PRO
0
3.5k
言語を使う側から、作る側へ。 自作 Lisp で得た新たな気づき。
andpad
0
150
Featured
See All Featured
Done Done
chrislema
186
16k
jQuery: Nuts, Bolts and Bling
dougneiner
66
8.5k
Embracing the Ebb and Flow
colly
88
5.1k
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
540
Navigating Weather and Climate Data
rabernat
0
450
What’s in a name? Adding method to the madness
productmarketing
PRO
24
4.1k
Code Review Best Practice
trishagee
74
20k
Amusing Abliteration
ianozsvald
1
240
Paper Plane
katiecoart
PRO
2
52k
Building a Scalable Design System with Sketch
lauravandoore
463
34k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
56
3.4k
Thoughts on Productivity
jonyablonski
76
5.3k
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!!