V8 - 一个JS引擎

78 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第2天,点击查看活动详情

浏览器基本上都实现了一个自己的JavaScript引擎。这些JavaScript引擎可以分析、编译和执行JavaScript脚本。 C、C++要使用这些引擎,首先要获得一个全局的Global对象。这个全局的Global对象有属性、方法、事件。 C、C++通过对这个最大的Global对象调用get、set操作就可以实现与JavaScript进行双向交互了。

V8引擎是一种JavaScript引擎实现,大大提高了JavaScript的执行效率。在node中也是采用该引擎来解析JavaScript。

 V8引擎在执行JavaScript的过程中,主要有两个阶段:编译和运行。与编译型语言执行前完全编译不同的是,JavaScript需要在用户使用时完成编译和执行。在V8中,JavaScript相关代码并非一下完成编译的,而是在某些代码需要执行时,才会进行编译,这就提高了响应时间,减少了时间开销。

V8只是一个JS引擎。它必须要实现JS引擎的几个基础功能:

 1)脚本执行:

      脚本可能是一个表达式;一段js代码;或者一个文件,执行相应的脚本并返回相应的值。

 2)可以让C++来获取JS的内容

      获取JS内容的数据(包括基础数据类型、数组、日期等)、对象(类的一个实例)、类或函数。

 3)可以让JS来获取C++的内容

       获取C++的内容(包括基础数据类型、数组、日期等)、对象(类的实例)、 类或函数。

Nodejs的事件循环

    在node进程启动的时候,Node便会创建一 个类似于while(true)的循环,每执行一次循环体的 过程称为Tick,每个Tick的过程就是查看是否有 事件待处理,如果有就取出事件及其相关的回调 函数,执行它们,然后进入下一个循环。

image.png

Nodejs调用C++模块处理前端的事件