内核、引擎、Runtime

个人理解浏览器内核可以分为两部分:渲染引擎(RenderEngine)和JS引擎。渲染引擎主要负责页面内容显示内容,JS引擎则是ECMAScript的实现,解释执行JavaScript语言。平时我们所说的内核应该主要指的是渲染引擎,常见分为四种:Trident(IE),Gecko(Firefox),Blink(Chrome),Webkit(Safari)。内核的不同,最后浏览器渲染效果也不相同。

说到JS引擎,马上想到就是Google的V8引擎。学过编译原理的人都知道,对于静态语言来说(如Java、C++、C),处理上述这些事情的叫编译器(Compiler),相应地对于JavaScript这样的动态语言则叫解释器(Interpreter)。这两者的区别用一句话来概括就是:编译器是将源代码编译为另外一种代码,而解释器是直接解析并将代码运行结果输出

但是,现在很难去界定说,JavaScript引擎它到底算是个解释器还是个编译器,因为,比如像V8(Chrome的JS引擎),它其实为了提高JS的运行性能,在运行之前会先将JS编译为本地的机器码,然后再去执行机器码(这样速度就快很多)。

JavaScript运行时又是什么呢。

Node.js is a JavaScript runtime built on [Chrome’s V8 JavaScript engine]这是Node的官方解释,不同的浏览器也提供了不同JavaScript的运行时,通过这些Runtime对比来看,我们可以得到一些信息。

引擎实现的是ECMAScript标准,负责提供解析和编译的机制,即从用JavaScript编写的脚本生成机器可执行操作。运行时环境提供程序在运行时(执行期间)可用的内置库。 因此,如果您要在浏览器中使用Window对象或DOM API,那么这些将包含在浏览器的JS运行时环境中。Node.js运行时包括不同的库,比如Cluster和FileSystem API。 两个运行时都包含内置数据类型和常用工具,如Console对象。某种程度上,运行时是引擎在传统编译语言中链接器对编译器的作用。

与C和其他编译语言不同,Javascript在一个容器中运行 - 一个读取你的js代码并运行它们的程序。 这个程序必须做两件事

  • 解析您的代码并将其转换为runnable命令
  • 为javascript提供一些对象,以便它可以与外部世界进行交互。

第一部分称为Engine,第二部分是Runtime。

浏览器/RunTime 内核(渲染引擎) JavaScript 引擎
Chrome Blink(28~)Webkit(Chrome 27) V8
FireFox Gecko SpiderMonkey
Safari Webkit JavaScriptCore
Edge EdgeHTML Chakra(for JavaScript)
IE Trident Chakra(for JScript)
PhantomJS Webkit JavaScriptCore
Node.js - V8