【Vue优化】—— Vue项目上线可以做的一些基本优化

前言:优化方法来自掘金作者wangly19的总结博客


开发过程

1、优先使用v-if

v-if和v-show理论上都是作用于元素的显示隐藏,只是一个是直接对DOM,一个是通过CSS的display来操作的。

在项目中大部分的时候 都直接使用v-if直接代替使用v-Show

只有当DOM频繁进行显示和隐藏的时候,用v-Show。

(这种场景很少见,比如信息同送优先级中使用,项目中一直通过WebSocket推的消息进行消息的场景里,频繁推送不同类型的通知)

2、v-For和v-if不要一起使用

v-For的优先级比v-if高,所以两个指令出现在一个DOM中,那么v-For渲染的当前列表,每一次都需要进行一次v-if的判断。

列表就要重新变化,这看起来就非常不合理。

所以需要进行同步指令的时候,尽量使用计算属性,先将v-if不需要的值先过滤掉。

//计算属性
computed:{
 filterList: function(){
    return this,showData.filter(function(data){
        return data.isShow
    })
}

<ul>
   <li v-for="item in filterList" :key="item.id">
      {{item.name}}
   </li>
</ul>  

3、v-For  key避免使用index作为标识

当index作为标识的时候,插入一条数据的时候,列表中它后面的key都发生了变化,那么当前的v-for都会对key变化的Element重新渲染,

但是其实它们除了插入的Element数据都没有发生变化,这就导致了没有必要的开销。

所以,尽量不用用index作为标识,而去采用数据中的唯一值,如id等字段。

4、释放组件资源

资源:每创建出一个事物都需要消耗资源,资源不是凭空产生的,是分配出来的。

所以,当组件销毁后,尽量把我们开辟出来的资源块给销毁掉,比如setInterva,addEventListner等、

如果不去手动给释放掉,那么它们依旧会占用一部分资源,这就导致了没必要的资源浪费。

//添加的事件
created(){
  addEventListner('click', Function, false)
},

beforeDestroy(){
   removeEventListener('click' Function false)
}


//定时器
created(){
   this.currentInterval = setInterval(code, millisec, lang)
},
beforeDestroy(){
   clearInterval(this.currentInterval)
}

5、长列表

大部分的前端在做这种无限列表的时候,大部分新手前端都是通过一个v-for将数据遍历出来。

想的多一点的就是做一个分页。滚动到底部的时候就继续请求API.

会产生的问题:随着数据的加载,DOM会越来越多,这样就导致了性能开销的问题产生了,当页面上的DOM太多的时候,会给客户端造成一定压力。

所以对长列表渲染的时候,建议将DOM移除掉,类似于图片懒加载的模式。只有出现在视图上的DOM才是重要的DOM.

网上有一些很好的解决方案,如vue-virtrual-scroller库等等。

6、图片合理的优化方式

当页面中DOM中存在大量图片时,会碰到一些加载缓慢的问题,导致图片出现加载失败的问题。

网络上大部分都在使用懒加载的使用方式,只有当存在图片的DOM出现在页面上才会进行图片的加载,无形中起到了分流的作用。

  • 小图标使用SVG或者字体图标
  • 通过base64和webp的方式加载小型图片
  • 能通过cdn加速的大图尽量用cdn
  • 大部分框架都带有懒加载的图片,不要嫌麻烦,多花点时间使用它

7、路由器按需加载

两种:require和import

当路由按需加载后,那么Vue服务在第一次加载时的压力就能够小一些,不会出现超长白屏P0问题。

//require
component: resolve(require(['@/components/HelloWorld'], resolve)]

//import
component:() => import('@/components/HelloWorld')  

8、UI框架使用方式

一个UI框架其实很大,项目中使用会产生多余的开销。但是项目周期开发的时候,不得不用。

建议尽量使用按需加载。合理的对项目进行止损。

如果不在意这一点,非常嫌麻烦,可以全局引入

import {Button} from 'xxx'

9、首屏优化  

如果项目够大,首次加载资源时, 会非常的久。资源没有加载完,界面的DOM也不会渲染,会造成白屏的问题。

用户这时候不知道是加载的问题,所以会带来一个不好的体验,

优化方法:通常会在public下写一个加载动画loading,告诉用户,网页在加载中——这个提示。

当页面加载成功后,页面渲染出来的这一个体验比白屏等开机要好太多了,

项目过程

1、最小化JS文件

可以通过webpack处理打包的javascript文件,让其更加的精简。

config.optimizationi.minize(true);

2、删除沉淀代码

使用Tree-Shaking插件可以将一些无用的沉淀泥沙代码给清理掉。

3、依赖库CDN加速

将Vue、Axios、Echarts等都分离出来,在正式环境下,通过CDN,确实有一些明显的提升。

CDN地址:https://www.bootcdn.cn/

// 在html引入script标签后 在vue的配置中进行声明

configureWebpack: {
 externals: {
     'echart': 'echarts' //配置使用CDN
 }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值