こんにちは! Syuu( @syuu_n18)です。
私が作成している Next.js アプリを Lighthouse で確認してみたところ、最初に読み込まれる JS のサイズが大きく、その中でも moment-timezone
に含まれる latest.json
がかなり大きかったので削減してみました。
今回はその方法について書いていきます。
Next.js でのバンドルサイズは
@next/bundle-analyzer というライブリを使用して確認することができます。
以下の記事で詳しく解説していますのでよければ参考にしてください!
@next/bundle-analyzer
を実行すると client.html
へ上記のように各チャンク毎にバンドルされているライブラリが色分けされて表示されます。
その中でも moment-timezone
で使用している latest.json
というファイルが特に巨大なのがわかると思います。
では問題となっている箇所を確認できましたので、latest.json
を最適化していきましょう。
デフォルトでは latest.json
は全てのタイムゾーン設定を記載している json ファイルのためサイズがかなり大きくなっています。
そこで、使用するタイムゾーンの設定のみを適用することで最適化をおこなっていきます。
タイムゾーンの設定を日本のデータのみへ変更するには moment-timezone-data-webpack-plugin というライブラリを使用します。
まずは、以下のコマンドで moment-timezone-data-webpack-plugin
をインストールします。
npm install --save-dev moment-timezone-data-webpack-plugin
もしくは
yarn add --dev moment-timezone-data-webpack-plugin
インストールが完了したら next.config.js
へ moment-timezone-data-webpack-plugin
を使用する設定を追記していきます。
デフォルトでは next.config.js
というファイルが存在していないため、必要であればルート直下に作成してください。
Next.js で webpack の plugin を使用する場合は 公式ドキュメント にあるように記載していけば OK です。
具体的には以下のように記載します。
const withBundleAnalyzer = require('@next/bundle-analyzer')({
enabled: process.env.ANALYZE === 'true',
})
const MomentTimezoneDataPlugin = require('moment-timezone-data-webpack-plugin')
module.exports = withBundleAnalyzer({
webpack: (config) => {
config.plugins.push(
new MomentTimezoneDataPlugin({
matchCountries: 'JP'
})
)
return config
},
})
matchCountries
へ JP
を設定することで日本のみのデータに限定しサイズを削減しています。
これで最適化は完了です。
最適化が完了したら再度バンドルサイズを確認してみましょう。
上記のように client.html
へ表示されている latest.json
が小さくなっていれば成功です。
色が変わっていますが、半分ほどの大きさだった latest.json
が見事に見えないくらい小さくなっていることがわかりますね。
サイズも無事 84.28KB → 58.77KB まで小さくなっています。
ふと導入したライブラリの影響でいつの間にバンドルサイズが大きくなってしまいパフォーマンスへ影響を与えてしまう場合があります。
いつの間にか遅いサイトになっていた、とならないようこまめに確認しておきたいですね。
ここまで読んでいただきありがとうございました!
TypeScriptの短絡評価の使い方「&&」「||」「??」の解説
TypeScriptのタイマー関数setTimeoutとsetIntervalの使い方
TypeScriptの多次元配列の使い方についてわかりやすく解説
TypeScriptでのタプルの使い方と実践テクニックを解説
TypeScriptのimport typeをわかりやすく解説
TypeScriptの配列やオブジェクトのソート完全ガイド
TypeScriptコメントアウトの使い方 完全ガイド
TypeScriptのオブジェクトとプロパティの存在チェック完全ガイド
TypeScriptで即時関数を使う方法を解説!基本から実践的な使い方まで