文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

V8引擎是怎样执行JavaScript代码

2024-04-02 19:55

关注

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代码的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注编程网行业资讯频道,感谢各位的阅读!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-前端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯