V8引擎如何存储对象(VIP课程)

news2024/11/28 6:53:38
在V8中对象的结构

主要分为三个指针构成的,分别是隐藏类,properties(常规属性),elements(排序属性)

了解 常规属性 和 排序属性

 let xm = {
    100: "test-100",
    3: "test-3",
    C: "test-C",
    1: "test-1",
    B: "test-B",
    A: "test-A",
 };

for (let key in xm) {
 console.log(`key:${key} value:${xm[key]}`)
}

key:1 value:test-1

key:3 value:test-3

key:100 value:test-100

key:C value:test-C

key:B value:test-B

key:A value:test-A

我们发现了一个神奇的现象,数字从小到大排列,字符串还是按原顺序排列 ????

事实上,这是为了满足 ECMA 规范 要求所进行的设计。按照规范中的描述,可索引的属性应该按照索引值大小升序排列,而命名属性根据创建的顺序升序排列。

在这里我们把对象中的数字属性称为排序属性,在 V8 中被称为 elements,字符串属性就
被称为常规属性,在 V8 中被称为 properties。

const foo = function () {
    this[90] = "test-100";
    this[1] = "test-1";
    this["B"] = "bar-B";
    this[5] = "test-5";
    this["A"] = "bar-A";
    this["C"] = "bar-C";
};
var test = new foo()

image.png

我们看到了 elements 但是没有看到 properties

快属性和慢属性

V8 采取了一个权衡的策略以加快查找属性的效率,这个策略是将部分常规

属性直接存储到对象本身,我们把这称为对象内属性 (in-object properties)

快属性如图

image.png

对象内属性就是直接把属性挂到该对象上,查找的只需要一次 foo.A foo.B 因此被称为快属性,但是注意,快属性容量是10个,超出之后就会添加到properties里面,称为慢属性。因此V8 采取了两种存储策略

慢属性如图

image.png

比如执行 Foo.property10这个语句来查找 property10 的属性值, 那么在 V8 会先查找出 properties 属性所指向的对象 properties,然后再在 properties 对象中查找 property10 属性,这种方式在查找过程中增加了一步操作,因此会影响到元素的查找效率,这就是慢属性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1177107.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

01-基于IDEA,Spring官网,阿里云官网,手动四种方式创建SpringBoot工程

快速上手SpringBoot SpringBoot技术由Pivotal团队研发制作,功能的话简单概括就是加速Spring程序初始搭建过程和Spring程序的开发过程的开发 最基本的Spring程序至少有一个配置文件或配置类用来描述Spring的配置信息现在企业级开发使用Spring大部分情况下是做web开…

MySQL数据库的备份和恢复

备份 完全备份和完全备份 完全备份 完全备份:就是将整个数据库完整的进行备份 增量备份 增量备份:就是在完全备份的基础之上,对后续新增的内容进行备份 备份的需求 1、 在生产环境中数据的安全至关重要,任何数据的丢失都可…

APP测试的7大注意点。

1. 运行 1) App安装完成后的试运行,可正常打开软件。 2) App打开测试,是否有加载状态进度提示。 3) App⻚面间的切换是否流畅,逻辑是否正确。 4) 注册 同表单编辑⻚面 用户名密码⻓度 …

windows环境下安装Java过程(免登录Oracle官网下载java)

下载路径 oracle官网: java下载路径 Oracle共享账号可下载JDK: 指路 安装流程 执行下载后的jdk的可执行文件一路next下去, 可以自定义安装路径添加环境变量, 两个地方需要添加 在cmd中输入java -version 进行验证,…

【Web】在前端中CSS的语法

CSS规则是由两个主要的部分构成:选择器、以及一条或多条声明。 选择器通常是需要改变的HTML元素。 每条声明由一个属性和一个值组成。 属性(Property)是需要设置的样式属性(Style attribute)。每一个属性有一个值。…

vue 实现在线预览Excel-LuckyExcel/LuckySheet实现方案

一、准备工作 1. npm安装 luckyexcel npm i -D luckyexcel 2.引入luckysheet 注意:引入luckysheet,只能通过CDN或者直接引入静态资源的形式,不能npm install。 个人建议直接下载资源引入。我给你们提供一个下载资源的地址: …

vue3实践

选项式API和组合式API 1、使用选项式 API,用包含多个选项的对象来描述组件的逻辑,例如 data、methods 和 mounted。选项所定义的属性都会暴露在函数内部的 this 上,它会指向当前的组件实例。 2、组合式 API,我们可以使用导入的 A…

4、Python基本数据类型:数字、字符串、列表、元组、集合、字典

文章目录 1、Python基本数据类型简介2、数字3、字符串4、列表5、元组6、集合7、字典1、Python基本数据类型简介 Python是一种非常强大且易于学习的编程语言,它具有简洁的语法和丰富的数据类型。了解和掌握Python的基本数据类型是学习和使用Python的基础。本文将详细介绍Pytho…

Qt 继承QAbstractListModel实现自定义ListModel

1.简介 QAbstractListModel类提供了一个抽象模型,可以将其子类化以创建一维列表模型。 QAbstractListModel为将其数据表示为简单的非层次项目序列的模型提供了一个标准接口。它不直接使用,但必须进行子类化。 由于该模型提供了比QAbstractItemModel更…

今天放个大招,带你手把手搭建 Jenkins 的分布式构建

UI 自动化测试代码写完了以后,会放到 Jenkins 这样的持续集成工具上去构建。 如果 Jenkins 平台是搭建在服务器上,会面临 2 个问题: 第一个问题是 UI 自动化测试需要渲染界面,需要消耗大量的 CPU 和内存资源,如果服务…

【3D图像分割】基于Pytorch的VNet 3D 图像分割5(改写数据流篇)

在这篇文章:【3D 图像分割】基于 Pytorch 的 VNet 3D 图像分割2(基础数据流篇) 的最后,我们提到了: 在采用vent模型进行3d数据的分割训练任务中,输入大小是16*96*96,这个的裁剪是放到Dataset类…

家用好物风云汇,值得买风尚购物清单

双十一又要来啦!作为购物狂热者的我们,肯定早已经在各大电商平台上准备好了购物清单。但是,如果你还没有找到心仪的好物,那么不妨来看看值得买在线上线下的选品活动。 最近,我在风尚场发现了很多值得买的家用好物&…

js获取url截取文件名或后缀名

示例图 var url "http://localhost:5613/static/挽风.jpg"var lastOf url.lastIndexOf(/) // /所在的最后位置var str url.substr(lastOf 1) //截取文件名称和后缀 输出:挽风.jpgvar strUrl url.substr(0, lastOf) //截取路径字符串 输出&…

【构建一套Spring Cloud项目的大概步骤】【Springcloud Alibaba微服务分布式架构学习资料】

目录 1、创建一个Maven项目2、搭建Spring Cloud服务3、搭建Spring Cloud Eureka4、搭建Spring Cloud Config5、搭建Spring Cloud Consumer6、搭建Spring Cloud Zuul7、使用Jenkins进行代码自动化部署另附录、Springcloud Alibaba微服务分布式架构 1、创建一个Maven项目 在IDEA…

四.pyqt5 登录界面和功能

一.使用qt creator 设置登录界面 主界面为之前设计的界面 from123.py 文章地址:三.listview或tableviw显示 二.导出ui文件为py文件 # from123.py 为导出 py文件 form.ui 为 qt creator创造的 ui 文件 pyuic5 -o x:\xxx\Fromlogin20230809.py form.ui三.python 显…

排查CPU飙高与系统反应慢的问题

今天我要和大家分享的是如何排查系统中的CPU飙高和系统反应慢的问题。在日常的系统运维中,我们可能会遇到这样的问题,因此,我将尽可能详细地介绍排查的步骤,并通过实际的例子来展示如何进行排查。希望大家能够从这篇文章中获得所需…

分享一下微信小程序里怎么创建会员卡功能

在当今的数字化时代,微信小程序已经成为一种广泛使用的应用模式,涵盖了各种行业。对于企业而言,拥有一个会员卡系统可以更好地管理客户,提高客户忠诚度,并促进消费。本文将探讨如何在微信小程序中创建会员卡功能&#…

计算机毕设 基于大数据的股票量化分析与股价预测系统

文章目录 0 前言1 课题背景2 实现效果3 设计原理QTChartsarma模型预测K-means聚类算法算法实现关键问题说明 4 部分核心代码5 最后 0 前言 🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕…

YOLOv5算法改进(22)— 更换主干网络MobileNetv3 + 添加CA注意力机制

前言:Hello大家好,我是小哥谈。本节课就让我们结合论文来对YOLOv5进行组合改进(更换主干网络MobileNetv3 + 添加CA注意力机制),希望同学们学完本节课可以有所启迪,并且后期可以自行进行YOLOv5算法的改进!🌈 前期回顾: YOLOv5算法改进(1)— 如何去改进YOLOv5算法

智能安全配电装置在临时展会场所中的应用

【摘要】简述了商场临时展会、展摊等场所中电气装置用电的特性,针对此类场所中隐含的电气安全隐患问题,结合智能安全配电装置的功能,从用电设备的接地、线路的安装与敷设、设备的维护和管理等方面介绍了其安全保障技术,以保证此临…