前言
这是一套关于 Chrome 中的 JS 引擎 V8 的文章系列。谈到 V8 ,估计大部分人会一种畏惧感,首先映入脑海的便是天花乱坠的 C++ 源码,但其实就算你掌握了 C++,也很难读懂源码,读懂里面的源码,并不是语言的问题,而是一个工程复杂度的问题。而且,我认为把 V8 里面的源码全部读懂并不是一个明智的做法,一个是工程量过于庞大,很容易失去耐心,另一方面代码的封装度非常高,导致很多抽象的代码,理解难度大。你想啊,几百个顶尖的工程师开发了十几年的东西,会让你轻易就把源码啃下来吗?
所以,我认为对于这种复杂的引擎来说,首先去看的不是具体的实现代码,而是顶层的设计思想和关键的技术手段。这样,如果对一部分特别感兴趣,也能找到一个切入的点去源码中验证,或者拿到更多的细节。
那还有一个问题,为什么要学习 V8,学习它有什么用?
很遗憾地告诉你,从功利的角度说,对你更好、更快地完成业务,并没什么用。如果说真的有用,可能面试的时候会有一点帮助,但更重要的是,作为一个追求极致的前端来说,这是一项基本功。基本功的重要性不言而喻,如果不知道引擎的实现思路,如何写出高质量高性能的 JS 代码简直是天方夜谭。
基于这样的出发点,我开始了这个系列的分享。主要分为两条主线,一个是 V8 的编译和执行流程,这会逼着你去补充计算机底层架构相关的知识,另一个是在性能优化方面 V8 采取了哪些具体的手段,根据这些手段你就知道如何合适的组织 JS 代码去触发这些优化,达到极致的性能。下面是本系列的思维导图:
![fe19a4a401e7bebfc8da9c7e94cbceaa.png](https://i-blog.csdnimg.cn/blog_migrate/8e1440d5e0f312ef9cbb46914666d012.png)
今天是第一篇,来分享一下 V8 在宏观上所处的位置(针对 Chorme 环境)。
Chrome 的多进程架构
早期的 Chrome 是单进程的,渲染、插件和网络等功能都是通过里面的线程来完成,这样大家都是共享一份内存的数据,不需要进程间通信,确实比较方便,但是一旦其中有一个线程出现问题,那个整个浏览器就会直接崩溃。为了解决这个问题,C