问答方式学 Node.js

栏目: Node.js · 发布时间: 6年前

内容简介:A:Node.js 是指运于 web 服务端的 JavaScript,基于 Chrome V8 引擎,有非阻塞,事件驱动 I/O 等特性。A:JavaScript 引擎是执行 JavaScript 代码的程序或解释器,JavaScript 引擎可以实现为标准解释器,或者以某种形式将 JavaScript 编译为字节码的即时编译器。它的工作流程大致如下:Chorme V8 引擎便是其中一种,由 Google 开发,使用 C++ 编写,它的工作流程几乎与上图一致:

A:Node.js 是指运于 web 服务端的 JavaScript,基于 Chrome V8 引擎,有非阻塞,事件驱动 I/O 等特性。

Q: 等等,你刚提到了 Chorme V8 引擎,它是什么,为什么使用它而不是其它引擎?

A:JavaScript 引擎是执行 JavaScript 代码的程序或解释器,JavaScript 引擎可以实现为标准解释器,或者以某种形式将 JavaScript 编译为字节码的即时编译器。它的工作流程大致如下:

问答方式学 Node.js

Chorme V8 引擎便是其中一种,由 Google 开发,使用 C++ 编写,它的工作流程几乎与上图一致:

问答方式学 Node.js

相比于其它 JavaScript 引擎转换成字节码或者解释执行,V8 将 JavaScript 代码转换成更高效的机器码(IA-32, x86-64, ARM, or MIPS CPUs)。它通过 JIT(Just-In-Time)编译器实现,不生成字节码或任何中间代码。并且使用了如 Inlining、Shapes、Inline Caches 等方法来提高性能。

Q:很好,现在我已经了解一点 Chorme V8 引擎有什么用了,但是你列举的那些方法,真让我头大。

A:比如 Shapes 与 Inline Caches 用来优化对象属性加载。

Q:嗯?

A:ECMAScript 规范基本上将所有对象定义为由字符串键值映射到 property 属性的字典,其中 [[]] 双方括号是规范定义不能直接暴露给 JavaScript 的属性的表示方法。

问答方式学 Node.js

Q:在内存中也是这么存储?

A:不不不,如果在内存中这么存储,那就浪费空间了。比如说有相同形状的对象 object = { x: 7, y: 8 } ,它们的属性名是相同的,并且在属性值的完整字典中,也只有 [[value]] 不同。

Q:那应该分开存储,把除 [[value]] 之外的所有属性名和其余特性单独存储。并且它需要有一个属性,来告知 JavaScript 引擎去哪查找具体的值。

A:是的,引擎将对象的 Shape 分开存储,如下 JSObject 只是存储 [[value]]Shape 中有一个 Offset 偏移量来告知 JavaScript 取哪找具体的值:

问答方式学 Node.js

当有多个具有相同形状对象时,优势变得清晰可见。因为只需要将它们的形状与键值属性信息存储一次!

问答方式学 Node.js

Q:原来是这样,不过那和 Inline Caches 有什么关系?

A:关系大了,Shapes 主要是用来实现 Inline Caches(ICs)的,Inline Caches 是 JavaScript 快速运行的关键因素之一。

Q:
问答方式学 Node.js

A:比如有一个从对象中获取 x 属性的函数,在 JSC(JavaScriptCore) 中执行时,会生成以下字节码:

问答方式学 Node.js

Inline Caches 在第一个指令 get_by_id 指令中,由两个未初始化的插槽组成。

当调用函数 getX({ x: 'a' }) 时,像前面所说,对象 { x: 'a' } 有一个包含属性 x 的 Shape,该 Shape 包含属性 x 的偏移量和其它特性,当第一次执行该函数时,会把该属性的 Shape 和 偏移量存储在 Inline Caches 中:

问答方式学 Node.js

后续调用该函数时,Inline Caches 只需要对比 Shape,如果与以前相同,则只需要从偏移量加载该属性值。这比每次查找要快很多。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

理想主义者

理想主义者

[美] 贾斯汀·彼得斯 / 程静、柳筠 / 重庆出版社 / 2018-5-15 / 49.80元

2013年1月11日,年仅26岁的黑客亚伦·斯沃茨自杀身亡,此事在美国引起轩然大波。这不仅是因为在互联网领域,斯沃茨是一个可以与比尔·盖茨、马克·扎克伯格、理查德·斯托曼等齐名的人,更是因为此事揭露了传统世界与互联网世界的规则冲突。 在互联网思维下,信息是明码标价的商品。各种利益方用技术竖起了一道道藩篱,将支付不起费用但渴望用知识改变命运的人隔绝在外。于是,一大批希望改变这种模式的“理想主义......一起来看看 《理想主义者》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换