Vue项目性能优化

117 阅读3分钟

for 循环设置 key 值

在用 v-for 进行数据遍历渲染的时候,为每一项都设置唯一的 key 值,为了让 Vue 内部核心代码能更快地找到该条数据,当旧值和新值去对比的时候,可以更快的定位到 diff。

keep-alive

keep-alive 是 Vue 提供的一个比较抽象的组件,用来对组件进行缓存,从而节省性能。

按需引入

使用的一些第三方库可以通过按需引入的方式加载。避免引入不需要使用的部分,无端增加项目体积。比如在使用 element-ui 库的时候,可以只引入需要用到的组件。

代码优化

  1. 功能重复组件和函数封装,提高代码复用率
    组件封装这点非常重要,之所以这么说是因为组件封装不仅能提高开发效率,还能减少以后维护成本。
  2. 尽量减少本地存储的使用
    尽量减少本地存储(localStorage、sessionStorage、cookie)的使用也是提高性能的方式之一,有些喜欢用本地存储传参,传参的方式有很多种,比如:路由传参或者 vuex 等
  3. 减少 watch 使用 v-if 和v-show 使用要有原则 watch监听大量状态时会让浏览器出现卡顿现象,所以尽量减少使用。 v-if 和 v-show 的区别是; v-if 是不渲染,而 v-show 是渲染不显示,至于如何使用视情况而定。

懒加载

Vue 项目懒加载分为图片和路由懒加载,具体写法如下:

路由懒加载
{
  path: '/home',
  name: 'home',
  component: resolve => require(['@/components/home'],resolve)
},{
  path: '/index',
  name: 'Index',
  component: resolve => require(['@/components/index'],resolve)
},{
  path: '/about',
  name: 'about',
  component: resolve => require(['@/components/about'],resolve)
} 
图片懒加载
<!--使用前需先安装配置vue-lazyload-->
<a href="javascript:;"><img v-lazy="'/static/img/abc.jpg'"></a>

用户体验优化

  1. 添加 Loading
    用户需要等待时间较长时,必须添加等待 loading ,优化用户体验。

  2. 路由逻辑
    路由逻辑是一个项目的核心,如果路由逻辑不通的话,用户很有可能点返回按钮的时候一直在两个页面之间跳转,进入死循环。其次,路由逻辑和用户体验息息相关,比如用户下完单应该跳转到订单详情页,而不是首页等等

  3. 样式统一
    两个页面的相同功能按钮,它的大小颜色如果不用的话就会让人感觉你的 App 不够专业

  4. 滚动组件的使用
    网页的原声滚动用户体验不好,我们需要使用一些滚动组件,比如:better-scroll、iscroller、scroller等,滚动组件的使用能让页面滚动更自然。

webpack打包优化

  • 减去控制台打印和备注
npm install uglifyjs-webpack-plugin -D
 
const UglifyJsPlugin = require('uglifyjs-webpack-plugin')
const isProduction = process.env.NODE_ENV === 'production';
 
  configureWebpack: config => {
    const plugins = [];
    if (isProduction) {
      plugins.push(
        new UglifyJsPlugin({
          uglifyOptions: {
            output: {
              comments: false,
            },
            warnings: false,
            compress: {
              drop_console: true,
              drop_debugger: false,
              pure_funcs: ['console.log']
            }
          }
        })
      )
    }
  • 图片压缩
npm install image-webpack-loader -D
//vue.config.js
 
module.exports = {
  // 根据你的实际情况更改这里
  publicPath,
  assetsDir: 'assets',
  lintOnSave: true,
  // image 压缩 定义在chainWebpack中
 chainWebpack: config => {
   config.module
      .rule('images')
      .use('image-webpack-loader')
      .loader('image-webpack-loader')
      .options({
        bypassOnDebug: true
      })
      .end()}

CDN加速

1.减少包体积

2.能让静态资源加载更快

3.较少首屏渲染时间

4.总结:CDN 能让你的项目变快,配合 GZIP 使用效果更佳