限时领|《AI 百问百答》专栏课+实体书(包邮)! 了解详情
写点什么

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:012925

评论 1 条评论

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

跨端生态×AI赋能:移动研发模式的双擎驱动

xuyinyin

2025全球人形机器人领域深度报告:人形机器人、具身智能技术、商业化壁垒、产业链公司及投资分析

机器人头条

科技 大模型 人形机器人 具身智能

4种比常见的线程池和线程同步买票问题

量贩潮汐·WholesaleTide

Java Python

AWS EKS 集群日志上报观测云实践

观测云

aws lambda

DePIN代币正构建 Web3 和 AI 融合的新范式

PowerVerse

AI Web 3.0 DAO DePIN gpu 算力

内网im,局域网环境下BeeWorks 如何保障数据安全?

BeeWorks

即时通讯 企业级应用

DeFi模式:去中心化金融架构与流动性池设计

区块链软件开发推广运营

交易所开发 dapp开发 链游开发 公链开发 公链开发代币开发

【6.12 直播】内存泄漏怎么办?时序数据库 IoTDB 官方避坑指南“面对面”告诉你!

Apache IoTDB

华为云重磅亮相 KubeCon China 2025 ! 精彩议程一览

华为云开源

开源 云原生 华为云

“深时数字地球”新进展!科学智能助推地球科学研究范式变革

ModelWhale

科学智能 地球科学 AI4S DDE深时数字地球

详细教程!Ollama本地部署新版DeepSeek-R1,如何实现远程访问?

贝锐

内网穿透 DeepSeek R1 模型

创业,是加速“祛魅”最有效的办法

程序员郭顺发

懒懒笔记 | 课代表带你梳理【RAG课程 11&12:优化和加速你的RAG】

商汤万象开发者

AI LLM rag实战

AI实时对话开启粉丝互动新时代

腾讯云音视频

人工智能 腾讯云 实时音视频 trtc AI实时对话

从20年架构师的视角解读高性能Java架构核心知识点!

程序员高级码农

Java 程序员

BeeWorks im即时通讯软件:政企通讯首选

BeeWorks

即时通讯 IM 企业级应用

低代码“偷懒”技巧,我建议全公司学!

引迈信息

DAO模式:去中心化治理与代币激励设计

区块链软件开发推广运营

交易所开发 dapp开发 链游开发 公链开发 公链开发代币开发

鸿蒙Next仓颉语言开发实战教程:店铺详情页

幽蓝计划

拒绝停服,随时回退:MS SQL 到 ≈ 的无缝数据库双向迁移方案

tapdata

容灾备份 高可用数据库迁移 mssql迁移 sqlserver迁移 双向同步

Go版本的JetCache缓存框架终于来啦

daoshenzzg

Go 缓存 开源

大数据-07-HDFS集群 基础知识 分布式文件系统 读写原理 读流程与写流程 基本语法上传下载拷贝移动文件

武子康

大数据 hadoop mapreduce hive

C# 模式匹配全解:原理、用法与易错点

量贩潮汐·WholesaleTide

C#

ETLCloud可能遇到的问题有哪些?常见坑位解析

RestCloud

数据处理 ETL 数据集成工具 实时数据集成 离线数据集成

腾讯云TencentOS Server AI,助力荣耀打造高性能AI底座

极客天地

图解JavaScript原型:原型链及其分析 | JavaScript图解

电子尖叫食人鱼

JavaScript

一文搞懂K8s中的RBAC认证授权

不在线第一只蜗牛

Kubernetes 容器 云原生

ES Serverless 8.17王牌发布:向量检索「火力全开」,智能扩缩「秒级响应」!

阿里云大数据AI技术

大数据 运维 数据处理 Server 向量检索

甘其果:以《道德经》智慧破局生鲜零售,缔造社区水果新标杆

极客天地

跨链模式:多链互操作架构与性能扩展方案

区块链软件开发推广运营

dapp开发 链游开发 公链开发 公链开发代币开发 链游开发交易所开发

加速数字化转型:低代码平台在关键业务领域的四大高效落地场景

不在线第一只蜗牛

低代码

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