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
React+webpackのビルドを高速化
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Masashi Hirano
January 11, 2018
Programming
2k
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
React+webpackのビルドを高速化
Osaka Mix Leap #4 - React でLTしました。
https://yahoo-osaka.connpass.com/event/75065/
Masashi Hirano
January 11, 2018
More Decks by Masashi Hirano
See All by Masashi Hirano
フロントエンド開発のためのブラウザ組み込みAI入門
masashi
7
4.8k
Protocol Buffers and Connect for Frontend Development
masashi
0
160
You may not need XXX in Node.js
masashi
5
2.1k
OSSとコミュニティを支える
masashi
1
2.1k
英語ができなかった自分達が、グローバルチーム立ち上げに挑戦!?
masashi
1
3.8k
フロントエンド開発のためのセキュリティ入門について
masashi
1
600
フロントエンド開発のためのセキュリティ入門
masashi
50
18k
Node.jsの2022年と未来 / Node.js in 2022 and Future
masashi
1
1.2k
Corepack ~Node.jsに追加されたパッケージマネージャーマネージャー~ / #tng37
masashi
3
13k
Other Decks in Programming
See All in Programming
タクシーアプリ『GO』の バックエンド開発のおける AI利活用と若者のすべて
pyama86
3
2k
フロントエンドとバックエンドで「1文字」を揃えよう
youkidearitai
PRO
0
260
Dataformのリポジトリを立ち上げるときにまずやること / dataform-day0-2026
snhryt
0
150
Observability in Practice:Grafana 與 Edge Device SRE 的那些事
blueswen
0
160
運用エージェントは "作る" から "育てる" へ - 記憶と自己進化の3層設計パターン / self-evolving-agents-three-layer-agent-design
gawa
12
3.6k
さぁV100、メモリをお食べ・・・
nilpe
0
140
ADKを使って簡単にAIエージェントを作ってみよう
k1mu21
0
260
LLM Plugin for Node-REDの利用方法と開発について
404background
0
170
生成AI時代にこそ効くGo | Why Go Works in the Age of Generative AI
mom0tomo
8
3.2k
Developing with AI Agents — Codex, Claude Code & Cowork Practical Guide
x5gtrn
PRO
0
1.3k
3Dシーンの圧縮
fadis
1
730
net-httpのHTTP/2対応について
naruse
0
470
Featured
See All Featured
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
201
75k
Fireside Chat
paigeccino
42
3.9k
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.7k
Paper Plane
katiecoart
PRO
1
51k
Building the Perfect Custom Keyboard
takai
2
790
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
1
540
The browser strikes back
jonoalderson
0
1.2k
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
280
What does AI have to do with Human Rights?
axbom
PRO
1
2.2k
How Software Deployment tools have changed in the past 20 years
geshan
0
34k
Building a Modern Day E-commerce SEO Strategy
aleyda
45
9.1k
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
0
320
Transcript
React+webpackのビルドを高速化 Osaka Mix Leap (2018/01/11)平野昌士 / @shisama
{ "about": { "name": "Masashi Hirano", "works": "Weblio, Inc.", "twitter":
"@shisama_", "github": "shisama" } }
この発表の対象者 webpack使ってる方 JSのビルドに時間がかかるとお悩みの方 開発スピードをもっとあげたい方
仕事でReactを使ったSPAを開発して います
webpackを使ってビルドしています
webpackのビルド実行時間 1分もかかります
もっとビルド早くして開発スピードあ げたい
主にwebpackでしていること 複数ファイルを一つにバンドル babelでES2015+やReactを変換 minify
高速化前のwebpack.config module.exports = { // webpack.config.js 一部抜粋 plugins: [ new
webpack.optimize.UglifyJsPlugin(), ], module: { rules: [ { test: /\.(js|jsx)$/, use: 'babel-loader', }, ] }, };
ここからビルドの実行を高 速化していきます
高速化に使ったもの cacheDirectory DllPlugin
cacheDirectory
cacheDirectory babel‒loaderのオプション機能 babelの結果をキャッシュする デフォルトではoffになっています
cacheDirectoryの使いかた webpack.config内のbabel‒loaderにクエリを追加する だけ
cacheDirectoryの使いかた module.exports = { // webpack.config.js 一部抜粋 plugins: [ new
webpack.optimize.UglifyJsPlugin(), ], module: { rules: [ { test: /\.(js|jsx)$/, use: 'babel-loader?cacheDirectory', // cacheDirectory on }, ] }, };
ビルド実行時間 高速化前: 1分前後 cacheDirectory(初回): 1分前後 cacheDirectory(2回目以降): 40秒~50秒
DllPlugin
DllPlugin webpackのプラグイン 依存PKGだけバンドルしてファイル分割 →reactとかreact‒domとかを別ファイルにまとめる →分割するので、元のバンドルファイルは軽くなる →分割したファイル両方をhtmlで読み込む 依存PKGに変更が無ければDLLバンドルファイルの更 新は不要
DllPluginの使い方 DLLバンドル用のwebpack.configを用意 これまでのwebpack.config側でDLLバンドルの情報を 読み込む 分割したファイルをhtmlで読み込む
DLLバンドル用のwebpack.config const path = require('path'); const webpack = require('webpack'); module.exports
= { entry: { // 依存PKG 配列 指定 vendor: ['react', 'react-dom' /* 依存PKG */], }, output: { path: 'path/to/dist', filename: '[name].dll.js', library: '[name]', }, plugins: [ // DllPlugin manifest.json 吐 new webpack.DllPlugin({ path: 'path/to/dll/[name]-manifest.json'), name: '[name]', }), new webpack.optimize.UglifyJsPlugin(), ], resolve: { modules: [path.resolve(__dirname, 'src'), 'node_modules'], }, };
これまでのwebpack.config module.exports = { // webpack.config.js 一部抜粋 plugins: [ //
Dll 使 new webpack.DllReferencePlugin({ context: __dirname, // DLL manifest.json 指定 manifest: require('path/to/dll/vendor-manifest.json'), }), new webpack.optimize.UglifyJsPlugin(), ], module: { rules: [ { test: /\.(js|jsx)$/, use: 'babel-loader?cacheDirectory', // cacheDirectory on }, ] } };
分割したファイルをhtmlで読み込む <!-- DLL 先 読 込 --> <script src="./vendor.dll.js"></script> <!--
元 --> <script src="./index.bundle.js"></script>
ビルド実行時間 高速化前: 1分前後 cacheDirectory(2回目以降): 40~50秒 cacheDirectory+DllPlugin: 20秒前後
その他高速手段 ・happypack ・webpackのキャッシュ ・今回は効果が出ませんでした ・webpack#externals ・指定したPKGをバンドルに含めない ・依存PKGはCDNから取ってくる場合おすすめ ・parcel ・バズったやつ ・Blazing
fast。webpackよりかなりビルド早い ・no config ・webpackほど機能豊富ではない ・minifyが壊れていたりするらしい ・現状では導入は厳しそう
参考 ・ ・ ・ ・ ・ babel‒loader DllPlugin webpackのDLLバンドルを使ってビルドを速くする webpack時代の終わりとparcel時代のはじまり
parcelでバンドルしてみた & そのとき出会ったハマりどころまと め
宣伝
ご清聴ありがとうございました