javascript的工作原理,javascript的运行方式是什么

  javascript的工作原理,javascript的运行方式是什么

  这篇文章给你带来了一些关于javascript的知识,主要介绍了JavaScript的运行原理。这篇文章给你做了非常详细的介绍,对你的学习或者工作有一定的参考价值。有需要的朋友可以参考一下。

  【相关推荐:javascript视频教程,web前端】

  要了解JavaScript的工作原理和工作方式,首先我们需要了解浏览器的内核:

  

浏览器内核

  了解过的人都知道不同的浏览器是由不同的内核组成的,那么哪些内核以及我们常用的浏览器使用的是那些内核呢:

  Gecko:早期由Netscape和Mozilla Firefox浏览器使用;Trident:由微软开发,IE4~IE11浏览器使用,但Edge浏览器已经转向闪烁;Webkit:苹果基于KHTML开发,开源,用于Safari。之前也用过谷歌ChromeBlink:是Webkit的一个分支,由Google开发,目前用于Google Chrome、Edge、Opera等。所谓浏览器内核,是指浏览器的排版引擎,也就是浏览器引擎。引擎的工作执行流程如下:

  但是,在这个执行过程中,在HTML解析过程中遇到了JavaScript标记。我该怎么办?

  将停止解析HTML,转而加载并执行JavaScript代码;

  当然,为什么不只是异步加载和执行JavaScript代码,而是就此打住呢?

  所以浏览器希望将HTML解析的DOM和JavaScript操作后的DOM结合起来生成最终的DOM树,而不是频繁生成新的DOM树;

  那么,谁来执行JavaScript代码呢?

  答案:JavaScript引擎

  

JavaScript 引擎

  为什么需要JavaScript引擎?

  其实我们写的JavaScript,不管你交给浏览器还是节点执行,最终都需要CPU来执行;但是CPU只知道自己的指令集,其实就是机器语言,这样才能被CPU执行;所以我们需要JavaScript引擎来帮助我们把JavaScript代码翻译成CPU指令来执行;常见的JavaScript引擎有哪些?

  SpiderMonkey:第一个JavaScript引擎,由Brendan Eich(即JavaScript作者)开发;Chakra:微软为IE浏览器开发的;JavaScript核心:WebKit中的JavaScript引擎,由苹果开发;V8:谷歌开发的强大JavaScript引擎也帮助Chrome从众多浏览器中脱颖而出;(V8是一个强大的JavaScript引擎)

V8 引擎

   V8是Google用c编写的开源高性能JavaScript和WebAssembly引擎,用于Chrome、Node.js等。它实现了ECMAScript和WebAssembly,可以在使用x64、IA-32、ARM或MIPS处理器的Windows 7或更高版本、macOS 10.12和Linux系统上运行。V8可以独立运行,也可以嵌入到任何C应用中。V8引擎执行JavaScript代码的原理:

  Parse模块会把JavaScript代码转换成AST(抽象语法树),因为解释器并不直接知道——JavaScript代码;

  如果函数没有被调用,就不会被转换成AST解析V8官方文档:https://v8.dev/blog/scannerIgnition是一个解释器,可以把AST转换成字节码。

  同时会收集涡扇优化所需的信息(比如函数参数的类型信息,有了类型才能进行真正的操作);如果函数只被调用一次,Ignition将执行字节码;V8点火官方文档:https://v8.dev/blog/ignition-interpreterTurboFan是编译器,可以把字节码编译成CPU可以直接执行的机器码;

  如果一个函数被多次调用,就会被标记为热函数,然后被涡扇转化为优化的机器码,提高代码的执行性能。然而,机器码实际上会被恢复成字节码。这是因为如果在函数的后续执行过程中,类型发生了变化(比如sum函数本来是作为数字类型执行的,后来变成了字符串类型执行),那么之前优化的机器码就不能正确处理操作了,所以会逆向转换成字节码;涡扇V8官方文档:https://v8.dev/blog/turbofan-jit以上是JavaScript代码的执行过程。

  【相关推荐:javascript视频教程,web前端】以上是带你了解JavaScript运行原理的详细内容。更多请关注我们的其他相关文章!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: