加速vue组件渲染之性能优化


Posted in Javascript onApril 09, 2020

背景

平时在用vue开发后台管理系统的时候,应该会用到大量的table这种组件,正常这种组件我们会在项目里做二次封装,然后针对表头title做参数化配置,如下:

export default {
  data(){
    return {
      tableTitle:[
        {
          label:'省份',
          prop:'prop'
        },
        {
          label:'城市',
          prop:'prop'
        },
        {
          label:'汇总',
          prop:'prop',
          colconfig:[
            {
              label:'下级',
              prop:'prop'
            }
          ]
        }
        ...
      ]
    }
  }
}

此时如果table字段比较多而且是多表头这种的话,数据结构就比较复杂,如果直接写在data里面的话,会在组件初始化时候,对此对象进行递归重写get set属性,源码如下:

function defineReactive(obj,key,val) {
 var dep = new Dep();
 var property = Object.getOwnPropertyDescriptor(obj, key);
 //如果对象被冻结,则直接跳出,不重写 get set方法
 if (property && property.configurable === false) {
  return
 }
 //observe会递归调用defineReactive,去重写对象内层的get set属性
 var childOb = !shallow && observe(val);
 Object.defineProperty(obj, key, {
  enumerable: true,
  configurable: true,
  get: function reactiveGetter () {
  },
  set: function reactiveSetter (newVal) {
  }
 });
}

然而这种静态数据是不需要动态响应的,这样势必会造浪性能浪费,于是我们想办法避免这种不必要的性能浪费。

方案1

此时我们可以用Object.freeze()这个方法对此数据进行冻结,vue组件在对data里的属性拦截时,会判断出被冻结的对象是不可被修改的【如上代码注释】,会直接跳过 get set的操作,这样便可以降低vue组件的render时间,提升页面性能

export default {

data(){
  return {
    tableTitle:Object.freeze(objConfig)
  }
}
}

方案2

把我们不需要动态响应的数据,在created的生命周期里面去定义,这样vue底层就不会拦截到这个属性了

export default {
  created(){
    this.tableTitle = [xxxxx]
  }
}

总结

其实这种场景在开发中经常遇到,比如查询条件有很多selectlist字段,我们也可以把它封装到一个大json里面,然后对其进行避免重写属性,可以降低不少性能开销

到此这篇关于加速vue组件渲染之性能优化的文章就介绍到这了,更多相关vue组件渲染性能优化内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
中文路径导致unitpngfix.js不正常的解决方法
Jun 26 Javascript
Kindeditor在线文本编辑器如何过滤HTML
Apr 14 Javascript
jquery获取下拉框中的循环值
Feb 08 Javascript
vue省市区三联动下拉选择组件的实现
Apr 28 Javascript
使用JS中的Replace()方法遇到的问题小结
Oct 20 Javascript
webpack搭建vue 项目的步骤
Dec 27 Javascript
web前端vue filter 过滤器
Jan 12 Javascript
理解 JavaScript EventEmitter
Mar 29 Javascript
layui中table表头样式修改方法
Aug 15 Javascript
js实现搜索栏效果
Nov 16 Javascript
十分钟教你上手ES2020新特性
Feb 12 Javascript
JavaScript实现贪吃蛇游戏
Jun 16 Javascript
javascript设计模式 ? 抽象工厂模式原理与应用实例分析
Apr 09 #Javascript
javascript设计模式 ? 工厂模式原理与应用实例分析
Apr 09 #Javascript
javascript设计模式 ? 简单工厂模式原理与应用实例分析
Apr 09 #Javascript
javascript设计模式 ? 单例模式原理与应用实例分析
Apr 09 #Javascript
微信小程序纯文本实现@功能
Apr 08 #Javascript
JavaScript 俄罗斯方块游戏实现方法与代码解释
Apr 08 #Javascript
vue与iframe之间的信息交互的实现
Apr 08 #Javascript
You might like
JavaScript中的Document文档对象
2008/01/16 Javascript
一个js封装的不错的选项卡效果代码
2008/02/15 Javascript
jQuery(1.3.2) 7行代码搞定跟随屏幕滚动的层
2009/05/21 Javascript
jQuery学习笔记之jQuery动画效果
2013/09/09 Javascript
javascript实现的弹出层背景置灰-模拟(easyui dialog)
2013/12/27 Javascript
js实现按钮颜色渐变动画效果
2015/08/20 Javascript
详解JavaScript中双等号引起的隐性类型转换
2016/05/30 Javascript
Bootstrap中的Dropdown下拉菜单更改为悬停(hover)触发
2016/08/31 Javascript
Vue2.0 UI框架ElementUI使用方法详解
2017/04/14 Javascript
node.js如何操作MySQL数据库
2020/10/29 Javascript
Python统计列表中的重复项出现的次数的方法
2014/08/18 Python
Python中的迭代器漫谈
2015/02/03 Python
Windows下安装python2.7及科学计算套装
2015/03/05 Python
python中正则表达式的使用方法
2018/02/25 Python
python入门前的第一课 python怎样入门
2018/03/06 Python
Python嵌套列表转一维的方法(压平嵌套列表)
2018/07/03 Python
Python使用pickle模块报错EOFError Ran out of input的解决方法
2018/08/16 Python
运行tensorflow python程序,限制对GPU和CPU的占用操作
2020/02/06 Python
python3注册全局热键的实现
2020/03/22 Python
分享一个H5原生form表单的checkbox特效代码
2018/02/26 HTML / CSS
纯html5+css3下拉导航菜单实现代码
2013/03/18 HTML / CSS
HTML5新增的Css选择器、伪类介绍
2013/08/07 HTML / CSS
de Bijenkorf比利时官网:荷兰最知名的百货商店
2017/06/29 全球购物
预订旅游活动、景点和旅游:GetYourGuide
2019/09/29 全球购物
波兰在线杂货店:Polski Koszyk
2019/11/02 全球购物
华硕新加坡官方网上商店:ASUS Singapore
2020/07/09 全球购物
英文自荐信
2013/12/15 职场文书
获奖的大学生创业计划书
2014/01/05 职场文书
学生会竞聘书范文
2014/03/31 职场文书
高中校园广播稿3篇
2014/09/29 职场文书
预备党员转正材料
2014/12/19 职场文书
超市员工辞职信范文
2015/05/12 职场文书
2015年大学迎新晚会总结
2015/07/16 职场文书
《岳阳楼记》原文、译文赏析
2019/09/10 职场文书
基于Nginx实现限制某IP短时间访问次数
2021/03/31 Servers
台式电脑蓝牙适配器怎么安装?台式电脑蓝牙适配器安装教程
2022/04/08 数码科技