前端必会的Webpack优化技巧

yizhihongxing

前端工程化是现代 web 开发不可或缺的一部分。而其中用来打包资源的Webpack更是一个必会的技能。然而在使用Webpack的过程中,为了达到最佳性能,我们还需要通过一些优化技巧来优化Webpack的打包过程。本文将介绍前端必会的Webpack优化技巧全攻略。

一、基础优化

1.1 设置webpack.config.js

webpack.config.js 是Webpack打包的配置文件。可以通过对打包输出文件进行优化来提升打包速度。下面是一些基础的优化配置:

  • 使用空对象:在开发过程中,我们无需开启任何 optimization 选项,比如 optimization: {}

  • 选择合适的模式:可以指定为开发模式或者生产模式

JS
module.exports = {
mode: 'development', // 'production' || 'development'
}

  • 增加 resolve.modules 配置

assets 文件夹中还经常会有 font 或者 svg,这些恐怕只有在测试阶段才有必要引入到项目当中。所以,在正式环境中,可以只保留 src 文件夹,减少文件检索的冗余查找。

javascript
module.exports = {
resolve: {
modules: ['node_modules'], // 只检索 node_modules 文件夹
},
}

1.2 静态资源处理

在应用中引入若干静态资源库,例如 Less / SASS / Stylus、iconfont、Bootstrap、jQuery 等。由此可以开发出完整的模板,使得组件开发更加轻松高效。但是随着时间的推移,这些资源库可能会越来越臃肿,从而导致应用变得越来越慢。因此,对于一些依赖项,您需要只在开发阶段把它们放进来,而不是在应用程序中保留它们。对于生产,可以通过一个脚本(例如,build 脚本)来将所有除应用程序之外的所有内容移除掉。

const HtmlWebpackPlugin = require('html-webpack-plugin');

module.exports = {
  plugins: [new HtmlWebpackPlugin()],
  performance: {
    hints: process.env.NODE_ENV === 'production' ? 'warning' : false,
  },
};

二、性能优化

2.1 使用 tree shaking 剔除冗余代码

treeshaking是指在程序打包的过程中,基于静态代码分析的技术,获取程序中最终被执行的 JavaScript 代码,去掉程序中未被用到的代码。当应用程序变得越来越大时,这个方式比根据静态分析 HAR 文件移除 JavaScript 或分析代码库所花费的时间小得多。

//webpack.config.js
module.exports={
    mode:"production",
    entry:{
        index:"./src/index.js"
    },
    output:{
        path:path.resolve(__dirname,'dist'),
        filename:'bundle.js'
    },
    optimization:{
        minimize:true
    }
}

2.2 基于缓存的优化

对于一些不变的第三方库,你可以利用缓存机制提升你应用程序的性能。为了实现,你需要在浏览器中缓存你的 vendor.bundled.js 文件,它包含了所有的与外来库的交互。这样,如果第三方库没有发生变化并且有缓存,你就很快就能在第二次加载页面的时候获得主代码包。

2.3 单独拆分 CSS 文件

对于小型应用,当 CSS 文件被加载时,它可以位于 page HTML 页面的 中。但是对于大型应用来说,如果你把应用从一个单一的 HTML 文档中拆分出去(例如使用服务端网页应用程序,或使用某种类似 Vue 的工具把应用编译成 HTML、CSS 和 JavaScript)时,需要一个单独的 CSS 文件。

```
//webpack.config.js
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
const path = require('path');

module.exports = {
...
module: {
rules: [
{
test: /.scss$/,
use: [MiniCssExtractPlugin.loader, 'css-loader', 'sass-loader'],
},
],
},
plugins: [new MiniCssExtractPlugin()],
};


### 2.4 使用 compression-webpack-plugin 来压缩成 zip 格式

gzip 是最常见的压缩算法,最常用的提高性能的机制之一。压缩生产包儿所花费的时间是很值得的,因为它可以减少页面加载时间、减少文件传输时间。

//webpack.config.js
const CompressionPlugin = require('compression-webpack-plugin');

module.exports = {
...
performance: {
hints: false,
maxAssetSize: 3000000,
maxEntrypointSize: 6000000,
},
plugins: [
new CompressionPlugin({
test: /.js(\?.*)?$/i,
}),
],
};
```

结语

WebPack 优化不是一件容易的事情。我们需要充分的理解 WebPack 的打包原理,了解其工作流程,在确定问题并深入分析性能调优技巧时充分实践。当你在模块化前端资产时,需要有一个 WebPack 性能优化的计划。理解了 WebPack 相关的性能优化技巧之后,我们的 web 应用程序将展现出很大的改善。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:前端必会的Webpack优化技巧 - Python技术站

(0)
上一篇 2023年6月10日
下一篇 2023年6月10日

相关文章

  • 详解CSS盒子塌陷的5种解决方法

    详解CSS盒子塌陷的5种解决方法 在CSS布局过程中,经常会遇到盒子塌陷的问题。盒子塌陷是指由于子元素的高度和父级元素的高度不同,导致父级元素高度无法撑起子元素的情况。 盒子塌陷的原因 盒子塌陷的原因主要有两种: 浮动元素未清除浮动,导致父级元素不包含浮动元素。 父级元素设置了固定高度或最小高度,导致高度无法自适应。 解决方法 方法一:清除浮动 清除浮动可通…

    css 2023年6月10日
    00
  • JS瀑布流实现方法实例分析

    JS瀑布流实现方法实例分析 瀑布流布局是一种常用的网页布局方式,具有美观简洁、适合显示大量图片等特点。本文将详细讲解如何使用JavaScript实现瀑布流布局。 实现原理 瀑布流布局的实现原理主要有两点: 以列为单位,每一列假设有相同的宽度,每个元素按照顺序依次放置在各列中,列的高度不断变化; 元素的位置需要经过计算,如果某个元素的位置高度最小,就将该元素放…

    css 2023年6月10日
    00
  • jQuery+html5+css3实现圆角无刷新表单带输入验证功能代码

    要实现圆角无刷新表单带输入验证功能,需要使用jQuery、HTML5和CSS3来完成。下面就是实现步骤: 1. 定义页面结构 <form id="myForm" action="" method="post"> <div class="form-group"&g…

    css 2023年6月10日
    00
  • css3实现波纹特效、H5实现动态波浪效果

    CSS3实现波纹特效攻略: 常用技术 CSS3 transform CSS3 animation CSS3 transition box-shadow 实现步骤 首先我们需要创建一个HTML元素,为了方便,我们可以选用button元素。 然后在CSS中设置该元素的基本样式,包括大小、颜色和位置等。 接下来,我们需要设置hover伪类,当该元素被hover时,…

    css 2023年6月10日
    00
  • 详解盒子端CSS动画性能提升

    本文主要介绍如何使用CSS动画优化盒子端页面的性能。在开始之前,你需要知道CSS动画的两种类型:过渡和动画。 一、过渡 CSS过渡是通过改变元素的属性值来实现动画效果的。它可以平滑过渡元素的状态,比如颜色、透明度、大小和位置等属性。 1. 如何使用过渡 使用过渡需要指定CSS属性名、时间和转换类型。创建CSS过渡的语法如下: transition: prop…

    css 2023年6月10日
    00
  • 小程序中使用css var变量(使js可以动态设置css样式属性)

    使用 CSS 变量可以大大提高开发效率,让我们能够一次性定义样式,然后全局使用。在小程序中使用 CSS 变量,可以使 JS 可以动态设置 CSS 样式属性。 下面是使用 CSS 变量(或者称为 CSS 自定义属性)的完整攻略: 在样式中定义变量 使用 CSS 变量需要在样式中先定义变量名及其对应的值,语法为:–变量名: 值;。例如: :root { –m…

    css 2023年6月9日
    00
  • javascript 精确获取样式属性(下)

    JavaScript 精确获取样式属性(下) 在上一篇文章中,我们介绍了如何使用 getComputedStyle 方法获取元素的计算样式,但是这个方法有一些局限性,本篇文章会继续探讨如何在 JavaScript 中精确获取元素的样式属性。 获取 transform 中的具体属性 在 CSS3 中,transform 属性可以改变元素的形状、大小和位置等,它…

    css 2023年6月10日
    00
  • js淡入淡出焦点图幻灯片效果代码分享

    请允许我详细讲解一下如何实现JavaScript淡入淡出焦点图幻灯片效果。 准备工作 首先,我们需要准备好HTML、CSS和JavaScript文件,并通过HTML文件引入JavaScript文件。此外,我们还需要在HTML中添加包含幻灯片图片的容器元素。 示例代码: <!DOCTYPE html> <html> <head&g…

    css 2023年6月10日
    00
合作推广
合作推广
分享本页
返回顶部