JeeStudy 发表于 2020-4-27 15:33:12

什么是V8(Chrome V8)?

什么是Chrome V8?
    Chrome V8(简称 V8)是JavaScript引擎,这意味着它执行JavaScript代码。最初,JavaScript被编写为由网络浏览器执行。 V8可以在浏览器内部或外部执行JavaScript代码,从而使服务器端执行脚本成为可能。像V8(八缸)汽车发动机一样,Chrome V8快速而强大。
    V8将JavaScript代码直接转换为机器代码(机器码是CPU可以理解的语言。它是纯数字的,表示由数字组成。),以便计算机可以实际理解它,然后执行转换后的代码或编译后的代码。 V8还优化了JavaScript执行。
    V8是用C ++编写的Google开源高性能JavaScript和WebAssembly引擎。它用于Chrome和Node.js等。


    V8实现ECMAScript和WebAssembly,并在Windows 7或更高版本,macOS 10.12+和使用x64,IA-32,ARM或MIPS处理器的Linux系统上运行。 V8可以独立运行,也可以嵌入到任何C ++应用程序中。
    V8编译并执行JavaScript源代码,处理对象的内存分配,并垃圾回收不再需要的对象。V8的停产,世代相传,准确的垃圾收集器是V8性能的关键之一(V8’s stop-the-world, generational, accurate garbage collector is one of the keys to V8’s performance)。
    JavaScript通常用于浏览器中的客户端脚本编写,例如用于处理文档对象模型(DOM)对象。但是,DOM通常不是由JavaScript引擎提供,而是由浏览器提供。 V8也是如此-Google Chrome提供了DOM。但是,V8确实提供了ECMA标准中指定的所有数据类型,运算符,对象和函数。
    V8使任何C ++应用程序都能将其自己的对象和功能公开给JavaScript代码。由您决定要向JavaScript公开的对象和功能。


    V8是支持Google Chrome浏览器的JavaScript引擎的名称。这是需要我们的JavaScript并在使用Chrome浏览器时执行它的东西。
    V8提供了运行JavaScript的运行时环境。 DOM和其他Web平台API由浏览器提供。
    很棒的事情是JavaScript引擎不受托管它的浏览器的影响。这项关键功能推动了Node.js的兴起。 V8在2009年被选为为Node.js提供支持的引擎,并且随着Node.js的爆炸性增长,V8成为了现在为大量用JavaScript编写的服务器端代码提供动力的引擎。
    由于有了V8,Node.js生态系统非常庞大,V8还为桌面应用程序提供了支持,并支持Electron等项目。








编译是什么意思?
    编译是将代码从一种编程语言转换为另一种编程语言的过程。通常,编译器会将代码从较高的抽象级别转换为从诸如JavaScript之类的人类可用语言的较低抽象级别转换为机器可读的代码。 Chrome V8执行所谓的即时编译。而不是预先编译JavaScript,而是在执行代码的同时对其进行编译。


什么是沙箱?

    “沙箱”是用于执行与其他环境(包括同一台计算机上的其他环境)隔离并分区的软件的环境。沙箱是Chrome V8的一项关键功能。每个进程都经过沙盒处理,以确保JavaScript函数在其上单独运行,并且一段代码的执行不会影响任何其他代码。 (与许多沙盒企业产品不同,后者在隔离的虚拟机中打开并运行可执行文件,而V8沙盒不会降低性能。)


什么是Node.js?
    Node.js是用于执行JavaScript代码的运行时环境,它是基于Chrome V8引擎构建的。它是异步的,这意味着在启动另一个进程之前不必等待一个进程完成。像V8一样,Node.js是免费的开放源代码。与V8不同,它没有内置的沙箱。 (熟悉JavaScript的人会注意到文件扩展名为.js;但是,这纯粹是出于美观的选择,表明运行时环境的名称与JavaScript关联,并不意味着Node.js是JavaScript文件。)




其他JS引擎
    其他浏览器也有自己的JavaScript引擎:


[*]Firefox具有Spidermonkey
[*]Safari具有JavaScriptCore(也称为Nitro)
[*]Edge具有Chakra

    所有这些引擎都实现ECMA ES-262标准,也称为ECMAScript,JavaScript使用该标准。


    JavaScript通常被认为是一种解释语言,但是现代JavaScript引擎不再只是解释JavaScript,而是对其进行编译。
    自2009年将SpiderMonkey JavaScript编译器添加到Firefox 3.5以来,这种情况就发生了,每个人都遵循了这个想法。
    JavaScript由V8在内部进行实时编译(JIT),以加快执行速度。
    这似乎是违反直觉的,但是自2004年引入Google Maps以来,JavaScript已经从一种通常执行几十行代码的语言演变为完整的应用程序,该应用程序在浏览器中运行着成千上万行。
    现在,我们的应用程序可以在浏览器中运行数小时,而不仅仅是一些表单验证规则或简单的脚本。
    在这个新世界中,编译JavaScript非常有意义,因为尽管准备好JavaScript可能需要花费更多时间,但是一旦完成,它将比纯解释代码具有更高的性能。






V8 GitHub:https://github.com/v8/v8

V8 Project page: https://v8.dev/docs

举个例子(真简单-原来需要浏览器解释js脚本,现在Node来干这个活了!!!o(∩_∩)o ):
C:\Users\Angel>node -v
v12.14.0

C:\Users\Angel>copy con hello.js
console.log("hello,world");
已复制         1 个文件。


C:\Users\Angel>node hello.js
hello,world




页: [1]
查看完整版本: 什么是V8(Chrome V8)?