V8引擎是怎样执行JavaScript代码

发布时间:2021-09-30 14:15:24 作者:柒染
来源:亿速云 阅读:133

V8引擎是怎样执行JavaScript代码,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

 题目中说到的V8引擎,大家自然会联想到Node.js。

我们先看一下官方对Node.js的定义:

Node.js是一个基于V8 JavaScript引擎的JavaScript运行时环境

但是这句话对于我们很多同学来说,非常笼统,比如先抛出这样几个问题:

上面这些问题,同学们理解的笼统没关系,这篇文章会依次揭晓答案~

我们先来吧这些概念搞清楚,再去看Node到底是什么?为什么大前端需要它。

JavaScript无处不在

Stack Overflow的创立者之一的 Jeff Atwood 在前些年提出了著名的Atwood定律:

在发明之处,JavaScript的目的是应用于在浏览器执行简单的脚本任务,对浏览器以及其中的DOM进行各种操作,所以JavaScript的应用场景非常受限。

但是随着Node的出现,Atwood定律已经越来越多的被证实是正确的。

但是为了可以理解Node.js是如何帮助我们做到这一点的,我们必须了解JavaScript是如何被运行的。

现在我们想一下,JavaScript代码在浏览器中是如何被执行的呢?

浏览器内核

不同的浏览器有不同的内核组成:

事实上,我们经常说的浏览器内核指的是浏览器的排版引擎:

排版引擎(layout engine),也称为浏览器引擎(browser engine)、页面渲染引擎(rendering  engine)或样板引擎。

介绍完浏览器的排版引擎之后,来介绍下浏览器的渲染引擎的工作过程。

渲染引擎工作的过程

V8引擎是怎样执行JavaScript代码

浏览器渲染引擎的工作过程

如上图:

因为JavaScript属于高级语言(Python、C++、Java),所以JavaScript引擎会先把它转换成汇编语言,再把汇编语言转换成机器语言(二进制010101),最后被CPU所执行。

JavaScript引擎

为什么需要JavaScript引擎呢?

比较常见的JavaScript引擎有哪些呢?

上面我们介绍了JavaScript引擎和浏览器内核,但有的同学就该问了它们俩之间有什么联系呢和不同呢?

下面,我以WebKit内核为例。

WebKit内核

事实上WebKit内核由两部分组成的:

V8引擎是怎样执行JavaScript代码

另外一个强大的JavaScript引擎就是V8引擎。

V8引擎

我们来看一下官方对V8引擎的定义:

(译:V8可以运行JavaScript和WebAssembly引擎编译的汇编语言等)

ARM或MIPS处理器的Linux系统上运行;

V8引擎的工作原理

图解V8引擎的工作原理


V8引擎是怎样执行JavaScript代码

图解V8引擎的工作原理

其中的**Parse(解析器)、lgnition(解释器)、TurboFan(优化编译器)**都是V8引擎的内置模块

假如有这样一段JavaScript源代码:

console.log("hello world");  function sum(num1, num2) {  return num1 + num2; }

Parse模块会将JavaScript代码转换成AST(抽象语法树),这是因为解释器并不直接认识JavaScript代码;

Ignition是一个解释器,会将AST转换成ByteCode(字节码);

TurboFan是一个编译器,可以将字节码编译为CPU可以直接执行的机器码;

上面是JavaScript代码的执行过程,事实上V8的内存回收也是其强大的另外一个原因;

编程语言会大体分为两大类:

上述情况对应的是JavaScript解释性语言的大体执行流程,但编译性语言往往不是,比如C++,例如系统内的某些应用程序用C++编写的,它们在执行的时候会直接转化为机器语言(二进制格式010101),并交给CPU统一执行,这样的运行效率自然相对较高了些。

但V8也对解释性的编程语言做了一个优化,就是上文提到的TurboFan优化编译器,如果一个JavaScript函数被多次调用,那么它就会经过TurboFan抓成优化后的机器码,交由CPU执行,提高代码的执行性能。

回顾:Node.js是什么

回顾:官方对Node.js的定义:

Node.js是一个基于V8 JavaScript引擎的JavaScript运行时环境。

也就是说Node.js基于V8引擎来执行JavaScript的代码,但是不仅仅只有V8引擎:

来执行JavaScript代码;

操作;

PS:在后面的文章我们,我会带领大家逐步探索Node.js的世界...

浏览器和Node.js架构区别

简单对比一下Node.js和浏览器架构的差异:

V8引擎是怎样执行JavaScript代码

浏览器和Node.js架构区别

在Chrome浏览器中

V8引擎;

Node.js架构

我们来看一个单独的Node.js的架构图:

具体的内部代码执行流程,我会在后面的文章中专门讲解Node.js中的事件队列机制和异步IO的原理;

V8引擎是怎样执行JavaScript代码

Node.js架构图

Node.js的应用场景

Node.js的快速发展也让企业对Node.js技术越来越重视。

那么它都有哪些实际的应用场景呢?

Node.js的REPL

什么是REPL呢?感觉挺高大上

事实上,我们浏览器的console就可以看成一个REPL。

Node也给我们提供了一个REPL环境,我们可以在其中演练简单的代码。

V8引擎是怎样执行JavaScript代码

浏览器的REPL

V8引擎是怎样执行JavaScript代码

Node的REPL

看完上述内容,你们掌握V8引擎是怎样执行JavaScript代码的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注亿速云行业资讯频道,感谢各位的阅读!

推荐阅读:
  1. JavaScript 引擎 V8 执行流程概述
  2. JavaScript深入浅出第4课:V8引擎是如何工作的?

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

v8 javascript

上一篇:5个开发桌面应用程序的JavaScript框架是怎样的

下一篇:开源适用于JavaScript的Excel解析器和生成器是怎样的

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》