加速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 相关文章推荐
jquery 插件 任意位置浮动固定层
Dec 25 Javascript
jcarousellite.js 基于Jquery的图片无缝滚动插件
Dec 30 Javascript
Js 时间函数getYear()的使用问题探讨
Apr 01 Javascript
完美兼容多浏览器的js判断图片路径代码汇总
Apr 17 Javascript
使用coffeescript编写node.js项目的方法汇总
Aug 05 Javascript
js老生常谈之this,constructor ,prototype全面解析
Apr 05 Javascript
JavaScript DOM 对象深入了解
Jul 20 Javascript
微信小程序 闭包写法详细介绍
Dec 14 Javascript
BootStrap 弹出层代码
Feb 09 Javascript
JavaScript取得gridview中获取checkbox选中的值
Jul 24 Javascript
Vue中正确使用jQuery的方法
Oct 30 jQuery
Vue父子之间值传递的实例教程
Jul 02 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
dedecms系统的广告设置代码 基础版本
2010/04/09 PHP
php 获取select下拉列表框的值
2010/05/08 PHP
phpQuery占用内存过多的处理方法
2013/11/13 PHP
PHP设计模式之适配器模式定义与用法详解
2018/04/03 PHP
js获取当前select 元素值的代码
2010/04/19 Javascript
理解JAVASCRIPT中hasOwnProperty()的作用
2013/06/05 Javascript
跟我学Nodejs(三)--- Node.js模块
2014/05/25 NodeJs
开启Javascript中apply、call、bind的用法之旅模式
2015/10/28 Javascript
JavaScript中判断数据类型的方法总结
2016/05/24 Javascript
js登录滑动验证的实现(不滑动无法登陆)
2018/01/03 Javascript
Vue 创建组件的两种方法小结(必看)
2018/02/23 Javascript
使用javascript做在线算法编程
2018/05/25 Javascript
JavaScript引用类型RegExp基本用法详解
2018/08/09 Javascript
vue + element-ui的分页问题实现
2018/12/17 Javascript
layui实现数据表格点击搜索功能
2020/03/26 Javascript
layer弹出框确定前验证:弹出消息框的方法(弹出两个layer)
2019/09/21 Javascript
electron踩坑之dialog中的callback解决
2020/10/06 Javascript
小程序实现上下切换位置
2020/11/16 Javascript
python操作ie登陆土豆网的方法
2015/05/09 Python
Python 'takes exactly 1 argument (2 given)' Python error
2016/12/13 Python
Python制作简易注册登录系统
2016/12/15 Python
python实现单线程多任务非阻塞TCP服务端
2017/06/13 Python
1 行 Python 代码快速实现 FTP 服务器
2018/01/25 Python
Python递归实现汉诺塔算法示例
2018/03/19 Python
基于随机梯度下降的矩阵分解推荐算法(python)
2018/08/31 Python
DES加密解密算法之python实现版(图文并茂)
2018/12/06 Python
Python面向对象程序设计构造函数和析构函数用法分析
2019/04/12 Python
Python使用pyserial进行串口通信的实例
2019/07/02 Python
Python 类方法和实例方法(@classmethod),静态方法(@staticmethod)原理与用法分析
2019/09/20 Python
python实现的批量分析xml标签中各个类别个数功能示例
2019/12/30 Python
Python模块的定义,模块的导入,__name__用法实例分析
2020/01/07 Python
HTML5页面音视频在微信和app下自动播放的实现方法
2016/10/20 HTML / CSS
十佳大学生村官事迹
2014/01/09 职场文书
禁毒宣传工作方案
2014/05/23 职场文书
庆元旦演讲稿
2014/09/15 职场文书
2014年售票员工作总结
2014/11/19 职场文书