V8引擎-隐藏类

1、动态语言和静态语言

静态语言的效率更高

  javaScript是一种动态语言,对象的属性在运行时可以被修改。因此,当V8使用一个对象时,比如使用start.x来访问对象start的属性x时,V8并不知道对象中是否存在x属性,也不知道x属性相对于对象的偏移量是多少,也就是说V8不知道对象的具体形状。

  相比之下,C++是一种静态语言,对象的结构在编译时就被确定下来。在C++中,访问对象的属性时可以直接根据属性相对于对象地址的偏移值进行访问。例如,在C++中使用start.x时,编译器会将属性x相对于对象start的地址直接写入汇编指令中,当使用对象start的属性x时,CPU可以直接从内存地址中获取属性值,无需进行中间的查找过程。

  这就是为什么静态语言的效率更高,因为在编译时就可以确定对象的属性访问方式,而动态语言需要在运行时进行属性查找,导致访问速度较慢且耗时。

V8引入静态的特性-隐藏类

  为了提高 JavaScript 对象属性的访问速度,V8 引入了隐藏类的概念。隐藏类是为每个对象创建的一个数据结构,记录了对象的属性和属性的偏移量:

  • 对象中所包含的所有的属性;
  • 每个属性相对于对象的偏移量。

  每个对象都有一个隐藏类,也被称为map,该map属性指向对象的隐藏类。隐藏类包括了对象的属性和它们相对于对象的偏移量。当访问对象的属性时,V8会先查找对象的隐藏类,根据偏移量直接访问属性的值,而不需要进行一系列的查找过程,从而提高了访问属性的效率。

let point = {x:100,y:200}

多个对象共用一个隐藏类

  每个对象都有一个 map 属性,该属性值指向该对象的隐藏类。不过如果两个对象的形状是相同的,V8 就会为其复用同一个隐藏类,这样有两个好处:

  • 减少隐藏类的创建次数,也间接加速了代码的执行速度;
  • 减少了隐藏类的存储空间。

对象的形状是相同的,要满足以下两点:

  • 相同的属性名称;(包括顺序)
  • 相等的属性个数。

let point = {x:100,y:200};

let point2 = {x:3,y:4};

重新构建隐藏类关于隐藏类

V8 为了实现隐藏类,需要两个假设条件:

  • 对象创建好了之后就不会添加新的属性;

  • 对象创建好了之后也不会删除属性。

  但是,JavaScript 依然是动态语言,在执行过程中,对象的形状是可以被改变的,如果某个对象的形状改变了,隐藏类也会随着改变,这意味着 V8 要为新改变的对象重新构建新的隐藏类,这对于 V8 的执行效率来说,是一笔大的开销。

  通俗地理解,给一个对象添加新的属性,删除新的属性,或者改变某个属性的数据类型都会改变这个对象的形状,那么势必也就会触发 V8 为改变形状后的对象重建新的隐藏类。

总结

1,使用字面量初始化对象时,要按照顺序保持属性一致,避免改变对象形状,代码如下所示:

let point = {x:100,y:200};

let point2 = {y:100,x:200};

虽然创建时的对象属性一样,但是它们初始化的顺序不一样,这也会导致形状不同,所以它们会有不同的隐藏类,所以我们要尽量避免这种情况。

2,尽量一次性使用字面量初始化对象的属性,避免重复添加属性。

3,避免使用delete方法,因为它破坏了对象的形状,导致重新生成隐藏类。

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

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

相关文章

【C Primer Plus第六版 学习笔记】 第十六章 C预处理器和C库

有基础,进阶用,个人查漏补缺 第十五章的内容之前学过,跳过 预处理之前,编译器必须对该程序进行一些翻译处理 首先把源代码中出现的字符映射到原字符集 其次编译器定位每个反斜杠后面跟着换行符的实例,并删除它们&…

在 Linux 系统中,常用的音频命令alsamixer、amixer、aplay、arecord

在 Linux 系统中,常用的音频命令主要包括以下几个: 1. alsamixer alsamixer 是一个交互式的音频混音控制台程序,它提供了对音量、通道、增益等设置的直观界面。 2. amixer amixer 命令用于管理音频设置,可以显示和调整音量、切换…

各种编程语言的特点及应用领域

1、C语言 特点:C语言是一种高效、快速、可移植、结构化的编程语言,具有广泛的应用领域。C语言不提供诸如面向对象编程(OOP)等高级语言所支持的抽象层次,但可以方便地访问底层硬件,因此常被用于系统编程和嵌…

一种安防场景下融合注意力机制和时空图卷积神经网络的人体动作识别方法与流程

本发明涉及模式识别与计算机视觉领域,尤其涉及一种安防场景下融合注意力机制和时空图卷积神经网络的人体动作识别方法。 背景技术: 视觉一直是人类获取外界信息的最重要、最直观的途径,据有关统计,人类获取信息的80%都…

nginx 多端口部署多站点

目录 1.进行nginx.conf 2.复制粘贴 3.修改端口及站点根目录 4. 网站上传 1.进行nginx.conf 在 nginx 主要配置文件 nginx.conf 中,server 是负责一个网站配置的,我们想要多个端口访问的话,可以复制多个 server 先进入到 nginx.conf 中 …

「微服务」Saga 模式 如何使用微服务实现业务事务-第二部分

在上一篇文章中,我们看到了实现分布式事务的一些挑战,以及如何使用Event / Choreography方法实现Saga的模式。在本文中,我们将讨论如何通过使用另一种类型的Saga实现(称为Command或Orchestration)来解决一些问题&#…

vue3+echarts可视化——记录我的2023编程之旅

文章目录 ⭐前言⭐2023我在csdn的旅途痕迹💖node系列文章💖vue3系列文章💖python系列文章💖react系列文章💖js拖拽相关文章💖小程序系列文章💖uniapp系列文章 ⭐可视化布局💖 git 数…

【VRTK】【VR开发】【Unity】18-VRTK与Unity UI控制的融合使用

课程配套学习项目源码资源下载 https://download.csdn.net/download/weixin_41697242/88485426?spm=1001.2014.3001.5503 【背景】 VRTK和Unity自身的UI控制包可以配合使用发挥效果。本篇就讨论这方面的实战内容。 之前可以互动的立体UI并不是传统的2D UI对象,在实际使用中…

MockServer简单使用记录

下载源码 下载git源码:git clone https://github.com/mock-server/mockserver.git 通过执行文件编译成jar包 ./mvnw clean package 可能会报错。 启动命令 java -jar ./mockserver-netty-jar-with-dependencies.jar -serverPort 1080 -proxyRemotePort 80 -pro…

(self-supervised learning)Event Camera Data Pre-training

Publisher: ICCV 2023 MOTIVATION OF READING: 自监督学习、稀疏事件 NILM link: https://arxiv.org/pdf/2301.01928.pdf Code: GitHub - Yan98/Event-Camera-Data-Pre-training 1. Overview Contributions are summarized as follows: 1. A self-supervised framework f…

如何下载LANDSAT数据

LANDSAT(Land Remote Sensing Satellite)是美国国家航空航天局(NASA)与美国地质调查局(USGS)合作推出的一系列卫星,旨在提供地球表面的高分辨率遥感数据。LANDSAT卫星系列始于1972年&#xff0c…

24届Java开发岗秋招春招面试题目合集【持续更新ing】

声明: 背景:本人为24届双非硕校招生,已经完整经历了一次秋招,拿到了三个offer。在这里分享一下我部分面试的题目,若有问题,可以评论私信与我沟通。我会在这里持续分享,有需要的可以收藏一波。 文…

win10连上了wifi热点但是无法上网

我的情况是能正常连接wifi热点(手机连接这个热点能上网,说明这个wifi热点是正常的) 但是没法上网 打开cmd窗口发现能ping通百度,掘金,csdn这些网址。这就更奇怪了!于是根据上面的提示,检查了代…

【数据结构和算法】 相等行列对

其他系列文章导航 Java基础合集数据结构与算法合集 设计模式合集 多线程合集 分布式合集 ES合集 文章目录 其他系列文章导航 文章目录 前言 一、题目描述 二、题解 2.1 三层循环 2.2 哈希 二层循环 三、代码 3.1 三层循环 3.2 哈希 二层循环 四、复杂度分析 4.1 …

189.【2023年华为OD机试真题(C卷)】单行道汽车通行时间(模拟题—JavaPythonC++JS实现)

请到本专栏顶置查阅最新的华为OD机试宝典 点击跳转到本专栏-算法之翼:华为OD机试 🚀你的旅程将在这里启航!本专栏所有题目均包含优质解题思路,高质量解题代码,详细代码讲解,助你深入学习,深度掌握! 文章目录 189.【2023年华为OD机试真题(C卷)】单行道汽车通行时…

基于STM32+QT设计的无人超市消费系统_139

基于STM32+QT设计的无人超市消费系统 一、前言 1.1 研究背景 随着科学技术的不断提高,计算机科学日渐成熟,其强大的功能已为人们深刻认识,它已进入人类社会的各个领域并发挥着越来越重要的作用。 超市形式在我国于20世纪90年代初期起步,现已成为我国零售业的一种重要形态…

LeetCode74二分搜索优化:二维矩阵中的高效查找策略

题目描述 力扣地址 给你一个满足下述两条属性的 m x n 整数矩阵: 每行中的整数从左到右按非严格递增顺序排列。每行的第一个整数大于前一行的最后一个整数。 给你一个整数 target ,如果 target 在矩阵中,返回 true ;否则&…

抖店和商品橱窗有什么区别?新手应该选哪个?

我是电商珠珠 临近年底了,有的人已经开始为下一年筹谋,有的去抖音做账号做直播带货,不会直播带货的就想尝试做下抖店,来为以后的经济打基础。 刚想要接触却对这类有些迷糊,发现商品橱窗和抖店都可以卖货,…

jumpServer-01-跳板机与堡垒机

jumpServer-01-跳板机与堡垒机 文章目录 jumpServer-01-跳板机与堡垒机一、为什么需要跳板机?二、堡垒机的核心价值三、跳板机与堡垒机的区别四、堡垒机的核心作用与价值 一、为什么需要跳板机? 跳板机(Jump Server)是一种安全设备…

C# WPF上位机开发(以始为终,寻找真实的上位机需求)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 c# wpf、qt、mfc这些上位机的需求是真实存在的,在现实中有很多应用的地方,这一点大家都很清楚。而程序员本身呢&#xff0c…