<style> .reveal h1, .reveal h2, .reveal h3, .reveal h4, .reveal h5 { text-transform: none; } </style> ## Vite はなぜ早いのか ![](https://i.imgur.com/qqPZa0n.png) --- ## 期待値コントロール - 制作時間 1 時間くらいのぺらぺらトーク。 - ハードル下げて聞いてくれ。 - フロントエンドわからん人はすまん。内職してくれ。 --- ## そもそも Vite とは 主にフロントエンド向けのビルドツール。 昔でいう create-react-app とか vue-cli に相当するもの。 Vue/React/Svelte とか向けのビルドツール。 (Java で言えば gradle だと思う) Vue の作者の Evan You が作ってる。 ![](https://i.imgur.com/eiXmPe2.png) --- ## Vite は早い 中規模くらいの Vue アプリで移行をしたところ以下くらい違う。 ```console vue-cli 開発サーバーの起動: 12.456 s ビルド: 25.48 s vite 開発サーバーの起動: 160 ms ビルド: 11.19 s ``` --- ## なぜはやいのか? それが気になったので調べてみた。 以下が理由っぽい - esbuild を使ってる - ネイティブ ESM を使ってる - 最適化 --- ## esbuild とは esbuild とは Go で書かれたビルドツール。 https://esbuild.github.io/ ![](https://i.imgur.com/6muDcOg.png) --- ## esbuild とは - そもそも Go で書かれた時点で webpack より早い。 - 並列化されまくってるらしい --- ## ネイティブ ESM とは ECMAScript の仕様の一部であるモジュールシステム。 (いままで JS は仕様として import/export 構文を持ってなかったけど ES2015 から追加された) バンドルという処理自体がクソ重い → import/export の解決を行わずブラウザにやってもらうことで解決 (ただし、本番環境ではクライアントとサーバーの通信を減らす必要があるため、引き続きバンドルがいる) --- ## 最適化 - 頻繁に変換されない node_modules 以下等のライブラリは先に変換処理をかけておく - CJS を先に ESM にしておくとか - ESM の依存グラフをたどってファイルが更新されると関係あるモジュールだけビルドする --- ## ついでに Turbopack の話 Vercel によって webpack や vite を置き換えるものとして Turbopack が出た。 Vite と異なる点 - バンドルしないアプローチを取った Vite に対して、クソ早くバンドルすることを選んだ - バンドルという行為は最適化した - デフォルトで swc を利用 - swc とはRust 製の JS/TS コンパイル・バンドルツール --- ## ちょっとしたひと悶着 Vercel < Turborepo は Vite の 10 倍早い → Evan You 怒 https://github.com/yyx990803/vite-vs-next-turbo-hmr/discussions/8 Evan You の言い分(もっと色々言ってる) - 自分で測ったけどそんな速くない - → ベンチマーク方法を教えろ - 両方 swc 使った状態で比較しろ - モジュール数 30k 超えると 10 倍差がつくって言ってるけどそんなケースありえんだろ --- ## 個人的見解 - パフォーマンスは同じくらい - Turbopack は beta やし、本番で全く使えん - 後発で後継をここまで追い抜けるの Vercel すごい --- ## まとめ - Vite は早い - esbuild - ネイティブ ESM - Turbopack に期待 ---
{"metaMigratedAt":"2023-06-17T15:37:51.256Z","metaMigratedFrom":"YAML","title":"KT-yoshiki Vite がなぜ早いのか","breaks":true,"slideOptions":"{\"theme\":\"white\",\"slideNumber\":\"c/t\",\"transition\":\"none\",\"keyboard\":true,\"width\":\"93%\",\"height\":\"100%\"}","contributors":"[{\"id\":\"4af5dd16-098f-44c1-bc14-a63a21ab4417\",\"add\":2373,\"del\":303}]"}
    503 views
   owned this note