QCon 演讲火热征集中,快来分享技术实践与洞见! 了解详情
写点什么

JavaScript 执行效率不行?因为你还没用 V8 | 极客时间

  • 2020-03-17
  • 本文字数:1956 字

    阅读完需:约 6 分钟

JavaScript 执行效率不行?因为你还没用 V8 | 极客时间

我是李兵,现在是一名创业者,也是一位工程师。


去年,我写了一个专栏《浏览器工作原理与实践》,其中提到了 V8 是如何执行 JavaScript 代码的。我发现,不少朋友都对 V8 很感兴趣,对这部分的学习意犹未尽,因此,今天我来跟你深入聊聊 V8。


V8 是 Google 开源的 JavaScript 引擎。全球超过 25 亿台安卓设备都在使用 Chrome 浏览器,所以我们写的 JavaScript 应用,大都跑在 V8 上。作为当下使用最广泛的 JavaScript 引擎,V8 的生态圈也非常庞大,这与它革命性的设计密不可分。


在 V8 出现之前,所有 JavaScript 引擎用的都是解释执行的方式,这是 JavaScript 执行速度过慢的主要原因;而 V8 率先引入即时编译(JIT)的双轮驱动设计,混合编译执行和解释执行两种手段,为 JavaScript 的执行速度带来了极大提升。


V8 出现后,各大厂商也纷纷在 JavaScript 虚拟机中引入了 JIT 机制。 可以说,V8 的出现将 JavaScript 虚拟机技术推向了一个全新的高度。


但我发现,大部分人在运行 V8 时,只是单纯使用 JavaScript 和调用 Web API,并不了解这个“黑盒”内部是如何工作的。一旦项目出现问题,很难找到有效的解决策略,比如:项目占用内存过高,或页面响应速度过慢,又或者使用 Node.js 时,任务被阻塞等等。只有熟悉 V8 的工作机制,才会有系统性的思路来解决这些问题。


所以,我推出了第二个专栏《图解 Google V8》。在专栏中,我完整梳理了 V8 的核心知识体系,通过大量图片演示,深入浅出地讲解 V8 执行 JavaScript 代码的底层机制和原理。


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

我是谁?

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

我是如何讲解 Google V8 的?

刚刚我们提到过,V8 的主要职责是执行 JavaScript 代码。所以,首先我们要了解 JavaScript 的基本特性和设计思想。


JavaScript 是一门优秀的语言,借鉴了其他语言的优质特性,特别是“原型继承机制”和“函数是一等公民”这两个设计。



△ JavaScript 的设计思想


与此同时,JavaScript 也是一门处处是「坑」的语言,比如:使用 new 加构造函数来创建对象时,背后隐藏的很多细节,都会增大代码的出错概率;初期的 JavaScript 没有块级作用域机制,需要采取变量提升策略,而变量提升又是非常反人性的设计,等等。


所以,我们在学习 V8 时,要格外关注 JavaScript 这些独特的设计思想,及其特性背后的实现。


深入分析过 JavaScript 语言后,我们还要掌握 V8 执行 JavaScript 代码的完整流程,也就是 V8 的编译流水线,其完整流程如下图:



△ V8 的编译流水线


编译流水线本身并不复杂,但其中涉及很多技术,比如 JIT、延迟解析、隐藏类、内联缓存等等,它们决定了一段 JavaScript 代码能否正常执行,及其执行效率。


举个例子,V8 使用的隐藏类(Hide Class) 可将 JavaScript 中的动态类型转换为静态,有效解决了动态类型语言的执行速度过慢问题。如果你熟悉 V8 的工作机制,就能充分利用好隐藏类这种强大的优化特性,写出更加高效的代码。


再比如,为了加快代码的启动速度,V8 实现了 JavaScript 代码的惰性解析。通过学习惰性解析机制,你可以优化代码以更加适应这个机制,从而提高程序的性能。


最后,我们要了解 V8 另外两个重要特性:事件循环系统垃圾回收机制。


事件循环系统与 JavaScript 中的难点——异步编程紧密相关。我们知道,JavaScript 是单线程的,如果同一时间发送了多个 JS 的执行请求,就要排队,也就是异步编程。而 V8 的事件循环系统会调度这些排队任务,保证 JavaScript 代码被 V8 有序地执行。


因此可以说,事件循环系统是 V8 的心脏,驱动着 V8 持续工作。


另外,JavaScript 是一门自动垃圾回收的语言。V8 在执行垃圾回收时,会占用主线程资源,如果我们编写的程序频繁触发垃圾回收,就会阻塞主线程。而在我们了解 V8 如何分配并回收内存数据后,就能打通整个链路,掌握系统排查问题的方法。



△ 高清版图谱的领取方式,请见文末


结合以上内容,我总结了一份 V8 高效学习路径。通过这张图谱,你可以对 V8 的知识体系有更加直观的理解,同时明确每部分的核心知识点。


在专栏《图解 Google V8》中,我也会按照这样的思路讲解,帮你构建完整系统的知识体系,彻底拿下 V8。


现在订阅,有什么福利?

1.早鸟优惠 ¥55,原价 ¥68。结算时输入优惠口令「googlev88」,优惠基础上 再减 ¥5到手价 ¥50,仅限 「前 200 人」有效,戳此抢购>>>


2.订阅专栏后,生成分享海报,每成功邀请 1 位好友订阅,可得 ¥18 返现


2020-03-17 13:012751

评论 1 条评论

发布
暂无评论
发现更多内容

DataEase单点登录之OIDC

搞大屏的小北

keycloak 单点登录 OIDC

是不是你在找的推特GIF动图下载方法?!支持苹果安卓双系统使用!

frank

twitter 推特视频下载

使用DataEase分析销售数据有多方便?

搞大屏的小北

数据可视化 销售数据分析 数据展示

极客时间运维进阶训练营第一周作业

独钓寒江

拒绝内卷挖掘境外新蓝海,华为云虚拟专用网络VPN有多特别?

爱科技的水月

弹性公网IP支持多产品灵活绑定或解绑,能为企业提供独立公网IP资源!

秃头也爱科技

vivo 游戏中心低代码平台的提效秘诀

vivo互联网技术

低代码 组件化 配置化 提效

DataEase 做出来好看吗?

搞大屏的小北

数据可视化 大屏可视化 DataEase

关于佛萨奇系统开发及原力元宇宙2.0佛萨奇系统开发方案

I8O28578624

架构实战营10期-作业3

炮仗

数智为线,经纬中国:新华三勾勒出的山河锦绣

脑极体

南京公安研究院与秒云达成生态合作,携手赋能产业智能化发展

MIAOYUN

智慧公安 生态合作

转转实时OLAP分析场景技术选型与应用实践

转转技术团队

OLAP

Genymotion模拟器安装

芯动大师

android Genymotion Android模拟器

极客时间运维进阶训练营第九周作业

老曹

HVML 解释器 PurC 0.9.2 发布;持续演进!

hvmlenvoy

编程语言 解释器 HVML

预测式外呼算法模型的深度应用详解

中关村科金

人工智能 大数据 AI 智能

【JVM规范】第二章-JVM结构

四月

Java JVM

如何接受或拒绝 Excel 中的修订

在下毛毛雨

C# .net Excel 工作表 跟踪修订

贾斯特里尼&布鲁克斯葡萄酒,历经百年的传世经典

联营汇聚

华为云左少夫:面向分布式云原生 构筑无处不在的云原生基础设施

爱科技的水月

【JVM规范】第三章-Java虚拟机编译

四月

Java JVM

华为云连接CC——让多区域协同办公更高效更稳定

秃头也爱科技

同是弹性公网IP,华为云弹性公网IP的优势有哪些?

秃头也爱科技

有序存储对于高性能的意义

陈橘又青

算法

2022-12-26:有一个数组包含0、1、2三种值, 有m次修改机会,第一种将所有连通的1变为0,修改次数-1, 第二种将所有连通的2变为1或0,修改次数-2, 返回m次修改机会的情况下,让最大的0

福大大架构师每日一题

Linux 算法 Shell 福大大

正确理解和使用JAVA中的字符串常量池

JAVA旭阳

Java

全网首发!华为云UCS正式商用

爱科技的水月

用品质提升品味,贾斯特里尼&布鲁克斯葡萄酒

联营汇聚

京东金融APP-新交互技术“虚拟数字人”赋能世界杯主题营销

京东科技开发者

大数据 前端 Web 交互 虚拟人

想做运维审计大屏?用这个工具就对了!

搞大屏的小北

大屏可视化 运维审计 审计大屏

JavaScript 执行效率不行?因为你还没用 V8 | 极客时间_架构_李兵_InfoQ精选文章