您好,欢迎访问一九零五行业门户网

带你了解JavaScript的运行原理

本篇文章给大家带来了关于javascript的相关知识,主要介绍了关于javascript的运行原理,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下。
【相关推荐:javascript视频教程、web前端】
了解javascript 是如何运行的,以及的它的运行机制,首先,我们要了解浏览器的内核:
浏览器内核了解过的都知道:不同的浏览器是由不同的内核组成,那么有哪些内核以及我们常用的浏览器都使用了那些内核:
gecko:早期被netscape和mozilla firefox浏览器浏览器使用;trident:微软开发,被ie4~ie11浏览器使用,但是edge浏览器已经转向blink;webkit:苹果基于khtml开发、开源的,用于safari,google chrome之前也在使用;blink:是webkit的一个分支,google开发,目前应用于google chrome、edge、opera等;所谓浏览器内核,指的是浏览器的排版引擎,即浏览器引擎。引擎的工作执行流程如下:
但是在这个执行过程中,html解析的时候遇到了javascript标签,应该怎么办呢?
会停止解析html,而去加载和执行javascript代码;
当然,为什么不直接异步去加载执行javascript代码,而要在这里停止掉呢?
所以浏览器希望将html解析的dom和javascript操作之后的dom放到一起来生成最终的dom树,而不是频繁的去生成新的dom树;
那么,javascript代码由谁来执行呢?
答案:javascript 引擎
javascript 引擎为什么需要javascript引擎呢?
事实上我们编写的javascript无论你交给浏览器或者node执行,最后都是需要被cpu执行的;但是cpu只认识自己的指令集,实际上是机器语言,才能被cpu所执行;所以我们需要javascript引擎帮助我们将javascript代码翻译成cpu指令来执行;常见的javascript 引擎有哪些呢?
spidermonkey:第一款javascript引擎,由brendan eich开发(也就是javascript作者);chakra:微软开发,用于ie浏览器;javascriptcore:webkit中的javascript引擎,apple公司开发;v8:google开发的强大javascript引擎,也帮助chrome从众多浏览器中脱颖而出;(v8 是一个强大的javascript 引擎)v8 引擎v8是用c ++编写的google开源高性能javascript和webassembly引擎,它用于chrome和node.js等。它实现ecmascript和webassembly,并在windows 7或更高版本,macos 10.12+和使用x64,ia-32,arm或mips处理器的linux系统上运行。v8可以独立运行,也可以嵌入到任何c ++应用程序中。v8 引擎执行javascript 代码的原理:
parse模块会将javascript代码转换成ast(抽象语法树),这是因为解释器并不直接认识- javascript代码;
 如果函数没有被调用,那么是不会被转换成ast的;parse的v8官方文档:https://v8.dev/blog/scannerignition是一个解释器,会将ast转换成bytecode(字节码)
同时会收集turbofan优化所需要的信息(比如函数参数的类型信息,有了类型才能进行真实的运算);如果函数只调用一次,ignition会执行解释执行bytecode;ignition的v8官方文档:https://v8.dev/blog/ignition-interpreterturbofan是一个编译器,可以将字节码编译为cpu可以直接执行的机器码;
如果一个函数被多次调用,那么就会被标记为热点函数,那么就会经过turbofan转换成优化的机器码,提高代码的执行性能;但是,机器码实际上也会被还原为bytecode,这是因为如果后续执行函数的过程中,类型发生了变化(比如sum函数原来执行的是number类型,后来执行变成了string类型),之前优化的机器码并不能正确的处理运算,就会逆向的转换成字节码;turbofan的v8官方文档:https://v8.dev/blog/turbofan-jit上面是javascript代码的执行过程
【相关推荐:javascript视频教程、web前端】
以上就是带你了解javascript的运行原理的详细内容。
其它类似信息

推荐信息