created: 2020-07-24T15:01:24.000Z
jsファイルの容量削減 lodash/jQuery
webpackの設定がよくなかったのか、生成したバンドルjsファイルが重かったので若干雑な感じで軽くした
lodashは全部読み込むと結構重い
lodashは全部ビルドにふくめてしまうと500KBとかになっていてかなり重い
一部の関数しか使っていないのなら、こんな感じでロードするコードを減らすことができる。これはドキュメントにも書いてある方法
import { pull } from 'lodash';
import pull from 'lodash/pull';
ほとんと機能を使ってないjQueryが重い
getElementById
とか addEventListene
とか書きたくないので jQuery を使ったのだが、jQueryも意外と300KB弱あったので代替として cash
を使ってみた
これはきちんと動いたのでよかったのだが、TypeScript対応がきちんとされていてその点だけで本家のjQuery使うならこっちの方が全然良いなという感じだった
雑にライブラリごとのファイル容量を確認する
webpackがバンドルするファイル容量を確認する方法として webpack-bundle-analyzer
があるが、そこまで依存ライブラリが多くない場合は --display-modules
オプションをつければ一応ライブラリごとの容量が出力されるようになる
出力はこんな感じだが、依存が少なければ見れないこともない
$ npx webpack --display-modules
Hash: 705e7db395ef48091f13
Version: webpack 4.43.0
Time: 2545ms
Built at: 2020-07-25 0:06:12
Asset Size Chunks Chunk Names
index.js 238 KiB main [emitted] main
Entrypoint main = index.js
[./node_modules/brownies/brownies.min.js] 9.02 KiB {main} [built]
[./node_modules/cash-dom/dist/cash.js] 34.8 KiB {main} [built]
[./node_modules/css-loader/dist/cjs.js!./node_modules/sass-loader/dist/cjs.js!./src/browser/index.scss] 547 bytes {main} [built]
[./node_modules/css-loader/dist/runtime/api.js] 2.46 KiB {main} [built]
[./node_modules/lodash/_Symbol.js] 118 bytes {main} [built]
[./node_modules/lodash/_apply.js] 714 bytes {main} [built]
[./node_modules/lodash/_arrayMap.js] 556 bytes {main} [built]
[./node_modules/lodash/_baseFindIndex.js] 766 bytes {main} [built]
[./node_modules/lodash/_baseGetTag.js] 792 bytes {main} [built]
[./node_modules/lodash/_baseIndexOf.js] 659 bytes {main} [built]
[./node_modules/lodash/_baseIndexOfWith.js] 660 bytes {main} [built]
[./node_modules/lodash/_baseIsNaN.js] 296 bytes {main} [built]
[./node_modules/lodash/_baseIsNative.js] 1.38 KiB {main} [built]
[./node_modules/lodash/_basePullAll.js] 1.42 KiB {main} [built]
[./node_modules/lodash/_baseRest.js] 559 bytes {main} [built]
[./node_modules/lodash/_baseSetToString.js] 641 bytes {main} [built]
[./node_modules/lodash/_baseUnary.js] 332 bytes {main} [built]
[./node_modules/lodash/_copyArray.js] 454 bytes {main} [built]
[./node_modules/lodash/_coreJsData.js] 157 bytes {main} [built]
[./node_modules/lodash/_defineProperty.js] 233 bytes {main} [built]
[./node_modules/lodash/_freeGlobal.js] 173 bytes {main} [built]
[./node_modules/lodash/_getNative.js] 483 bytes {main} [built]
[./node_modules/lodash/_getRawTag.js] 1.11 KiB {main} [built]
[./node_modules/lodash/_getValue.js] 325 bytes {main} [built]
[./node_modules/lodash/_isMasked.js] 564 bytes {main} [built]
[./node_modules/lodash/_objectToString.js] 565 bytes {main} [built]
[./node_modules/lodash/_overRest.js] 1.07 KiB {main} [built]
[./node_modules/lodash/_root.js] 300 bytes {main} [built]
[./node_modules/lodash/_setToString.js] 392 bytes {main} [built]
[./node_modules/lodash/_shortOut.js] 941 bytes {main} [built]
[./node_modules/lodash/_strictIndexOf.js] 600 bytes {main} [built]
[./node_modules/lodash/_toSource.js] 556 bytes {main} [built]
[./node_modules/lodash/constant.js] 528 bytes {main} [built]
[./node_modules/lodash/identity.js] 370 bytes {main} [built]
[./node_modules/lodash/isFunction.js] 993 bytes {main} [built]
[./node_modules/lodash/isObject.js] 733 bytes {main} [built]
[./node_modules/lodash/pull.js] 758 bytes {main} [built]
[./node_modules/lodash/pullAll.js] 710 bytes {main} [built]
[./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js] 6.64 KiB {main} [built]
[./node_modules/webpack/buildin/global.js] (webpack)/buildin/global.js 472 bytes {main} [built]
[./src/browser/index.scss] 569 bytes {main} [built]
[./src/browser/index.ts] 3.6 KiB {main} [built]