Upgrade to Pro — share decks privately, control downloads, hide ads and more …

バンドルファイルのサイズを50%軽量化した話/improve-bundle-size

 バンドルファイルのサイズを50%軽量化した話/improve-bundle-size

引越しや庭木の剪定などの出張・訪問サービスのプラットフォーム「くらしのマーケット」を運営する、みんなのマーケット株式会社です。
今回はくらしのマーケット内で読み込まれるバンドルファイルを軽量化した話について紹介いたします。

## エントリー
全職種で積極採用中!下記リンクより応募ください!(カジュアル面談も歓迎)
https://www.minma.jp/recruit

「話を聞いてみたい」もOKです!
応募フォーム→https://herp.careers/v1/minma/2qUQhRIRUr0Y/apply

More Decks by みんなのマーケット株式会社/ Minma Inc.

Transcript

  1. 目次 2 1. はじめに
 2. 現状分析
 3. 軽量化のアプローチ - その1(未使用ライブラリの削除)

    
 4. 軽量化のアプローチ - その2(TreeShakingの有効化) 
 5. 軽量化のアプローチ - その3(バンドルファイルの分割) 
 6. 最終結果
 7. 今後の取り組み
 8. 会社紹介

  2. 現状分析
 まずは現状をより詳細に知るため、各バンドルファイルの情報を可視化しました。 
 くらしのマーケットでは、バンドラーとしてWebpackを採用しているため 
 以下のプラグインを使用しました。 
 
 • webpack-bundle-analyzer

    
 
 このプラグインでは以下の情報を取得できます。 
 
 • 各バンドルファイルのサイズ(minify前後, 圧縮後)
 • サードパーティライブラリのサイズ
 • 不要なAngularモジュールやライブラリ
 • バンドル構成
 
 4 (webpack-bundle-analyzerが生成したバンドル構成図)
  3. 現状分析
 可視化された情報をもとに以下のことが分かりました。 
 
 
 • 不要なファイル・サードパーティライブラリの存在 
 
 •

    Tree-shakableではないライブラリの存在 
 
 • バンドルファイル分割の必要性 
 
 
 
 
 次ページではこれらの課題を解決していきます。 
 5
  4. 軽量化のアプローチ - その1(未使用ライブラリの削除)
 まず、各バンドルファイルで不要なファイル・ライブラリを洗い出しました。(以下) 
 • レガシーブラウザ向けに追加したpolyfill(現在はサポート対象外ブラウザのため削除) 
 • PC/SP向けに分けて実装されたHTML(現在はPC/SP統一済みのため削除)

    
 • 現在は使用していないComponentから参照されたサードパーティライブラリ など 
 
 また、webpackのalias設定に誤りがあり一部トランスパイル前のファイルがバンドルされていることが 
 発覚しました。トランスパイル後のファイルもバンドルされていたため、動作自体は問題ないのですが 
 不要なためバンドル対象外として認識されるように修正しました。 
 
 
 
 
 これにより、30〜50KB程度 削減
 
 
 6
  5. 軽量化のアプローチ - その2(TreeShakingの有効化)
 続いて、バンドルされるサードパーティライブラリの軽量化を行いました。 
 ライブラリの中にはバージョンが古く、webpackのtree-shakingが有効にならず 
 参照されていないコードも含めてバンドルされてしまっていたためバージョンを上げました。 
 また、影響が大きくバージョンアップは避けたもののライブラリの機能を個別にimportすることで

    
 改善できるものはimportの書き方を変更することで対応しました。 
 
 例:RxJS5では以下のようにオペレータを個別にimportするとバンドルサイズを抑えることができます。
 (RxJS6ではtree-shakingが有効になるため、変更前の記述が望ましいです。)
 
 
 7 これにより、80〜100KB程度 削減

  6. 今後の取り組み
 今回は軽量化施策の第1弾ということで対応しやすいものから対応を進めていました。 
 
 残課題
 • AngularやWebpackなどのバージョンアップ 
 ◦ Angularのバージョンがボトルネックで周辺ライブラリのバージョンアップができず

    Tree-Shakableではない古いライブラリを参照している 
 ◦ バージョンアップによる最適化の恩恵を受けられていない 
 • lodashやmoment.jsなどTree-Shakableではないライブラリからの移行 
 • モジュール設計の全体的な見直し 
 など
 
 まだまだ改善すべき内容は残っているので、一緒に対応してくれる方を募集中です。 
 12