图解 Google V8 / 一门课搞懂 JavaScript 执行逻辑
李兵
前盛大创新院高级研究员
  • 课程目录
  • 课程介绍
  • 开篇词 | 如何学习谷歌高性能 JavaScript 引擎V8?

    V8之所以拥有如此庞大的生态圈,也和它许多革命性的设计是分不开的。

  • 01 | V8是如何执行一段JavaScript代码的?

    V8,目前用在Chrome浏览器和Node.js中,其核心功能是执行易于人类理解的JavaScript代码。

  • 02 | 函数即对象:一篇文章彻底搞懂JavaScript的函数特点

    JavaScript中的函数非常灵活,既可以被调用,还可以作为变量、参数和返回值。

  • 03 | 快属性和慢属性:V8是怎样提升对象属性访问速度的?

    为了提升查找效率,V8在对象中添加了两个隐藏属性,排序属性和常规属性。

  • 04 | 函数表达式:涉及大量概念,函数表达式到底该怎么学?

    函数声明和变量声明类似,V8在编译阶段,都会对其执行变量提升的操作,将它们提升到作用域中。

  • 05|原型链:V8是如何实现对象继承的?

    JavaScript仅仅在对象中引入了一个原型的属性,就实现了语言的继承机制,省去了很多基于类时的繁文缛节,简洁而优美。

  • 06|作用域链:V8是如何查找变量的?

    JavaScript所采用的作用域机制就是词法作用域,作用域链的路径就是按照词法作用域来实现的。

  • 07|类型转换:V8是怎么实现1+“2”的?

    在JavaScript中,类型系统是依据ECMAScript标准来实现的,V8会严格根据ECMAScript标准来执行。

  • 08|答疑:如何构建和使用V8的调试工具d8?

    d8是非常有用的调试工具,帮助我们发现代码是否可以被V8高效地执行。

  • 09 | 运行时环境:运行JavaScript代码的基石

    在执行JavaScript代码之前,V8就已经准备好了代码的运行时环境。

  • 10 | 机器代码:二进制机器码究竟是如何被CPU执行的?

    CPU执行机器代码的逻辑非常简单,首先编译之后的二进制代码被加载进内存,然后CPU就按照指令的顺序,一行一行地执行。

  • 11 | 堆和栈:函数调用是如何影响到内存布局的?

    我们使用栈这种数据结构来管理函数的调用过程,把管理函数调用过程的栈结构称之为调用栈。

  • 12 | 延迟解析:V8是如何实现闭包的?

    利用惰性解析可以加速JavaScript代码的启动速度,如果要将所有的代码一次性解析编译完成,会大大增加用户的等待时间。

  • 13 | 字节码(一):V8为什么又重新引入字节码?

    在早期,V8团队采取了非常激进的策略,直接将JavaScript代码编译成机器代码。

  • 14|字节码(二):解释器是如何解释执行字节码的?

    AST和作用域信息被输入到Ignition 解释器中,并将其转化为字节码,再由Ignition解释器来解释执行。

  • 15 | 隐藏类:如何在内存中快速查找对象属性?

    为了加速查找对象属性的速度,V8在背后为每个对象提供了一个隐藏类,隐藏类描述了该对象的具体形状。

  • 16 | 答疑: V8是怎么通过内联缓存来提升函数执行效率的?

    内联缓存会监听每个函数的执行过程,并在一些关键的地方埋下监听点。

  • 17 | 消息队列:V8是怎么实现回调函数的?

    回调函数有两种类型:同步回调和异步回调,同步回调函数是在执行函数内部被执行的,而异步回调函数是在执行函数外部被执行的。

  • 18 | 异步编程(一):V8是如何实现微任务的?

    微任务其实是一个需要异步执行的函数,执行时机是在主函数执行结束之后、当前宏任务结束之前。

  • 19|异步编程(二):V8是如何实现async/await的?

    使用async/await,可以实现以同步的方式编写异步代码这一目标。

  • 20 | 垃圾回收(一):V8的两个垃圾回收器是如何工作的?

    V8为了更高效地回收垃圾,引入了两个垃圾回收器,它们分别针对不同的场景。

  • 21 | 垃圾回收(二):V8是如何优化垃圾回收器执行效率的?

    为了解决全停顿而造成的用户体验的问题,V8团经过了很多年的努力,向现有的垃圾回收器添加了并行、并发和增量等垃圾回收技术。

  • 22|答疑:几种常见内存问题的解决策略

    通常有三种内存问题:内存泄漏(Memory leak)、内存膨胀(Memory bloat)、频繁垃圾回收。

  • 结束语 | 我的前端学习踩坑史

    这世界上最值钱的就是我们的专注力和时间,花三年干成一件事和花十年干成一件事的代价是不一样的。

  • 结课测试 | 这些V8的知识你都掌握了吗?

    《图解Google V8》结课了,来做一下测试吧!

【仅限 100 个名额 | 立省 ¥23】

拼团+口令「maimaimai」到手仅 ¥45,立省 ¥23,仅限 100 个名额

你将获得

  • V8 执行 JavaScript 代码的完整流程;
  • JavaScript 的核心特性;
  • 事件循环和垃圾回收的工作机制;
  • 系统优化 JavaScript 执行效率的方法。

讲师介绍

李兵,《浏览器工作原理与实践》课程作者,前盛大创新院高级研究员,在浏览器和前端开发领域深耕了十余年。曾在盛大创新院参与WebOS 项目,在顺网科技带领团队打造了一款给全国网吧使用的“F1 浏览器”,目前致力于为企业提供前端项目咨询和浏览器研发的基础服务。

课程介绍

V8 是 Google 基于 C++ 编写的开源高性能 JavaScript 与 WebAssembly 引擎,主要的应用包括Chrome浏览器以及Node.js。得益于Chrome浏览器的市场占有率以及Chromium阵营的不断强大,V8已经成为了当今最主流的JavaScript引擎。

但很多前端开发人员对 V8 的理解还停留在表面,只是单纯地使用 JavaScript 和调用 Web API,并不了解 V8 这个“黑盒”内部是如何工作的,项目出现问题时,也只能是“头疼医头,脚疼医脚”,没有系统的解决策略;想要系统学习V8时,也不知道从何处着手,不能迅速抓住V8的核心知识要点。

因此,我们邀请了李兵,带来第二季课程《图解 Google V8》。在这个课程中,他将完整地梳理V8的核心知识体系,通过大量图片演示,深入浅出地讲解 V8 执行 JavaScript 代码的底层机制和原理。

通过学习这门课程,你不仅可以了解完整的 V8 编译流水线,还能通过对 V8 工作机制的学习,搞懂JavaScript语言的核心特性,进而从根源解决程序上的问题,加快 JavaScript 的执行速度。

V8知识图谱

模块介绍

本课程包括三个模块,分别是 JavaScript 设计思想篇、V8 编译流水线篇、事件循环和垃圾回收篇。

JavaScript 设计思想篇,关注 JavaScript 的设计思想,讨论它背后的核心特性,以及V8是是怎么实现这些特性的。

V8 编译流水线篇,带你分析 V8 的编译流水线所涉及到的具体知识点,同时也会穿插讲解一些内存分配相关的内容,因为函数调用、变量声明、参数传递或者函数返回数值都涉及到了内存分配。

事件循环和垃圾回收篇,深入到 V8 的心脏事件循环系统中,学习 V8 是如何实现JavaScript 单线程执行的。同时,关注垃圾回收问题,打通 V8 分配内存和回收数据的整个链路,掌握系统排查问题的方法。

课程目录

特别放送

订阅须知