Nodejs学习记录: Chrome V8 基础

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支持众多操作系统,如windowslinuxandroid等,也支持其他硬件架构,如IA32,X64,ARM等,具有很好的可移植跨平台特性

VAQFII.png

历史

JavaScript引擎 V8 的前世今生

v8引擎出现的原因

这里先说一下什么是编译型语言和解释性语言:

编译型语言: 在程序执行之前必须进行专门的编译过程,有如下特点:

  • 只须编译一次就可以把源代码编译成机器语言,后面的执行无须重新编译,直接使用之前的编译结果就可以;因此其执行的效率比较高
  • 编译性语言代表:C、C++、Java、Pascal/Object Pascal(Delphi);
  • 程序执行效率比较高,但比较依赖编译器,因此跨平台性差一些;
  • 不同平台对编译器影响较大。

    • 16位系统下int是2个字节(16位),而32位系统下int占4个字节(32位);
    • 32位系统下long类型占4字节,而64位系统下long类型占8个字节;

解释性语言- 解释行语言,支持动态类型,弱类型,在程序运行的时候才进行编译,而编译前需要确定变量的类型,效率比较低,对不同系统平台有较大的兼容性.

  • 源代码不能直接翻译成机器语言,而是先翻译成中间代码,再由解释器对中间代码进行解释运行

    • 源代码—>中间代码—>机器语言
  • 程序不需要编译,程序在运行时才翻译成机器语言,每执行一次都要翻译一次
  • 解释性语言代表:PythonJavaScript、Shell、Ruby、MATLAB等;
  • 运行效率一般相对比较依赖解释器,跨平台性好;

比较

  • 一般,编译性语言的运行效率比解释性语言更高;但是不能一概而论,部分解释性语言的解释器通过在运行时动态优化代码,甚至能使解释性语言的性能超过编译性语言;
  • 编译性语言的跨平台特性比解释性语言差一些;

进过以上说明,解释性语言,运行效率低,随着Web相关技术的发展,JavaScript所要承担的工作也越来越多,早就超越了“表单验证”的范畴,这就更需要快速的解析和执行JavaScript脚本。V8引擎就是为解决这一问题而生,在node中也是采用该引擎来解析JavaScript。

基本概念

内存机制

Nodejs 实际上就是一个使用C++完成的程序,其能执行JavaScript代码,它的底层主要由两部分第三方库组成 —— Chrome V8 和 libuv

参考

Documentation V8
JavaScript 引擎基本原理:Shapes 和 Inline Caches
JavaScript engine fundamentals: Shapes and Inline Caches
https://github.com/hyj1991/de...

阅读 465

推荐阅读
镜心的小树屋
用户专栏

方寸湛然GitHub组织地址:[链接]

47 人关注
123 篇文章
专栏主页