vue项目优化总结

258 阅读3分钟

VUE项目优化总结

查看打包文件结构 和 各种文件的比例

使用插件:webpack-bundle-analyzer

下载安装:npm install --save-dev webpack-bundle-analyzer

然后运行 npm run build --report 命令会自动打包,并弹出网页(包含打包文件图),vue-cli(2.0)已经帮你配置好了,传入一个report参数 就可以启动了。

1.路由懒加载

原因:

当打包构建应用时,Javascript 包会变得非常大,影响页面加载。

好处:

把不同路由对应的组件分割成不同的代码块,然后当路由被访问的时候才加载对应组件,javascript包拆分开来,页面加载速度快、更高效。

代码片段:

原写法:
import Home from '@/pages/home/home'
routes: [
    {
      path: '/',
      name: 'Home',
      component: Home,
      children: []
    }
] 
懒加载写法:

router/index.js文件

routes: [
    {
      path: '/',
      name: 'Home',
      component: () => import('@/pages/home/home'),
      children: []
    }
] 

2.图片处理

原因:

原图是5040像素, 大小1.1MB,初次加载时间要44.94s,影响首页加载速度。

好处:

加快首页加载,在不影响视觉的情况下减小资源大小。

方法:

1.在线压缩处理网站 2.ps 把图片宽度缩小到一半(PC最大一般1920px,我们当前2050px)

3.禁用webpack的devtools

原因:

webpack里面启用了sourceMap,默认会生成map文件,map文件是用来调试代码的。但是这在发布以后就完全没有用了。这里还要注意sourcemap的配置分 开发(dev)和线上(build)两个地方配置,开发我们就不管了,就用默认的,线上我们是不需要这个代码的。

好处:

不生成.map文件,减小js文件大小。

方法:

修改config/index.js文件

build:{productionSourceMap: false} 

4.cdn加速 [尽量选用国内源的cdn,国外的有的很慢]

原因:

当所有资源都从自己的服务器走会产生很多流量,请求量大可能会造成阻塞。

好处:

资源从免费cdn上走减少自己服务器的流量消耗,服务器压力小,用户体验提升。

原写法:

<script type="text/javascript" src="./static/lib/plupload-2.1.2/js/plupload.full.min.js"></script>

cdn写法:

index.html文件

<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width,initial-scale=1.0">
  <title>文泉资源</title>
  <link href="https://unpkg.com/ant-design-vue@1.3.16/dist/antd.min.css" rel="stylesheet">
  <link href="https://cdn.bootcss.com/element-ui/2.12.0/theme-chalk/index.css" rel="stylesheet">
  <link rel="stylesheet" href="//g.alicdn.com/de/prismplayer/2.5.0/skins/default/aliplayer-min.css" />
</head>
<body>
  <script src="https://cdn.polyfill.io/v2/polyfill.min.js"></script>
  <script src="https://cdn.bootcss.com/vue/2.5.2/vue.min.js"></script>
  <script src="https://cdn.bootcss.com/vue-router/3.0.1/vue-router.min.js"></script>
  <script src="https://cdn.bootcss.com/axios/0.19.0/axios.min.js"></script>
  <script src="https://cdn.bootcss.com/moment.js/2.21.0/moment.min.js"></script>
  <script src="https://unpkg.com/ant-design-vue@1.3.16/dist/antd.min.js"></script>
  <script src="https://cdn.bootcss.com/element-ui/2.12.0/index.js"></script>
  <script src="https://cdn.bootcss.com/jquery/2.1.4/jquery.js"></script>
  <script src="https://cdn.bootcss.com/plupload/2.1.2/plupload.full.min.js"></script>
  <script src="//g.alicdn.com/de/prismplayer/2.5.0/aliplayer-min.js"></script>
  <script src='https://cdn.bootcss.com/mathjax/2.7.0/MathJax.js?config=TeX-AMS_HTML'></script>
  <div id="app"></div>
</body>

然后在 webpack.base.conf.js 里面的 webpackConfig里面下面代码(避免webpack打包vue相关) cdn 后引入还是正常的 import引入

  externals:{
    'vue': 'Vue',
    'vue-router': 'VueRouter',
    'axios': 'axios',
    'ant-design-vue': 'antd',
    'element-ui': 'ELEMENT',
    'moment': 'moment',   
  },
externals作用是:映入了CDN就不要再打包这个模块了,所以通过 externals 来排除这个模块,减小打包后的体积。

5.css文件分开打包

原因:

默认css会打包到一个css 里面,一个就太大了

方法:

更改webpack.prod.conf.js 文件

allChunks: false,

6.后端协助

1)资源传输用Gzip方式 content-Encoding:Gzip

2) 启用浏览器缓存 cache-content:XXXXX

项目版本情况如下:

vue: 2.5.2
vue-router: 2.8.0
webpack: 3.6.0

遇到的问题:

1.vue-rouer报错

解决办法:原来安装的是3.0+的版本 将低版本。

2.externals写法报错 写的不对会返回 xx is not defined

externals:{
    'vue': 'Vue',
    'vue-router': 'VueRouter',
    'axios': 'axios',
    'ant-design-vue': 'antd',
    'element-ui': 'ELEMENT',
    'moment': 'moment',   
},

3. cannot read property 'default' of undefined等一起出现的问题

原因:试了下externals加入'antd' 解决办法: moment放在antd前面引入。

  <script src="https://cdn.bootcss.com/vue/2.5.2/vue.min.js"></script>
  <script src="https://cdn.bootcss.com/moment.js/2.21.0/moment.min.js"></script>
  <script src="https://unpkg.com/ant-design-vue@1.3.16/dist/antd.min.js"></script>

参考链接

vue+webpack打包优化1 vue+webpack打包优化2 vue+webpack打包优化3 vue+webpack打包优化4

前后对比图

优化前

首页加载 打包大小展示

优化后

首页加载 打包大小展示