记录一次webapp优化过程(Vue)

序言

目前公司正在做的东西,还处于堆砌功能的阶段,对于优化几乎没时间、没有安排去做,导致线上的测试服务器开启缓慢,虽然是一个重量级app,但是app.js竟然能达到20mb等级。生产版本的vendors也巨大无比,打开页面需要半分钟,这是不能忍受的。

目前效果

记录一次webapp优化过程(Vue)
优化前
记录一次webapp优化过程(Vue)
优化后

在时间紧急,不改动很多代码的情况下,我们能做的事情其实有限,但是只要做了这些,效果还是相当好的,就这个app而言,首次加载节约6倍流量,速度提高3.5倍。

步骤

1. 开启懒加载

我们不需要在一开始就把整个app的所有内容都加载完,用户也不可能每一次都把所有功能都用遍,所以只加载会用到的东西是很有必要的。

做法:

可以很简单的直接改动routers.js即可。

/*一般的写法*/
component: () => import('@/view/.../***.vue')
/*改为*/
component: resolve => require(['@/view/.../***.vue'], resolve)

组件也可以这么玩,详情可见

注意,这里有一个坑,在设置懒加载后有时会出现没有效果的情况,第一次还是把所有资源都加载了。这是因为默认prefetch,只需要删除prefetch即可

 chainWebpack: config => {
    config.resolve.alias
      .set('@', resolve('src')) // key,value自行定义,比如.set('@@', resolve('src/components'))
      .set('_c', resolve('src/components'))
    //关闭prefetch
    config.plugins.delete('prefetch')

2. 开启gzip压缩

2.1 在Nginx里开启
修改nginx.conf,添加以下内容

    gzip on;
    gzip_http_version 1.1;
    gzip_comp_level 6;
    gzip_types application/json application/javascript text/css application/css application/xml image/jpeg image/png image/x-icon;

gzip_comp_level 等级从1~9,但不建议选择过高,反而会因为压缩消耗宝贵的时间和资源。

如果图片事先压缩过,那么在gzip_types 可以选择不压缩image/*,节约资源。

2.2 配置webpack
目前这个工程基于vue-cli 3.x,在vue.config.js,module.exports中添加一条configureWebpack

  configureWebpack: config => {
    config.plugins = [...config.plugins,
      new CompressionPlugin({
        test: /\.js$|\.html$|.\css/,
        threshold: 10240, // 对超过10k的数据压缩
        deleteOriginalAssets: true // 删除源文件
      })
    ]
  },

这样可以事先打包成gzip,两种方式都可以,我个人用第一种(纯粹是因为第二种方法有个坑,app.js在某种情况下会被识别成html)。

第一种对我来说更灵活,因为服务器我来管,代码上传到gitlab,ci跑完后,我只需要配置nginx反向代理那个端口再开个新端口就很方便可以看到效果。

记录一次webapp优化过程(Vue)

上一篇:移动端 弹框下边的内容 禁止滑动的解决方案


下一篇:spring的context---ServletContext\ WebApplicationContext---Spring各种上下文的关系详解