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
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
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
RTSPクライアントを自作してみた話
simotin13
0
610
さぁV100、メモリをお食べ・・・
nilpe
0
140
過去最大のMCPアップデート! 2026-07-28 RC版の謎に迫る
licux
6
360
肥大化するレガシーコードに立ち向かうためのインターフェース分離と依存の逆転 / JJUG CCC 2026 Spring
hirokunimaeta
0
570
Semantic Version 単位で戦略を柔軟に変えて、パッケージアップデートを自動化する
daitasu
1
260
[2026年度第1回ORセミナー] 計画最適化ベンチャーと競技プログラミング人材
terryu16
0
270
Spring Security 実践 ─ GraphQL APIで実務に役立つ 認証・認可 を学ぶ
wagyu
0
250
正しくソフトウェアを作る、前提を疑うための認知の視点 / doubt-premise
minodriven
21
6.7k
フロントエンドとバックエンドで「1文字」を揃えよう
youkidearitai
PRO
0
710
net-httpのHTTP/2対応について
naruse
0
500
CSC307 Lecture 17
javiergs
PRO
0
320
C# and C++ Interoperability - cho-dotnetnew
harukasao
0
240
Featured
See All Featured
Designing Powerful Visuals for Engaging Learning
tmiket
1
420
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
170
BBQ
matthewcrist
89
10k
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
290
Documentation Writing (for coders)
carmenintech
77
5.4k
Agile that works and the tools we love
rasmusluckow
331
21k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
2.9k
Measuring Dark Social's Impact On Conversion and Attribution
stephenakadiri
2
220
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
460
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
1
260
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
2
400
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でバンドルしてみた & そのとき出会ったハマりどころまと め
宣伝
ご清聴ありがとうございました