Webpack 5 melaksanakan caching jangka panjang melalui ID Chunk, ID modul dan ID eksport yang menentukan, yang bermaksud bahawa input yang sama akan sentiasa menghasilkan output yang sama. Dengan cara ini, apabila pengguna anda melawati tapak web yang dikemas kini semula, penyemak imbas boleh menggunakan semula cache lama dan bukannya memuat turun semula semua sumber.
// webpack.config.js module.exports = { // ... output: { // Use contenthash to ensure that the file name is associated with the content filename: '[name].[contenthash].js', chunkFilename: '[name].[contenthash].chunk.js', // Configure the asset hash to ensure long-term caching assetModuleFilename: '[name].[contenthash][ext][query]', // Use file system cache cache: { type: 'filesystem', }, }, // ... };
Webpack 5 meningkatkan kecekapan Tree Shaking, terutamanya sokongan untuk ESM.
// package.json { "sideEffects": false, // Tell Webpack that this package has no side effects and can safely remove unreferenced code } // library.js export function myLibraryFunction() { // ... } // main.js import { myLibraryFunction } from './library.js';
Pilihan concatenateModules Webpack 5 boleh menggabungkan modul kecil untuk mengurangkan bilangan permintaan HTTP. Walau bagaimanapun, ciri ini mungkin meningkatkan penggunaan memori, jadi anda perlu menggunakannya dengan pertukaran:
// webpack.config.js module.exports = { // ... optimization: { concatenateModules: true, // Defaults to true, but may need to be turned off in some cases }, // ... };
Webpack 5 tidak lagi menyuntik polyfill secara automatik untuk modul teras Node.js. Pembangun perlu mengimportnya secara manual mengikut persekitaran sasaran:
// If you need to be compatible with older browsers, you need to manually import polyfills import 'core-js/stable'; import 'regenerator-runtime/runtime'; // Or use babel-polyfill import '@babel/polyfill';
Gunakan cache: Konfigurasikan cache.type:'filesystem' untuk menggunakan cache sistem fail untuk mengurangkan binaan berulang.
Pengoptimuman SplitChunks: Laraskan pengoptimuman.splitChunks mengikut keperluan projek, contohnya:
// webpack.config.js module.exports = { // ... optimization: { splitChunks: { chunks: 'all', minSize: 10000, // Adjust the appropriate size threshold maxSize: 0, // Allow code chunks of all sizes to be split }, }, // ... };
Pengoptimuman resolusi modul: Kurangkan overhed resolusi modul melalui konfigurasi resolve.mainFields dan resolve.modules.
Kompilasi selari: Gunakan pemuat benang atau pemuat pekerja untuk memproses tugas secara selari dan mempercepatkan penyusunan.
Pembahagian kod: Gunakan import dinamik (import()) untuk memuatkan kod atas permintaan dan mengurangkan masa pemuatan awal.
// main.js import('./dynamic-feature.js').then((dynamicFeature) => { dynamicFeature.init(); });
// webpack.config.js module.exports = { // ... experiments: { outputModule: true, // Enable output module support }, // ... };
Walaupun Webpack 5 sendiri telah mengoptimumkan Tree shaking, pembangun boleh meningkatkan lagi kesannya melalui beberapa strategi. Pastikan kod anda mengikut prinsip berikut:
Peta Sumber adalah penting untuk penyahpepijatan, tetapi ia juga meningkatkan masa binaan dan saiz output. Anda boleh melaraskan jenis Peta Sumber mengikut persekitaran:
// webpack.config.js module.exports = { // ... output: { // Use contenthash to ensure that the file name is associated with the content filename: '[name].[contenthash].js', chunkFilename: '[name].[contenthash].chunk.js', // Configure the asset hash to ensure long-term caching assetModuleFilename: '[name].[contenthash][ext][query]', // Use file system cache cache: { type: 'filesystem', }, }, // ... };
// package.json { "sideEffects": false, // Tell Webpack that this package has no side effects and can safely remove unreferenced code } // library.js export function myLibraryFunction() { // ... } // main.js import { myLibraryFunction } from './library.js';
Atas ialah kandungan terperinci Penjelasan terperinci tentang ciri baharu Webpack dan amalan pengoptimuman prestasi. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!