文章目录
  1. 1. v8如何执行处理JavaScript
  2. 2. javaScriptCore
  • 补充下JIT的概念
  • 总结
  • 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)

    参考资料1
    参考资料2
    js引擎内部

    文章目录
    1. 1. v8如何执行处理JavaScript
    2. 2. javaScriptCore
  • 补充下JIT的概念
  • 总结