如何学习Google高性能 JavaScript 引擎V8
JavaScript借鉴了很多语言的特性,比如C语言的基本语法、Java的类型系统和内存管理、Scheme的函数作为一等公民,还有Self基于原型(prototype)的继承机制。毫无疑问,JavaScript是一门非常优秀的语言,特别是“原型继承机制”和“函数是一等公民”这两个设计。

V8是JavaScript的实现,在学习V8工作原理时,我们就要格外关注JavaScript这些独特的设计思想和特性背后的实现。比如,为了实现函数是一等公民的特性,JavaScript采取了基于对象的策略;再比如为了实现原型继承,V8为每个对象引入了proto属性。
深入分析过JavaScript语言之后,我们就可以学习V8执行JavaScript代码的完整流程了。我们把这套流程称之为V8的编译流水线,其完整流程如下图所示:

要想充分了解V8是怎么工作的,除了要分析编译流水线,我们还需要了解另外两个非常重要的特性,那就是事件循环系统和垃圾回收机制。
事件循环系统和JavaScript中的难点——异步编程特性紧密相关。我们知道,JavaScript是单线程的,JavaScript代码都是在一个线程上执行,如果同一时间发送了多个JavaScript执行的请求,就需要排队,也就是进行异步编程。
V8的事件循环系统会调度这些排队任务,保证JavaScript代码被V8有序地执行。因此也可以说,事件循环系统就是V8的心脏,它驱动了V8的持续工作。
另外,JavaScript是一种自动垃圾回收的语言,V8在执行垃圾回收时,会占用主线程的资源,如果我们编写的程序频繁触发垃圾回收,那么无疑会阻塞主线程,这也是我们经常会遇到的一个问题。你需要知道V8是如何分配内存数据的,以及这些数据是如何被回收的,打通整个链路,建立完整的系统,当下次遇到内存问题时,就知道如何去排查了。


浙公网安备 33010602011771号