简介
V8 (v8.dev)是 Google 的开源高性能 JavaScript 和 WebAssembly 引擎,用 C++ 编写。它用于 Chrome 和 Node.js 等。它实现了 ECMAScript 和 WebAssembly,并运行在 Windows 7 或更高版本、macOS 10.12+ 以及使用 x64、IA-32、ARM 或 MIPS 处理器的 Linux 系统上。 V8 可以独立运行,也可以嵌入到任何 C++ 应用程序中。
V8是为谷歌Chrome提供动力的JavaScript引擎的名称。它使用我们的JavaScript并在使用Chrome浏览时执行它。
V8提供了JavaScript执行的运行时环境。DOM和其他Web平台API由浏览器提供。
最酷的是JavaScript引擎独不依赖于浏览器。这就推动了Node.js的兴起。早在2009年,V8就被选为Node.js引擎,随着Node.js流行的激增,V8成为了现在为大量用JavaScript编写的服务器端代码提供动力的引擎。
Node.js的生态系统是巨大的,这要归功于V8,它也为桌面应用程序提供了动力,比如Electron等项目。
其他js引擎
- Firefox 使用SpiderMonkey
SpiderMonkey是Mozilla的JavaScript和WebAssembly引擎,用于Firefox,Servo和其他各种项目。它是用C++,Rust和JavaScript编写的。你可以将它嵌入到 C++ 和 Rust 项目中,并且可以作为一个独立的 shell 运行。
- Safari 使用的是JavaScriptCore(也称为Nitro)
(https://developer.apple.com/documentation/javascriptcore)
JavaScriptCore 框架提供了从 Swift、Objective-C 和基于 C 的应用程序评估 JavaScript 程序的能力。您还可以使用 JavaScriptCore 将自定义对象插入到 JavaScript 环境中。
- Edge 之前使用的是Chakra但最近使用Chromium和V8引擎进行了重构。
所有这些引擎都实现ECMA-262标准,也称为ECMAScript,这是JavaScript使用的标准。
追求性能
V8是用C++编写的,并且不断改进。它是可移植的,可以在Mac、Windows、Linux和其他几个系统上运行。
在本次V8简介中,我们将忽略V8的实现细节:它们可以在更权威的网站(例如V8官方网站)上找到,而且它们会随着时间的推移而变化,通常会发生根本性的变化。
V8一直在发展,就像周围的其他JavaScript引擎一样,以加快Web和Node.js生态系统的速度。
在网络上,性能竞争已经持续了多年,我们(作为用户和开发人员)从这场竞争中受益匪浅,因为我们年复一年地获得更快、更优化我们的机器。
编译
JavaScript通常被认为是一种解释语言,但现代JavaScript引擎不再只是解释JavaScript,而是编译它。
自2009年SpiderMonkey JavaScript编译器被添加到Firefox 3.5中以来,这种情况一直在发生,每个人都遵循了这个想法。
JavaScript由V8内部编译,采用实时(JIT)编译来加快执行速度。
这似乎有违直觉,但自2004年谷歌地图推出以来,JavaScript已经从一种通常执行几十行代码来完成应用程序的语言演变而来,浏览器中运行着数千到数十万行代码。
我们的应用程序现在可以在浏览器中运行数小时,而不仅仅是一些表单验证规则或简单的脚本。
在这个新的世界里,编译JavaScript是非常有意义的,虽然可能需要更多时间才能准备好 JavaScript,一旦完成,它将比纯解释代码更具性能。
实际上就是采用编译之后,就类似后端语言了,先编译,然后再执行,我们把代码前期把代码编译好,在正式执行的时候,速度会有很大的提升,这样用户等待时间就更短了,体验也会更好。