怎么用vue中的Object.freeze()优化数据
发表于:2025-01-18 作者:千家信息网编辑
千家信息网最后更新 2025年01月18日,这篇文章主要讲解了"怎么用vue中的Object.freeze()优化数据",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"怎么用vue中的Object.
千家信息网最后更新 2025年01月18日怎么用vue中的Object.freeze()优化数据
这篇文章主要讲解了"怎么用vue中的Object.freeze()优化数据",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"怎么用vue中的Object.freeze()优化数据"吧!
freeze翻译成汉语有冻结的意思使用 ,Object.freeze()是ES5新增的特性,可以冻结一个对象,这会阻止修改现有的属性,也意味着响应系统无法再追踪变化。
来看他的定义
Object.freeze() 方法可以冻结一个对象,冻结指的是不能向这个对象添加新的属性,不能修改其已有属性的值,不能删除已有属性,以及不能修改该对象已有属性的可枚举性、可配置性、可写性。该方法返回被冻结的对象。
vue1.0.18+对其提供了支持,对于data或vuex里使用freeze冻结了的对象,vue不会做getter和setter的转换。
一般我们在需要一个属性,但是一开始它为空或不存在,那么你仅需要设置一些初始值。比如:
data: { newTodoText: '', visitCount: 0, hideCompletedTodos: false, todos: [], error: null}
Object.freeze()存在的意义(应用场景)是什么呢?
如果你有一个巨大的数组或Object,并且确信数据不会修改,使用Object.freeze()可以让性能大幅提升。在我的实际开发中,这种提升大约有5~10倍,倍数随着数据量递增,
对于纯展示的大数据,都可以使用Object.freeze提升性能。
Object.freeze()冻结的是值,你仍然可以将变量的引用替换掉。
举个例子
{{ item.value }}
new Vue({ data: { // vue不会对list里的object做getter、setter绑定 list: Object.freeze([ { value: 1 }, { value: 2 } ]) }, created () { // 界面不会有响应 this.list[0].value = 100; // 下面两种做法,界面都会响应 this.list = [ { value: 100 }, { value: 200 } ]; this.list = Object.freeze([ { value: 100 }, { value: 200 } ]); }})
在看一些他人的例子
冻结对象
var obj = { prop: function() {}, foo: 'bar'};// 新的属性会被添加, 已存在的属性可能// 会被修改或移除obj.foo = 'baz';obj.lumpy = 'woof';delete obj.prop;// 作为参数传递的对象与返回的对象都被冻结// 所以不必保存返回的对象(因为两个对象全等)var o = Object.freeze(obj);o === obj; // trueObject.isFrozen(obj); // === true// 现在任何改变都会失效obj.foo = 'quux'; // 静默地不做任何事// 静默地不添加此属性obj.quaxxor = 'the friendly duck';// 在严格模式,如此行为将抛出 TypeErrorsfunction fail(){ 'use strict'; obj.foo = 'sparky'; // throws a TypeError delete obj.quaxxor; // 返回true,因为quaxxor属性从来未被添加 obj.sparky = 'arf'; // throws a TypeError}fail();// 试图通过 Object.defineProperty 更改属性// 下面两个语句都会抛出 TypeError.Object.defineProperty(obj, 'ohai', { value: 17 });Object.defineProperty(obj, 'foo', { value: 'eit' });// 也不能更改原型// 下面两个语句都会抛出 TypeError.Object.setPrototypeOf(obj, { x: 20 })obj.__proto__ = { x: 20 }//被冻结的对象是不可变的。但也不总是这样。下例展示了冻结对象不是常量对象(浅冻结)。obj1 = { internal: {}};Object.freeze(obj1);obj1.internal.a = 'aValue';obj1.internal.a // 'aValue'//对于一个常量对象,整个引用图(直接和间接引用其他对象)只能引用不可变的冻结对象。冻结的对象被认为是不可变的,因为整个对象中的整个对象状态(对其他对象的值和引用)是固定的。注意,字符串,数字和布尔总是不可变的,而函数和数组是对象。//要使对象不可变,需要递归冻结每个类型为对象的属性(深冻结)。当你知道对象在引用图中不包含任何 环 (循环引用)时,将根据你的设计逐个使用该模式,否则将触发无限循环。对 deepFreeze() 的增强将是具有接收路径(例如Array)参数的内部函数,以便当对象进入不变时,可以递归地调用 deepFreeze() 。你仍然有冻结不应冻结的对象的风险.// 深冻结函数.function deepFreeze(obj) { // 取回定义在obj上的属性名 var propNames = Object.getOwnPropertyNames(obj); // 在冻结自身之前冻结属性 propNames.forEach(function(name) { var prop = obj[name]; // 如果prop是个对象,冻结它 if (typeof prop == 'object' && prop !== null) deepFreeze(prop); }); // 冻结自身(no-op if already frozen) return Object.freeze(obj);}obj2 = { internal: {}};deepFreeze(obj2);obj2.internal.a = 'anotherValue';obj2.internal.a; // undefined持续冻结的小方法var constantize = (obj) => { Object.freeze(obj); Object.keys(obj).forEach( (key, i) => { if(typeof obj[key] === 'object') { contantize(obj[key]); } });};
冻结数组
let a = [0];Object.freeze(a); // 现在数组不能被修改了.a[0]=1; // fails silentlya.push(2); // fails silently// In strict mode such attempts will throw TypeErrorsfunction fail() { "use strict" a[0] = 1; a.push(2);}fail();
感谢各位的阅读,以上就是"怎么用vue中的Object.freeze()优化数据"的内容了,经过本文的学习后,相信大家对怎么用vue中的Object.freeze()优化数据这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!
对象
属性
数据
可变
数组
两个
函数
方法
学习
例子
内容
参数
常量
性能
模式
界面
语句
递归
循环
巨大
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
江苏数据库
单位网络安全加固报告
登录华为帐号显示网络服务器繁忙
网络安全问题探究开题报告
app软件开发小程序的费用
竞技网络技术有限公司成都
主流软件开发程序语言
邹平物流报价软件开发公司
sa是哪里服务器
下面哪一个是专利文摘数据库
商品信息数据库er图
做软件开发只要是做什么
虚拟机可以开多少个服务器
obs服务器断开
软件开发工程师抗疫情
安卓软件开发用的软件
ppt软件开发模型
数据库除法数据溢出
学计算机软件开发那个学校好
网络安全监管重要性
升级服务器一定要钱吗
朱赟软件开发
北京谦乐网络技术有限公司
网络安全教育的学情分析
惠州卫星软件开发费用是多少
中交一航局有软件开发部门吗
服务器配置oss权限
2021年大乐透往期数据库
db2数据库恢复命令
大学生 网络安全