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
640
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
AIがコードを書いてくれる時代、我々は何を確かめるのか
yosuke_furukawa
PRO
12
4.9k
AI時代のシニアエンジニアとは
yosuke_furukawa
PRO
12
10k
Webの地図
yosuke_furukawa
PRO
6
5.2k
XHTMLが残したもの
yosuke_furukawa
PRO
2
980
jsmini JavaScript Engine を作ってみた話
yosuke_furukawa
PRO
0
450
デザインシステムが必須の時代に
yosuke_furukawa
PRO
2
340
Node.js, Deno, Bun 最新動向とその所感について
yosuke_furukawa
PRO
10
5.4k
Welcome JSConf.jp 2024
yosuke_furukawa
PRO
1
4.9k
tc39 x jsconf.jp Panel Discussion 2024
yosuke_furukawa
PRO
0
390
Other Decks in Programming
See All in Programming
조합이폭발하는디자인시스템이걸눈으로도테스트하라고요
giljongyu
0
610
JIS keyboard support in Omarchy
lef237
0
160
Jetpack Compose Mechanisms
skydoves
3
880
現場と育てるRailsモデリング 〜Spreadsheetから始めたモデル設計〜
siroemk
2
1.1k
Vue.jsで作る空間解析アプリとCapacitorプラグインのData Bridge
hal_spidernight
1
110
プロジェクトコードをキレイキレイしよう!暗黙的な参照を読み解く静的解析
ostk0069
0
120
APNsからLive Activityを開始する話
yumnumm
0
180
Modernizing iOS Apps
seyfoyun
0
120
気持ちぃ〜角丸 Squircle
ryu1013
0
350
Lambda durable functionsでHuman in the Loopを楽に…楽に……
har1101
2
200
【加筆修正版】Laravel のアプリケーションをどこにデプロイするか #phpcon_ehime
akase244
0
160
[2026-10-14](C)Re:ゼロから始める異世界生活〜始まりの終わりと終わりの始まり〜
tosite
0
160
Featured
See All Featured
Ruling the World: When Life Gets Gamed
codingconduct
0
420
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.6k
Done Done
chrislema
187
17k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.4k
Raft: Consensus for Rubyists
vanstee
143
7.8k
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
330
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
320
Why Our Code Smells
bkeepers
PRO
340
58k
How to build a perfect <img>
jonoalderson
1
6.2k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
133
20k
Test your architecture with Archunit
thirion
2
2.5k
Building Adaptive Systems
keathley
44
3.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!!