webpack-性能优化-代码分离

本文介绍了性能优化的方法,包括对打包结果的分包处理、使用CDN、代码分离(多入口、动态导入)、Webpack的SplitChunksPlugin分包配置,以及Prefetch和Preload预加载技术的应用。
摘要由CSDN通过智能技术生成

性能优化的方式

1.**对打包后的结果进行优化(**分包处理,减小包的体积,使用cdn服务器)
2.优化打包速度(exclude,cache-loader)
一般更侧重于对打包后的结果进行优化。

默认情况下所有打包后的结果都会放到一个文件中,如自己编写的代码,第三方库react,axios,dayjs等都会打包到一个文件中,这就需要对代码进行分离

代码分离

代码分离的方式主要有3种:
入口起点:可以配置多个entry入口
去除重复代码:使用Entry Dependencies 或SplitChunksPlugin去重和分离代码
动态导入:通过调用模块的内联函数来分离代码

多入口

webpack

entry: {
    main: "./src/main.js",
    index: "./src/index.js",
  },
  //这里要注意打包后的文件名称要不同 所以使用了[name] 
  output: {
    filename: "[name]-bundle.js",
    path: path.resolve(__dirname, "./build"),
    clean: true,
  },

index.html中可以不同导入脚本,打包后的html会自动导入脚本。
在这里插入图片描述
打包后的html:
在这里插入图片描述
打包后的文件目录:
在这里插入图片描述

多入口共享公共的依赖

 entry: {
    main: {
      import: "./src/main.js",
      dependOn: "shared",
    }, //shared可以是任意的
    index: {
      import: "./src/index.js",
      dependOn: "shared",
    },
    shared: "dayjs",  //[]数组形式可以共享多个
  },
  output: {
    filename: "[name]-bundle.js",
    path: path.resolve(__dirname, "./build"),
    clean: true,
  },

在main和index中使用:
在这里插入图片描述
打包后的目录:
在这里插入图片描述

动态导入

使用ECMAScript的import()动态导入,在用到对应的组件时才会加载。动态导入主要用于懒加载(比如路由懒加载)
在这里插入图片描述
打包后的文件
在这里插入图片描述
打开页面后它默认是不会加载动态导入的组件的
在这里插入图片描述
当使用到异步组件时才会加载
在这里插入图片描述
使用动态导入会分包,可以使用chunkFilename对分包的文件进行命名

在这里插入图片描述
还需要使用注释配置webpackChunkName

btn1.addEventListener("click", () => {
  import(/* webpackChunkName: "content1" */ "./content1.js");
});
btn2.addEventListener("click", () => {
  import(/* webpackChunkName: "content2" */ "./content2.js").then((res) => {
    // 动态导入的实际上是一个对象。导出的内容在default属性上
    console.log(res);
    
  });
});

打包后的目录:
在这里插入图片描述

Splitchunks

Splitchunks 是使用SplitChunksPlugin来实现分包的,webpack已经默认安装了,不需要再安装。
webpack的SplitChunksPlugin提供了默认的配置,默认情况下它只会影响到按需加载的 chunks。
默认的配置:
在这里插入图片描述

Splitchunks 的配置

chunks: 默认值是async,all标识对同步和异步的代码都进行处理。
minSize:拆分包的大小,至少为minSize,小于minSize的包不会拆分。
maxSize:拆分包的大小,将大于maxSize的包拆分为不小于minSize的包。
cacheGroups: 对拆分的包进行分组。
test: 匹配符合规则的包
name:拆分包的name属性
filename:拆分包的名称,可以使用自己的placeholder属性



const path = require("path");
const HtmlWebpackPlugin = require("html-webpack-plugin");

module.exports = {
  mode: "development",
  devtool: "source-map",
  entry: {},
  output: {},
  resolve: {},
  module: {},
  plugins: [ ],
  devServer: {},
  optimization: {
    splitChunks: {
      chunks: "all",
      //
      maxSize: 20000,
      //将包拆成不小于minSize的包,如果打不到minSize,那么这个包就不会拆分(会被合并到其他包中)
      minSize: 10000,
      cacheGroups: {
        venders: {
         //匹配/node_modules/下的包   [\\/]  /node_modules和\node_modules 为了处理不同系统的问题
          // \\  第一个\是为了转意,有些字符有特殊含义
          test: /[\\/]node_modules[\\/]/,
          filename: "[id]_[hash:6]_vender.js",
        },
        foo: {
          test: /utils/,
          filename: "[id]_[hahs:6]_utils.js",
        },
      },
    },
  },
};

打包后的文件:
在这里插入图片描述

chunkIds webpack模块中的采用什么算法生成

常见的值:
在这里插入图片描述
开发过程中推荐使用natural,打包过程中推荐使用deterministic。

...
 module: []
 plugins:[],
 devServer:{},
 optimization: {
    splitChunks: {},
    chunkIds: "deterministic",
  },

在这里插入图片描述

Prefetch和Preload 预获取和预加载

在使用import() 导入时可以使用:
Prefetch:将来某些导航下要获取的资源
Preload:当前导航下可能要获取的资源

使用Preload的chunk会在父chunk加载时,以并行的方式开始加载,而Prefetch的会在父chunk加载完后再加载。
Preload的chunk优先级高一点,会立即下载,Prefetch的会在浏览器闲暇时刻下载

Preload的chunk会在父chunk中立即请求,在当下使用Prefetch在未来使用

使用
在这里插入图片描述

在这里插入图片描述

  • 15
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Webpack是一个用于打包前端应用程序的工具,可以将多个模块打包成一个或多个文件,同时还支持代码分离、模块化、压缩等功能。下面是Webpack的基本配置和优化代码的说明: 1. 基本配置 (1)entry:入口文件,Webpack会从该文件开始递归解析依赖,生成打包后的文件。 (2)output:输出文件配置,指定打包后生成的文件路径和名称。 (3)module:模块加载器配置,用于加载各种类型的文件,如js、css、图片等。 (4)plugins:插件配置,用于扩展Webpack功能,如压缩代码、提取公共模块、生成HTML模板等。 (5)devServer:开发服务器配置,可以自动编译代码并提供热更新等功能。 (6)resolve:模块解析配置,用于配置模块的搜索路径、别名等。 2. 优化代码 (1)使用Tree Shaking:Tree Shaking是Webpack 2引入的功能,用于去除无用的代码。只有被使用的代码才会被打包进最终的文件。 (2)使用Code Splitting:将代码拆分成多个块,按需加载,可以提高页面加载速度。 (3)使用动态导入:使用import()函数动态加载代码,可以根据需要加载不同的模块,提高性能。 (4)使用缓存:使用缓存可以避免重复打包已经打包过的代码,提高打包速度。 (5)使用异步加载:异步加载可以提高页面加载速度,特别是在处理大型应用程序时更为重要。 (6)使用压缩插件:压缩代码可以减小文件大小,提高加载速度。 (7)使用静态资源CDN:使用CDN可以将静态资源分布到多个服务器上,提高访问速度,减少服务器负载。 总之,通过合理的配置和优化,可以大大提高Webpack的性能和效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值