前言

现在已经是vue-cli3.x    webpack4.x 的时代了,但是网上很多拆包配置还是一些比较低版本的。

本文主要是分享自己的拆包踩坑经验。

主要是用了webpack4 的 splitChunks 来进行拆包的配置以及在配置中的一些踩坑。

首屏加载的优化主要在于两个方面,一个是减小包的总体积,二是由于把依赖打包进去太大而要进行拆包处理,提高首屏的加载速度。

一、减小包体积

主要在于压缩和去掉无用的代码

压缩可以用webpack的一些插件,服务端gzip压缩

去掉无用代码有 生产环境去掉 console,去掉 .map 文件

适用插件:UglifyJsPlugin、TerserPlugin等

二、拆包

1、分离第三方依赖包

(1)有利用 cdn 引入的,这样一来一些大一点的第三方依赖包就不打包进去。但考虑到cdn并不一定很稳定,如果是公司自己的cdn或者付费cdn可能用起来会比较放心点。
(2)利用 vue-router 的路由懒加载
const Home= resolve =>{require(['./components/home/index.vue'],resolve)}

如果路由很多,都用这个的话,打包出来会有很多文件。

这时候,如果后端项目模板文件是写死引入的js和css的话就不太好办了,当然如果是前后端完全分离部署的环境或者是后端每次修改模板文件or动态引入所有js和css的话,是没什么问题的。

然而,我本次遇到的是前者,所以是希望基本上打包出来的文件名很少有变化才好。

(3)所以本次用的是webpack4 的 splitChunks , 注意 webpack 4 把 CommonsChunk 废弃,用splitChunks来取代。

    默认配置: https://webpack.docschina.org/plugins/split-chunks-plugin/

  • chunks: 表示哪些代码需要优化,有三个可选值:initial(初始块)、async(按需加载块)、all(全部块),默认为async
  • minSize: 表示在压缩前的最小模块大小,默认为30000
  • minChunks: 表示被引用次数,默认为1
  • maxAsyncRequests: 按需加载时候最大的并行请求数,默认为5
  • maxInitialRequests: 一个入口最大的并行请求数,默认为3
  • automaticNameDelimiter: 命名连接符
  • name: 拆分出来块的名字,默认由块名和hash值自动生成
  • cacheGroups: 缓存组。缓存组的属性除上面所有属性外,还有test, priority, reuseExistingChunk
    • test: 用于控制哪些模块被这个缓存组匹配到
    • priority: 缓存组打包的先后优先级
    • reuseExistingChunk: 如果当前代码块包含的模块已经有了,就不在产生一个新的代码块

在用它的时候,也遇到了一些配置问题,没有配置之前app.js 达2.3MB 之大,想要达到的效果是js拆成 4-5 个包,最好不要有超过1MB的包。

首先准备是把element-ui这个包拆出来,效果是拆出来了,但app.js还是有2MB,然后把echarts也拆出来之后,app.js还是有1.8MB,再增加配置,一直没有成功,只拆出来两个包。

最终的拆包配置,vue.config.js 中在 chainWebpack添加配置

 // 拆包
config.optimization.splitChunks({
chunks: 'all',
maxInitialRequests: Infinity,
minSize: 300000, // 依赖包超过300000bit将被单独打包
automaticNameDelimiter:'-',
cacheGroups: {
vendor: {
test: /[\\/]node_modules[\\/]/,
name(module) {
const packageName = module.context.match(/[\\/]node_modules[\\/](.*?)([\\/]|$)/)[1];
return `chunk.${packageName.replace('@', '')}`;
},
priority:10
}
}
})

用这种就可以,设置minSize, 根据项目情况来,最终是大于它的依赖包就会被拆出来,这种的好处就在于,如果要自己去判断拆那个出来,有可能并不是很清楚哪些包比较大,哪些比较小,这种就会帮你判断,而且如果不是引入一些新的比较大的包,服务端的模板配置基本可以不怎么变。

参考:

https://juejin.im/post/5b99b9cd6fb9a05cff32007a

https://blog.csdn.net/weixin_34160277/article/details/86720033

SPA 首屏加载性能优化之 vue-cli3 拆包配置的更多相关文章

  1. Vue SPA 首屏加载优化实践

    写在前面 本文记录笔者在Vue SPA项目首屏加载优化过程中遇到的一些坑及优化方案! 我们以 vue-cli 工具为例,使用 vue-router 搭建SPA应用,UI框架选用 element-ui ...

  2. Vue优化首屏加载

    背景: 使用vue + iview搭建的一个后台管理系统,路由已经用了懒加载,加载登陆页面,居然还是需要18S左右,刚到一个新公司,项目经理很委婉的说,看看能不能优化了一下.然后就开始了网上一大堆'v ...

  3. vue项目首屏加载优化实战

    问题 单页面应用的一个问题就是首页加载东西过多,加载时间过长.特别在移动端,单页面应用的首屏加载优化更是绕不开的话题.下面我会写出我在项目中做的一些优化,希望大家能够相互讨论,共同进步. 我的项目vu ...

  4. react 首屏加载优化

    react 首屏加载优化,原本是在入口HTML文件中加载loading动画,但是部署在测试环境上的时候一直无法显示loading的部分,也是奇怪了,我们测试环境的部署一直跟本地的都不太一样,内外网的转 ...

  5. vuejs学习之 项目打包之后的首屏加载优化

    vuejs学习之 项目打包之后的首屏加载优化 一:使用CDN资源 我们在打包时,会将package.json里,dependencies对象里插件打包起来,我们可以将其中的一些使用cdn的方式加载,例 ...

  6. Vue项目优化首屏加载速度

    Vue项目部署上线后经常会发现首屏加载的速度特别慢:那么有那写能做的简单优化呢 一.路由的懒加载 路由懒加载也就是 把不同路由对应的组件分割成不同的代码块,然后当路由被访问的时候才加载对应组件. 结合 ...

  7. CSS加载性能优化

    将首屏页面要用到的CSS文件,放在页面头部加载,其他模块的CSS可以使用异步加载:loadCSS 和 Preload. 关于preload,推进2篇文章给大家看下: 1.通过rel="pre ...

  8. React 16 加载性能优化指南

    关于 React 应用加载的优化,其实网上类似的文章已经有太多太多了,随便一搜就是一堆,已经成为了一个老生常谈的问题. 但随着 React 16 和 Webpack 4.0 的发布,很多过去的优化手段 ...

  9. H5 缓存机制浅析 移动端 Web 加载性能优化

    腾讯Bugly特约作者:贺辉超 1 H5 缓存机制介绍 H5,即 HTML5,是新一代的 HTML 标准,加入很多新的特性.离线存储(也可称为缓存机制)是其中一个非常重要的特性.H5 引入的离线存储, ...

随机推荐

  1. Spark之RDD依赖关系及DAG逻辑视图

    RDD依赖关系为成两种:窄依赖(Narrow Dependency).宽依赖(Shuffle Dependency).窄依赖表示每个父RDD中的Partition最多被子RDD的一个Partition ...

  2. kie-api介绍和使用

    参考:KIE kie在drools jbpm uberfire里广泛被使用,下面对kie-api中的几个重要组件做下简单介绍 maven依赖 <dependency> <groupI ...

  3. JAVA简易数据连接池Condition

    用Condition和synchronized: import java.sql.Connection; import java.sql.DriverManager; import java.sql. ...

  4. server.port 在单元测试中,调用的类或者方法这个地方获取到的端口号就会变成-1

    @Value("${server.port}") 本文链接:https://blog.csdn.net/weixin_38342534/article/details/886985 ...

  5. 运行一个docker镜像并开机启动

    记录,我用的liunx机是centos7.x 安装 安装Docker包$ sudo yum install docker-engine 启动Docker守护进程$ sudo service docke ...

  6. C#泛型集合之——哈希集合

    1.特点:HashSet 中元素不重复,容量为元素个数,自动增大.是一组值,是高性能的数学集合. 2.创建: (1)HashSet<类型> 集合名 = new HashSet<类型& ...

  7. KindEditor 简单使用笔记

    1.在官网下载最新版本  http://kindeditor.net/demo.php 2.在页面中加上如下代码 <textarea id="editor_id" name= ...

  8. selenium浏览器自动化测试框架文档(修正版)

    写在最前面:目前自动化测试并不属于新鲜的事物,或者说自动化测试的各种方法论已经层出不穷,但是,能够在项目中持之以恒的实践自动化测试的团队,却依旧不是非常多.有的团队知道怎么做,做的还不够好:有的团队还 ...

  9. springCloud学习5(Spring-Cloud-Stream事件驱动)

    springcloud 总集:https://www.tapme.top/blog/detail/2019-02-28-11-33 代码见文章结尾   想想平常生活中做饭的场景,在用电饭锅做饭的同时, ...

  10. Nginx配置SSL实现HTTPS访问

    nginx配置文件如下: server { listen 443 ssl; server_name www.domain.com; root /www/web; index index.html in ...