v8 engine与javascript
v8如何执行处理JavaScript
V8是一个由美国Google开发的开源JavaScript引擎,用于Google Chrome中
V8在运行之前将JavaScript编译成了机器码,
而非字节码或是解释执行它,以此提升性能。
更进一步,使用了如内联缓存(inline caching)等方法来提高性能。
有了这些功能,JavaScript程序与V8引擎的速度媲美二进制编译
- V8 引擎 是用 C++ 编写的,它能够编译并执行 JavaScript 源代码、
- 处理内存分配和垃圾回收。
- 它被设计成由两个编译器组成,可以把源码直接编译成机器码
javaScriptCore
JavaScriptCore是一个在WebKit中提供JavaScript引擎的框架,
而且在OS X作为其他内容的脚本引擎
它会将Javascript编译为原生的机器语言,
不再需要字节码直译器,同时加速了JavaScript的执行效率
- 它进行词法分析,就是将源代码分解成一系列具有明确含义的符号或字符串。
- 然后用语法分析器分析这些符号,将其构建成语法树。
- 接着四个 JIT(Just-In-Time)进程开始参与进来,分析和执行解析器所生成的字节码。
参考资料
一旦编译过程中产生了机器代码,引擎就会向浏览器暴露所有的数据类型、操作符、对象、
在 ECMA 标准中指定的函数、或任何运行时需要使用的东西
补充下JIT的概念
即时编译(英语:Just-in-time compilation又译及时编译/实时编译,
动态编译的一种形式,是一种提高程序运行效率的方法。通
常,程序有两种运行方式:静态编译与动态直译。静态编译的程序在执行前全部被翻译为机器码,而直译执行的则是一句一句边运行边翻译。
JIT编译则是这两种方式的混合,在运行时将源代码翻译成机器码(这一点与解释执行类似),
但是会保存已翻译的机器代码,下次执行同一代码段时无需再翻译(这又与静态编译类似)。总结
js引擎一般有2种实现方式:
- 源代码===跳过字节码的步骤==> 机器码(chrome)
- 源代码===JIT(边运行边翻译)==>机器码(javascriptCore safari)