返回顶部
首页 > 资讯 > 前端开发 > JavaScript >带你了解JavaScript的运行原理
  • 148
分享到

带你了解JavaScript的运行原理

2024-04-02 19:04:59 148人浏览 八月长安
摘要

目录浏览器内核javascript 引擎V8 引擎了解JavaScript 是如何运行的,以及的它的运行机制,首先,我们要了解浏览器的内核: 浏览器内核 了解过的都知道:不同的浏览器

了解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/scanner

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

  • 同时会收集TurboFan优化所需要的信息(比如函数参数的类型信息,有了类型才能进行真实的运算);
  • 如果函数只调用一次,Ignition会执行解释执行ByteCode;
  • Ignition的V8官方文档:Https://v8.dev/blog/ignition-interpreter

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

  • 如果一个函数被多次调用,那么就会被标记为热点函数,那么就会经过TurboFan转换成优化的机器码,提高代码的执行性能;
  • 但是,机器码实际上也会被还原为ByteCode,这是因为如果后续执行函数的过程中,类型发生了变化(比如sum函数原来执行的是number类型,后来执行变成了string类型),之前优化的机器码并不能正确的处理运算,就会逆向的转换成字节码;
  • TurboFan的V8官方文档:https://v8.dev/blog/turbofan-jit

上面是JavaScript代码的执行过程

学习,记录,共勉!

到此这篇关于带你了解JavaScript的运行原理的文章就介绍到这了,更多相关JavaScript运行原理内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 带你了解JavaScript的运行原理

本文链接: https://lsjlt.com/news/133973.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 带你了解JavaScript的运行原理
    目录浏览器内核JavaScript 引擎V8 引擎了解JavaScript 是如何运行的,以及的它的运行机制,首先,我们要了解浏览器的内核: 浏览器内核 了解过的都知道:不同的浏览器...
    99+
    2024-04-02
  • 带你理解JavaScript 原型原型链
    目录一、原型、原型链相等关系理解二:原型、原型链的意思何在 看完这篇文章,你会发现,原型、原型链原来如此简单!  上面经典的原型链相等图,根据下文的学习,你会轻易掌握。 一...
    99+
    2024-04-02
  • 你了解JavaScript的js运行三部曲吗
    目录1.1 语法分析1.2 预编译 1.2.1 函数声明整体提升1.2.2 变量 声明提升1.2.3 imply global暗示全局变量1.2.4 预编译四部曲(预编译发...
    99+
    2024-04-02
  • 一文带你深入了解JavaScript中的原型&原型链
    目录原型 & 原型链原型prototype__proto__constructor原型链原型的原型原型 & 原型链 大家肯定都看过一些原型和原型链的总结的一个图 相...
    99+
    2023-02-13
    JavaScript原型 原型链 JavaScript原型 JavaScript原型链
  • JavaScript引擎的运行原理
    这篇文章主要讲解了“JavaScript引擎的运行原理”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JavaScript引擎的运行原理”吧!一些名词JS引擎...
    99+
    2024-04-02
  • 带你彻底理解JavaScript中的原型对象
    目录一、什么是原型1.1 函数的原型对象1.2 使用构造函数创建对象二、与原型有关的几个属性和方法2.1 prototype属性2.2 constructor属性2.3 __prot...
    99+
    2024-04-02
  • 前端 JavaScript运行原理
    目录1、什么是JavaScript引擎2、V8引擎3、运行时环境4、运行时的调用栈5、异步任务6、总结1、什么是JavaScript引擎 JavaScript引擎是一个计算机程序,它...
    99+
    2024-04-02
  • 带你深入了解Vue.$nextTick(原理浅析)
    白话一点就是说,其实这是和JS当中的事件循环是息息相关的,就是Vue不可能对每一个数据变化都做一次渲染,它会把这些变化先放在一个异步的队列当中,同时它还会对这个队列里面的操作进行去重,比如你修改了这个数据三次,它只会保留最后一次。这些变化是...
    99+
    2023-05-14
    $nextTick 前端 Vue.js
  • 一文带你了解MySQL之连接原理
    目录一、连接简介1.1 连接的本质1.2 连接过程简介1.3 内连接和外连接1.4 左外连接1.5 右外连接1.6 内连接小结二、连接的原理2.1 嵌套循环连接(Nested-Loop Join)2.2 使用索引加快连接...
    99+
    2023-05-22
    MySQL连接原理 MySQL 连接
  • JavaScript的运行原理是什么
    这篇文章将为大家详细讲解有关JavaScript的运行原理是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。扫描器源代码首先被分解成 chunk,每个 c...
    99+
    2024-04-02
  • 一文带你了解Mysql主从同步原理
    目录Mysql 主从同步原理简析1、什么是主从 2、为什么要搞主从呢? 3、如何实现主从同步呢? 4、mysql 主从同步的原理 Mysql 主从同步原理简析 在开始讲述原理的情况下...
    99+
    2024-04-02
  • Javascript的原型和原型链你了解吗
    目录一、为什么要使用原型?怎样去理解原型的出现1、对象字面量创建对象的缺点2、工厂函数3、构造函数二、使用原型三、原型概念辨析四、原型链练习总结一、为什么要使用原型?怎样去理解原型的...
    99+
    2024-04-02
  • JavaScript运行原理的示例分析
    这篇文章主要介绍JavaScript运行原理的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!JavaScript是一种基于对象的动态、弱类型脚本语言(以下简称JS),是一种解...
    99+
    2024-04-02
  • JavaScript的运行原理怎么掌握
    这篇文章主要讲解了“JavaScript的运行原理怎么掌握”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JavaScript的运行原理怎么掌握”吧!了解Ja...
    99+
    2024-04-02
  • 一篇文章带你了解C++多态的实现原理
    目录虚函数和多态多态的作用多态的一个例子构造函数和析构函数中存在多态吗?多态的实现原理虚函数表虚析构函数纯虚函数和抽象类总结虚函数和多态 虚函数: 在类的定义中,前面有 v...
    99+
    2024-04-02
  • JavaScript 引擎的运行原理是什么
    这篇文章将为大家详细讲解有关JavaScript 引擎的运行原理是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。注意:本文主要基于 Node.js 和基...
    99+
    2024-04-02
  • 一篇文章带你了解JavaScript-对象
    目录创建对象对象直接量通过new创建对象原型Object.create()属性的查询和设置继承属性访问错误删除属性检测属性序列化对象总结创建对象 对象直接量 对象直接量是由若干名/值...
    99+
    2024-04-02
  • 一篇文章带你了解JavaScript-语句
    目录表达式语句复合语句和空语句复合语句空语句声明语句varfunction条件语句ifif/elseelse ifswitch循环whiledo/whileforfor/in跳转标签...
    99+
    2024-04-02
  • 一文带你了解SpringBoot中常用注解的原理和使用
    目录@AutoConfiguration@Import@ConfigurationProperties@AutoConfiguration 读取所有jar包下的 /META-INF/...
    99+
    2022-11-13
    SpringBoot常用注解原理 SpringBoot常用注解使用 SpringBoot常用注解 SpringBoot注解
  • 一篇文章带你了解JavaScript的解构赋值
    目录1. 什么是解构赋值 ?2. 数组的解构赋值2.1) 数组解构赋值的默认值2.2) 数组解构赋值的应用类数组中的应用交换变量的值3. 对象的解构赋值...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作