Nodejs的Javascript运行时引擎是Chrome V8。
Nodejs 与 v8 引擎
V8引擎
- V8引擎是一个
JavaScript引擎
实现,最初由一些语言方面专家设计,后被谷歌收购,随后谷歌对其进行了开源
。 - V8
使用C++开发
,在运行JavaScript之前,相比其它的JavaScript的引擎转换成字节码或解释执行,V8将其编译成原生机器码
(IA-32, x86-64, ARM, or MIPS CPUs),并且使用了如内联缓存
(inline caching)等方法来提高性能
。 - 有了这些功能,JavaScript程序在V8引擎下的运行速度媲美二进制程序。
- V8
支持众多操作系统
,如windows
、linux
、android
等,也支持其他硬件架构
,如IA32,X64,ARM等,具有很好的可移植
和跨平台特性
。
历史
v8引擎出现的原因
这里先说一下什么是编译型语言和解释性语言:
编译型语言
: 在程序执行之前必须进行专门的编译过程,有如下特点:
-
只须编译一次
就可以把源代码编译成机器语言
,后面的执行无须重新编译
,直接使用之前的编译结果就可以;因此其执行的效率比较高
; - 编译性语言代表:C、C++、Java、Pascal/Object Pascal(Delphi);
- 程序执行效率比较高,但比较依赖编译器,因此跨平台性差一些;
-
不同平台对编译器影响较大。
- 16位系统下int是2个字节(16位),而32位系统下int占4个字节(32位);
- 32位系统下long类型占4字节,而64位系统下long类型占8个字节;
解释性语言
- 解释行语言,支持动态类型,弱类型,在程序运行的时候才进行编译,而编译前需要确定变量的类型,效率比较低,对不同系统平台有较大的兼容性.
-
源代码
不能直接翻译成机器语言
,而是先翻译成中间代码
,再由解释器
对中间代码进行解释运行
;- 源代码—>中间代码—>机器语言
-
程序不需要编译
,程序在运行时才翻译成机器语言,每执行一次都要翻译一次
; - 解释性语言代表:
Python
、JavaScript
、Shell、Ruby、MATLAB等; - 运行
效率
一般相对比较低
,依赖解释器
,跨平台性好;
比较
:
- 一般,
编译性语言的运行效率比解释性语言更高
;但是不能一概而论,部分解释性语言的解释器通过在运行时动态优化代码,甚至能使解释性语言的性能超过编译性语言; - 编译性语言的跨平台特性比解释性语言差一些;
进过以上说明,解释性语言,运行效率低
,随着Web相关技术的发展,JavaScript所要承担的工作也越来越多,早就超越了“表单验证”的范畴,这就更需要快速的解析和执行JavaScript脚本。V8引擎就是为解决这一问题而生
,在node中也是采用该引擎来解析JavaScript。
基本概念
内存机制
Nodejs 实际上就是一个使用C++完成的程序,其能执行JavaScript代码,它的底层主要由两部分第三方库组成 —— Chrome V8 和 libuv
- Chrome V8 是JavaScript运行时,用于解释JavaScript
- libuv 实现了Nodejs的“事件循环”。 --> Node.js源码解析:深入Libuv理解事件循环
参考
Documentation V8
JavaScript 引擎基本原理:Shapes 和 Inline Caches
JavaScript engine fundamentals: Shapes and Inline Caches
https://github.com/hyj1991/de...
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。