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
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
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
230
Node.js, Deno, Bun 最新動向とその所感について
yosuke_furukawa
PRO
10
5.2k
Welcome JSConf.jp 2024
yosuke_furukawa
PRO
1
4.7k
tc39 x jsconf.jp Panel Discussion 2024
yosuke_furukawa
PRO
0
340
Removing Corepack
yosuke_furukawa
PRO
9
1.9k
JavaScript Runtime とはなにか
yosuke_furukawa
PRO
15
3.1k
Strip Types と Storage
yosuke_furukawa
PRO
4
510
Module Harmony について
yosuke_furukawa
PRO
4
1.9k
LTのやり方
yosuke_furukawa
PRO
16
3k
Other Decks in Programming
See All in Programming
代数的データ型って何が嬉しいの? #frontend_phpcon_do
kajitack
8
3.3k
net-httpのHTTP/2対応について
naruse
0
450
正しくソフトウェアを作る、前提を疑うための認知の視点 / doubt-premise
minodriven
17
6.2k
AIチームを指揮するOSS「TAKT」活用術 / How to Use “TAKT,” an OSS Tool for Orchestrating AI Teams
nrslib
6
850
「AIで開発し、AIを届ける」をEvalでつなぐ 〜AIネイティブに始めるプロダクト開発の実践〜 / Connecting "Develop with AI, deliver AI" with Eval
rkaga
4
4.7k
Semantic Version 単位で戦略を柔軟に変えて、パッケージアップデートを自動化する
daitasu
0
170
JavaDoc 再入門
nagise
0
300
DynamoDBには集計系のクエリがないけどなんとかしたい
musan
1
130
Webフレームワークの ベンチマークについて
yusukebe
0
150
LLM Plugin for Node-REDの利用方法と開発について
404background
0
160
セキュリティの専門家じゃなくてもできる。「セキュリティ意識」をアップデートして サプライチェーン攻撃への耐性を高めよう。
tk3fftk
5
660
Oxcを導入して開発体験が向上した話
yug1224
4
290
Featured
See All Featured
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
210
Building the Perfect Custom Keyboard
takai
2
790
How to Think Like a Performance Engineer
csswizardry
28
2.6k
Mind Mapping
helmedeiros
PRO
1
240
Raft: Consensus for Rubyists
vanstee
141
7.5k
New Earth Scene 8
popppiees
3
2.3k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
231
23k
Done Done
chrislema
186
16k
How to train your dragon (web standard)
notwaldorf
97
6.7k
Between Models and Reality
mayunak
4
330
Designing for Timeless Needs
cassininazir
1
250
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
35k
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!!