ビューフェスジャパン2026
Vue Fes Japan 2026のメインビジュアル。VueをイメージしたVのシルエットと、日の丸をイメージした丸のシルエットが横に並んでいる。色は深い抹茶のような色をしており、丸のシルエットには金色の墨流し模様が描かれている。
大手町プレイス ホール &カンファレンス

Speaker

サイボウズトラック
16:35 - 17:50
Hasuto

あなたの await、OS まで届いてる? strace で覗く JavaScript の非同期

普段当たり前のように async / await を書きますが、「待っている間に OS は何をしているの?」 と聞かれると、曖昧な答えしか言えずモヤモヤしました。そこで本 LT では、Node.js のコードを strace でシステムコールレベルまで覗いて、JavaScript の await の正体を実際に確かめていきます。まず Promise.resolve() と fetch() を比べると、await には「OS まで降りるもの」と「降りないもの」があることが見えてきます。次に複数の fetch を「直列」と「Promise.all」で実行し、syscall のログを並べてみます。すると、並列にしているのは Promise.all そのものではなく、その効果は epoll_wait の往復をまとめている点にある、ということが分かってきます。最後に、この視点を Nuxt の useAsyncData / useFetch が直列になって遅くなるケースに繋げて、「なぜ束ねると速いのか」を OS の言葉で説明できるようになって帰っていただけたらと思います。

Hasuto

所属
クラスメソッド株式会社
肩書き
バックエンドエンジニア

Hasuto

所属
クラスメソッド株式会社
肩書き
バックエンドエンジニア

あなたの await、OS まで届いてる? strace で覗く JavaScript の非同期

普段当たり前のように async / await を書きますが、「待っている間に OS は何をしているの?」 と聞かれると、曖昧な答えしか言えずモヤモヤしました。そこで本 LT では、Node.js のコードを strace でシステムコールレベルまで覗いて、JavaScript の await の正体を実際に確かめていきます。まず Promise.resolve() と fetch() を比べると、await には「OS まで降りるもの」と「降りないもの」があることが見えてきます。次に複数の fetch を「直列」と「Promise.all」で実行し、syscall のログを並べてみます。すると、並列にしているのは Promise.all そのものではなく、その効果は epoll_wait の往復をまとめている点にある、ということが分かってきます。最後に、この視点を Nuxt の useAsyncData / useFetch が直列になって遅くなるケースに繋げて、「なぜ束ねると速いのか」を OS の言葉で説明できるようになって帰っていただけたらと思います。