iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >JavaScript8的知识点有哪些
  • 686
分享到

JavaScript8的知识点有哪些

2023-06-27 10:06:59 686人浏览 泡泡鱼
摘要

这篇文章主要介绍“javascript8的知识点有哪些”,在日常操作中,相信很多人在JavaScript8的知识点有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”JavaScript8的知识点有哪些”的疑

这篇文章主要介绍“javascript8的知识点有哪些”,在日常操作中,相信很多人在JavaScript8的知识点有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”JavaScript8的知识点有哪些”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

线程

如果你是一个node开发者,你应该很熟悉V8的单线程特性。一个 js 执行上下文与线程数量成正比。

当然,V8在后台管理操作系统线程机制。它可以与多个线程一起工作,因为它是一个复杂的软件,可以同时执行许多任务。

但是,V8为每个 JavaScript 的执行上下文只创建一个单线程的环境。其余的都在V8的控制之下。

想象一下 JavaScript 代码应该进行的函数调用堆栈。 JavaScript 的工作原理是将一个函数堆叠在另一个函数之上,遵循每个函数的插入/调用顺序。在到达每个函数的内容之前,我们无法知道它是否调用其他函数。如果发生这种情况,那么被调用的函数将被放在堆栈中调用者的后面。

例如,当涉及回调时,它们被放在堆栈的末尾。

管理这个堆栈组织和进程所需的内存是V8的主要任务之一。

Ignition and TurboFan

自2017年5月发布的5.9版以来,V8 附带了一个新的JavaScript执行管道,它构建在V8的解释器Ignition之上。它还包括一个更新和更好的优化编译器-TurboFan

这些变化完全集中在整体性能上,以及 Google 开发人员在调整引擎以适应 JavaScript 领域带来的所有快速而显著的变化时所面临的困难。

项目一开始,V8的维护人员就一直在担心如何在 JavaScript 不断发展的同时,找到一种提高V8性能的好方法。

Hidden Classes(隐藏类)

这是V8的另一个魔术。JavaScript 是一种动态语言。这意味着可以在执行期间添加、替换和删除新属性。例如,在Java这样的语言中,这是不可能的,在Java中,所有的东西(类、方法、对象和变量)都必须在程序执行之前定义,并且在应用程序启动后不能动态更改。

由于它的特殊性质,JavaScript 解释器通常基于散列函数(hash算法)执行字典查找,以准确地知道这个变量或对象在内存中的分配位置。

这对最后一道工序来说代价很大。在其他语言中,当对象被创建时,它们接收一个地址(指针)作为其隐式属性之一。这样,我们就可以准确地知道它们在内存中的位置以及要分配多少空间。

对于 JavaScript,这是不可能的,因为我们无法映射出不存在的内容。这就是Hidden Classes发挥作用的地方。

隐藏类与Java中的类几乎相同:静态类和固定类具有唯一的地址来定位它们。然而,V8并不是在程序执行之前执行,而是在运行过程中,每次对象结构发生“动态变化”时执行。

让我们看一个例子来说明问题。考虑以下代码片段:

function User(name, fone, address) {   this.name = name   this.phone = phone   this.address = address}

在 JavaScript 基于原型的特性中,每次实例化一个新的用户对象时,假设:

var user = new User("John May", "+1 (555) 555-1234", "123 3rd Ave")

然后V8创建一个新的隐藏类。我们称之为_User0

每个对象在内存中都有一个对其类表示的引用。它是类指针。此时,由于我们刚刚实例化了一个新对象,所以在内存中只创建了一个隐藏类。现在是空的。

当你在这个函数中执行第一行代码时,将在上一个基础上创建一个新的隐藏类,这次是_User1

它基本上是具有name属性的User的内存地址。在我们的示例中,我们没有使用仅将name作为属性的user,但每次这样做时,这就是V8将作为引用加载的隐藏类。

name属性被添加到内存缓冲区的偏移量 0,这意味着这将被视为最后顺序中的第一个属性。

V8还将向_User0隐藏类添加一个转换值。这有助于解释器理解:每次向User对象添加name属性时,必须处理从_User0_User1的转换。

当调用函数中的第二行时,同样的过程再次发生,并创建一个新的隐藏类

你可以看到隐藏类跟踪堆栈。在由转换值维护的链中,一个隐藏类通向另一个。

属性添加的顺序决定了V8将要创建多少个隐藏类。如果您更改我们所创建的代码段中的行的顺序,那么也将创建不同的隐藏类。这就是为什么有些开发人员试图保持重用隐藏类的顺序,从而减少开销。

Inline Caching(内联缓存

这是JIT(Just-in-Time)编译器中非常常见的一个术语。它与隐藏类的概念直接相关。

例如,每当你调用一个函数,将一个对象作为参数传递时,V8会看到这个动作,然后想:“嗯,这个对象作为参数成功地传递了两次或更多次……为什么不把它存储在我的缓存中以备将来调用,而不是再次执行整个耗时的隐藏类验证过程?”

让我们回顾上一个例子:

function User(name, fone, address) { // Hidden class _User0   this.name = name // Hidden class _User1   this.phone = phone // Hidden class _User2   this.address = address // Hidden class _User3}

当我们将 User 对象的实例两次作为参数传递给函数后,V8将跳转到隐藏类查找并直接转到偏移量的属性。这要快得多。

但是,请记住,如果更改函数中任何属性赋值的顺序,则会导致不同的隐藏类,因此V8将无法使用内联缓存功能。

这是一个很好的例子,说明开发人员不应该避免更深入地了解引擎。相反,拥有这些知识将有助于代码更好地执行。

Garbage Collecting(垃圾回收)

你还记得我们提到过V8在另一个线程中收集内存垃圾吗?这很有帮助,因为我们的程序执行不会受到影响。

V8使用众所周知的“标记和扫描”策略来收集内存中的旧对象。在这种策略中,GC扫描内存对象以“标记”它们以进行收集的阶段有点慢,因为这需要暂停代码执行。

但是,V8是递增的,也就是说,对于每个 GC 停顿,V8尝试标记尽可能多的对象。它使一切变得更快,因为在集合完成之前不需要停止整个执行。在大型应用程序中,性能的提高有很大的不同。

到此,关于“JavaScript8的知识点有哪些”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

--结束END--

本文标题: JavaScript8的知识点有哪些

本文链接: https://www.lsjlt.com/news/309769.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

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

下载Word文档
猜你喜欢
  • JavaScript8的知识点有哪些
    这篇文章主要介绍“JavaScript8的知识点有哪些”,在日常操作中,相信很多人在JavaScript8的知识点有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”JavaScript8的知识点有哪些”的疑...
    99+
    2023-06-27
  • Elasticsearch的知识点有哪些
    本篇内容主要讲解“Elasticsearch的知识点有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Elasticsearch的知识点有哪些”吧!本篇主要内...
    99+
    2024-04-02
  • MySQL的知识点有哪些
    本篇内容主要讲解“MySQL的知识点有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“MySQL的知识点有哪些”吧! 1.在Ce...
    99+
    2024-04-02
  • Vue的知识点有哪些
    本篇内容介绍了“Vue的知识点有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1.官方介绍Vue (读音 /vjuː/,类似于 view...
    99+
    2023-06-03
  • SwiftUI的知识点有哪些
    这篇文章主要讲解了“SwiftUI的知识点有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“SwiftUI的知识点有哪些”吧!一、背景苹果于2019年度WWDC全球开发者大会上,发布了基于...
    99+
    2023-06-04
  • React的知识点有哪些
    这篇文章主要介绍了React的知识点有哪些的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇React的知识点有哪些文章都会有所收获,下面我们一起来看看吧。  组件的数据挂载方式,属性(props)props是正常...
    99+
    2023-06-03
  • Css的知识点有哪些
    这篇文章主要为大家展示了“ Css的知识点有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“ Css的知识点有哪些”这篇文章吧。块元素、内联元素,是一个元素,...
    99+
    2024-04-02
  • HTML5的知识点有哪些
    这篇文章主要讲解了“HTML5的知识点有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“HTML5的知识点有哪些”吧!1 :基于HTML5的移动Web应用Canvas绘图:通过获取HTML...
    99+
    2023-06-17
  • ECharts的知识点有哪些
    本文小编为大家详细介绍“ECharts的知识点有哪些”,内容详细,步骤清晰,细节处理妥当,希望这篇“ECharts的知识点有哪些”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。简介ECharts(Enterpris...
    99+
    2023-06-27
  • yolov5的知识点有哪些
    这篇文章主要讲解了“yolov5的知识点有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“yolov5的知识点有哪些”吧!一、yolo中txt文件的说明:二、yolo跑视频、图片文件的格式...
    99+
    2023-07-02
  • mysql知识点有哪些
    本篇内容主要讲解“mysql知识点有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“mysql知识点有哪些”吧! 1、同步方式 binlog和pos同步、...
    99+
    2024-04-02
  • JS知识点有哪些
    小编给大家分享一下JS知识点有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧! 暂时性死区只要块级作用域存在let命...
    99+
    2024-04-02
  • Flex知识点有哪些
    这篇文章主要介绍了Flex知识点有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Flex简介Flex通常是指AdobeFlex,是最初由Macromedia公司在2004...
    99+
    2023-06-17
  • CSS知识点有哪些
    这篇文章给大家分享的是有关CSS知识点有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。 1、对WEB标准以及W3C的理解与认识 标签闭合、标签小写、不乱嵌套、提高搜索机器...
    99+
    2024-04-02
  • HBase知识点有哪些
    本篇内容介绍了“HBase知识点有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!HBase – Hadoop Database,是一个高...
    99+
    2023-06-02
  • swoole知识点有哪些
    本篇内容主要讲解“swoole知识点有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“swoole知识点有哪些”吧!swoole聊天室流程讲解整个聊天室流程为:- 用户http接口登录获得授权...
    99+
    2023-06-29
  • django知识点有哪些
    小编给大家分享一下django知识点有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、视图函数:请求对象-----------request:HttpReq...
    99+
    2023-06-04
  • WebSettings知识点有哪些
    这篇文章主要讲解了“WebSettings知识点有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“WebSettings知识点有哪些”吧!WebSettings webSettings=w...
    99+
    2023-06-05
  • vue知识点有哪些
    这篇文章主要为大家展示了“vue知识点有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“vue知识点有哪些”这篇文章吧。一、前端核心分析1.1、概述Soc原则:关注点分离原则Vue 的核心库只...
    99+
    2023-06-22
  • HTML5知识点有哪些
    这篇文章将为大家详细讲解有关HTML5知识点有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。HTML5是用于取代1999年所制定的 HTML 4.01 和 XHTML...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作