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
React+webpackのビルドを高速化
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
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
5.1k
Protocol Buffers and Connect for Frontend Development
masashi
0
180
You may not need XXX in Node.js
masashi
5
2.1k
OSSとコミュニティを支える
masashi
1
2.3k
英語ができなかった自分達が、グローバルチーム立ち上げに挑戦!?
masashi
1
3.9k
フロントエンド開発のためのセキュリティ入門について
masashi
1
610
フロントエンド開発のためのセキュリティ入門
masashi
50
19k
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
Ghostty + Neovimで作る 透明でカッコ良い開発環境
j341nono
0
110
Snowflakeで業務アプリを作ろう。 Snowflakeのアプリ機能解説&実践ガイド
ayumu_yamaguchi
2
300
フロントエンドUIフレームワークのこれまでとこれから
ssssota
5
2.9k
UnityでSystem.Net.WebSocketsなWebSocketサーバが動かないのでUnity Monoのコードを覗いてみた / about implementing websocket server with unity mono
drumath2237
1
310
Streamlitで実現する自然言語データアプリ開発
ayumu_yamaguchi
1
310
AI Agent時代のリアーキテクチャ戦略と実践
hokaccha
9
4.9k
App Storeの外へ──日本のiOSサイドローディング入門 for iOSDC Japan 2026
yuukiw00w
0
240
市販E-Readerを乗っ取れ 〜Embedded Swiftで電子ペーパーガジェットを制御する〜
trickart
0
200
Are APIs Still Relevant in the AI Era?
soyuka
0
300
『寄り添うラジオ』をAIで作る 体験価値から逆算した、会話しないUXと品質設計
theoriatec2024
3
180
[Rails World 2026] Durable orchestration on Rails: from continuation to workflow
palkan
0
110
App Intentsのビルドプロセスを支える技術
kntkymt
0
420
Featured
See All Featured
How to build an LLM SEO readiness audit: a practical framework
nmsamuel
1
910
How to Ace a Technical Interview
jacobian
281
24k
WENDY [Excerpt]
tessaabrams
14
39k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
250
1.3M
The Cost Of JavaScript in 2023
addyosmani
55
10k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.9k
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
Building a Modern Day E-commerce SEO Strategy
aleyda
45
9.2k
Color Theory Basics | Prateek | Gurzu
gurzu
1
470
Measuring & Analyzing Core Web Vitals
bluesmoon
9
1k
Technical Leadership for Architectural Decision Making
baasie
3
580
A better future with KSS
kneath
240
18k
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でバンドルしてみた & そのとき出会ったハマりどころまと め
宣伝
ご清聴ありがとうございました