我的编程空间,编程开发者的网络收藏夹
学习永远不晚

怎么用vue中的Object.freeze()优化数据

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

怎么用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()冻结的是值,你仍然可以将变量的引用替换掉。

举个例子

<p v-for="item in list">{{ item.value }}</p>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()优化数据这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

怎么用vue中的Object.freeze()优化数据

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

怎么用vue中的Object.freeze()优化数据

这篇文章主要讲解了“怎么用vue中的Object.freeze()优化数据”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么用vue中的Object.freeze()优化数据”吧!freez
2023-06-30

mysql数据库优化怎么用

mysql 数据库优化可提升性能、效率和可靠性。优化方法有:索引优化:创建索引加快数据检索;优化索引减少冗余,提升查询效率;复合索引提升复合查询性能。查询优化:分析慢查询日志优化低效查询;重写复杂查询提升效率;查询缓存避免重复执行。数据建模
mysql数据库优化怎么用
2024-05-30

怎么优化oracle数据库

优化Oracle数据库可以通过以下方式进行:数据库设计优化:确保数据库表结构合理,避免重复数据和冗余字段,使用适当的数据类型和索引等。查询优化:编写高效的SQL查询语句,避免使用通配符查询和不必要的连接查询,尽量避免全表扫描。索引优化:
怎么优化oracle数据库
2024-04-22

MySQL中怎么优化千万级数据表

MySQL中怎么优化千万级数据表,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。我这里有张表,数据有1000w,目前只有一个主键索引CREATE TABLE `u
2023-06-20

Oracle中怎么优化大量数据插入的性能

在Oracle中优化大量数据插入的性能,可以采取以下几种方法:使用批量插入:使用INSERT INTO … SELECT语句将数据一次性插入到目标表中,而不是逐条插入。这样可以减少插入操作的次数,提高插入性能。禁用或延迟索引:在插入大量数据
Oracle中怎么优化大量数据插入的性能
2024-04-19

MySQL数据优化中的多层索引是怎么样的

这期内容当中小编将会给大家带来有关MySQL数据优化中的多层索引是怎么样的,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。一、多层索引1.创建环境:Jupyterimport numpy as npimpo
2023-06-22

MongoDB中怎么优化大规模数据迁移

在MongoDB中优化大规模数据迁移的过程,可以通过以下几种方式来实现:使用批量操作:在进行数据迁移时,可以使用MongoDB的批量操作功能,通过一次性操作多条数据来提高迁移效率。这样可以减少与数据库的交互次数,提高迁移速度。使用索引:在进
MongoDB中怎么优化大规模数据迁移
2024-04-19

sqlserver数据库卡慢怎么优化

SQL Server数据库卡慢的原因可能有很多,可能是由于查询语句不优化、索引不合理、硬件配置不足等问题所导致的。下面是一些优化方法:优化查询语句:尽量避免使用全表扫描和大量的连接查询,尽量使用索引来加快查询速度。创建合适的索引:通过为频繁
sqlserver数据库卡慢怎么优化
2024-04-09

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录