0

0

Webpack新特性详解及性能优化实践

碧海醫心

碧海醫心

发布时间:2024-12-09 14:30:01

|

1050人浏览过

|

来源于dev.to

转载

webpack新特性详解及性能优化实践

1. 长期缓存

webpack 5 通过确定性的 chunk id、模块 id 和导出 id 实现长期缓存,这意味着相同的输入将始终产生相同的输出。这样,当您的用户再次访问更新后的网站时,浏览器可以重用旧的缓存,而不用重新下载所有资源。

// 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',
        },
    },
    // ...
};

2. tree shaking 优化

webpack 5 增强了 tree shaking 的效率,特别是对 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';

3. 连接模块

webpack 5 的 concatenatemodules 选项可以组合小模块来减少 http 请求的数量。不过这个功能可能会增加内存消耗,所以使用时需要权衡一下:

    // webpack.config.js
    module.exports = {
    // ...
    optimization: {
        concatenatemodules: true, // defaults to true, but may need to be turned off in some cases
    },
    // ...
    };

4. node.js 模块 polyfills 移除

webpack 5 不再自动为 node.js 核心模块注入 polyfill。开发者需要根据目标环境手动导入:

// 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';

5. 性能优化实践

  • 使用缓存:配置cache.type:'filesystem'使用文件系统缓存来减少重复构建。

  • splitchunks 优化:根据项目需求调整 optimization.splitchunks,例如:

    名扬银河企业建站源码2.0.2
    名扬银河企业建站源码2.0.2

    名扬银河企业建站系统,适用于无代码基础的新手,快速搭建企业网站,程序内置了多项实用功能及插件,能够便捷的对网站进行修改、调整、优化等方面进行操作。【部分功能介绍】1、产品管理发布企业产品信息,管理企业产品,自定义产品封面图,产品详情图、文、视频,产品扩展属性自定义等。2、案例管理系统发布企业成功案例,管理成功案例,自定义案例封面图,案例详情图、文、视频,案例扩展属性自定义等。3、资讯管理系统发布企

    下载
// 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
        },
    },
    // ...
};
  • 模块解析优化:通过resolve.mainfields和resolve.modules配置减少模块解析的开销。

  • 并行编译:使用threads-loader或worker-loader并行处理任务,加快编译速度。

  • 代码分割:使用动态导入(import())按需加载代码,减少初始加载时间。

// main.js
import('./dynamic-feature.js').then((dynamicfeature) => {
    dynamicfeature.init();
});
  • 模块联合:使用webpack.container.module配置实现跨应用程序的代码共享,减少重复打包。
// webpack.config.js
module.exports = {
    // ...
    experiments: {
        outputmodule: true, // enable output module support
    },
    // ...
};

6、tree shaking的深入应用

虽然webpack 5本身对tree shake进行了优化,但开发者可以通过一些策略进一步提高其效果。确保您的代码遵循以下原则:

  • 避免全局变量污染:全局变量可以防止 tree shake 识别未使用的代码。
  • 使用纯函数:确保函数没有副作用,以便webpack可以安全地删除未调用的函数。
  • 显式导出:使用显式导出(export const func = ... 而不是导出默认 func)有助于 tree shake 更准确地工作。
  • 死代码消除:结合eslint的no-unused-vars规则,确保没有未使用的导入。

7.loader和plugin优化

  • 减少 loader 使用:每个 loader 都会增加构建时间。仅在必要时使用loaders,并考虑是否可以合并某些loaders的功能。
  • 加载器缓存:确保加载器支持并启用缓存,例如使用cachedirectory选项。
  • 选择高效的插件:有些插件可能对性能影响较大。评估并选择性能更好的替代方案,或调整其配置以减少开销。

8. source map策略

源映射对于调试至关重要,但它也会增加构建时间和输出大小。您可以根据环境调整source map类型:

// webpack.config.js
module.exports = {
    // ...
    devtool: isproduction ? 'source-map' : 'cheap-module-source-map', // use a smaller source map in production environment
    // ...
};

9. 图片及静态资源处理

  • asset modules:webpack 5引入了asset modules,可以直接处理图片等静态资源,无需额外配置loader。此功能可以简化配置并提高性能。
module.exports = {
    // ...
    module: {
        rules: [
        {
            test: /\.(png|jpe?g|gif|svg)$/i,
            type: 'asset/resource', // Automatic resource processing
        },
        ],
    },
    // ...
};
  • 图像压缩和优化:使用 image-webpack-loader 等工具在构建过程中自动压缩图像,以减小文件大小。

10.持续监测和分析

  • 使用webpack bundle analyzer:这是一个强大的可视化工具,可以帮助您了解输出包的组成,识别大模块,然后对其进行优化。
  • 定期检查依赖项:使用npmaudit或yarnaudit等工具检查依赖项的安全性和更新状态,及时删除不再使用的包或升级到更轻的替代方案。

相关文章

数码产品性能查询
数码产品性能查询

该软件包括了市面上所有手机CPU,手机跑分情况,电脑CPU,电脑产品信息等等,方便需要大家查阅数码产品最新情况,了解产品特性,能够进行对比选择最具性价比的商品。

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
c语言const用法
c语言const用法

const是关键字,可以用于声明常量、函数参数中的const修饰符、const修饰函数返回值、const修饰指针。详细介绍:1、声明常量,const关键字可用于声明常量,常量的值在程序运行期间不可修改,常量可以是基本数据类型,如整数、浮点数、字符等,也可是自定义的数据类型;2、函数参数中的const修饰符,const关键字可用于函数的参数中,表示该参数在函数内部不可修改等等。

531

2023.09.20

全局变量怎么定义
全局变量怎么定义

本专题整合了全局变量相关内容,阅读专题下面的文章了解更多详细内容。

78

2025.09.18

python 全局变量
python 全局变量

本专题整合了python中全局变量定义相关教程,阅读专题下面的文章了解更多详细内容。

96

2025.09.18

golang map内存释放
golang map内存释放

本专题整合了golang map内存相关教程,阅读专题下面的文章了解更多相关内容。

75

2025.09.05

golang map相关教程
golang map相关教程

本专题整合了golang map相关教程,阅读专题下面的文章了解更多详细内容。

36

2025.11.16

golang map原理
golang map原理

本专题整合了golang map相关内容,阅读专题下面的文章了解更多详细内容。

60

2025.11.17

java判断map相关教程
java判断map相关教程

本专题整合了java判断map相关教程,阅读专题下面的文章了解更多详细内容。

42

2025.11.27

js正则表达式
js正则表达式

php中文网为大家提供各种js正则表达式语法大全以及各种js正则表达式使用的方法,还有更多js正则表达式的相关文章、相关下载、相关课程,供大家免费下载体验。

514

2023.06.20

java入门学习合集
java入门学习合集

本专题整合了java入门学习指南、初学者项目实战、入门到精通等等内容,阅读专题下面的文章了解更多详细学习方法。

1

2026.01.29

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
10分钟--Midjourney创作自己的漫画
10分钟--Midjourney创作自己的漫画

共1课时 | 0.1万人学习

Midjourney 关键词系列整合
Midjourney 关键词系列整合

共13课时 | 0.9万人学习

AI绘画教程
AI绘画教程

共2课时 | 0.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号