我的编程空间,编程开发者的网络收藏夹
学习永远不晚

javascript依赖的支持是什么

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

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

javascript依赖的支持是什么

这篇“javascript依赖的支持是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“javascript依赖的支持是什么”文章吧。

javascript依赖于底层javascript引擎的支持。javascript运行在浏览器,主要依靠浏览器的js引擎解释执行js代码;JavaScript引擎是一个专门处理JavaScript脚本的虚拟机,一般会附带在网页浏览器之中,用于解释和执行js脚本。

本教程操作环境:windows7系统、javascript1.8.5版、Dell G3电脑。

javascript依赖于底层js引擎的支持。

javascript运行在浏览器,主要依靠浏览器的js引擎解释执行js代码。其他带有js引擎的软件也可以运行js,但是一般js和网页关系较大,所以一般在浏览器当中运行。

javascript引擎

JavaScript引擎是一个专门处理JavaScript脚本的虚拟机,一般会附带在网页浏览器之中,用于解释和执行js脚本。

著名的js引擎:

    Mozilla:SpiderMonkey引擎,世界第一款JavaScript引擎,有C/C++编写,用于Mozilla Firefox 1.0~3.0版本

    Google:V8引擎,由C++/汇编语言编写,用于chrome浏览器

    微软:Chakra(查克拉,笑)引擎,用于Internet Explorer 9的32位版本

浏览器内核和JS引擎的关系

以webkit为例:

javascript依赖的支持是什么

V8引擎

1、V8引擎的原理

V8引擎是用C++编写的Google开源高性能的JavaScript和WebAssembly引擎,用于Chrome和Node.js等。

它能够实现ECMAScript和WebAssembly,并在Windows7或者更高版本,macOS 10.12+和使用x64,IA-32,ARM或MIPS处理器的Linux系统上运行。

V8引擎可以独立运行,也可以嵌入到任何C++应用程序中运行。例如,可以将V8引擎中使用Node.js看做是将将V8引擎嵌入到了应用程序中,那么Node.js就具备了执行JavaScript代码的能力。

原理图:

javascript依赖的支持是什么

①、Parse模块会将JavaScript代码转换成AST,这是因为解释器并不直接认识JavaScript代码。如果函数没有被调用,是不会被转换为AST的

②、Ignition是一个解释器,会将AST转换为ByteCode。同时会收集TurboFan优化所需的信息(比如函数参数的类型信息,有了类型才能真实的运算)。如果函数只调用一次,Ignition将AST转换为ByteCode

③、为什么最后转化为字节码,而不是直接转化为机器码?

因为JS代码在什么样的环境下执行并不固定,有可能是使用Windows环境、或者是mac环境、或者是Linux环境的浏览器上,也可能是在Node.js中,环境不固定,不同环境中就会有不同的CPU,不同的CPU拥有不同的CPU架构,不同的架构能够执行的机器指令是不一样的。

javascript依赖的支持是什么

转化为V8引擎规定好的字节码,不管在什么环境下都可以执行,是跨平台的,最后V8引擎会把字节码转化汇编指令,再转化为不同环境对应的CPU指令。

但是每次都走这套流程,还是不够方便。比如有一个函数是重复使用的,但是使用前面一套流程,每次使用这个函数的时候,都需要被转化为字节码,然后再变为CPU指令,性能比较低,如果可以直接将这个函数变为机器指令保存下来,使用这个函数的时候,直接运行机器指令,性能比较高,但是如果这个函数只运行一次,就没有必要转化变为机器代码保存下来,会浪费空间。

④、使用TurboFan库,是一个编译器,会将字节码编译为CPU可以直接执行的机器码,他可以利用ignition来收集函数的执行信息,了解到哪些函数执行次数比较多,会将这类函数标记为hot ,热函数,然后就会将这个函数转换为优化之后的机器指令,以后再使用这个热函数的时候,不需要上面繁琐的过程,直接执行机器指令就行。

但是实际上机器码也会被还原为ByteCode,这是因为如果后续执行函数的过程中,类型发生改变,之前优化的机器码并不能正确地处理运算,就会逆向的转换为字节码。

⑤、Deoptimization: 比如有一个函数

function  sum(num1,num2){
   num1+num2
}

调用sum函数

sum(20,30)
sum(28,30)

如果传入数字,调用sum函数,需要做的工作就是对两个数字进行相加,执行的机器指令永远是对这两个数字进行相加.
一旦改变传入值的类型,如果变成字符串,那么这个函数的意思就是两个字符串拼接。

sum("aaa","bbb")

这两种类型的传入值执行“+”操作对应的机器指令是不同的,JavaScript是不会对传入值的类型做检测的,那么还是使用数字相加的机器指令,这次函数调用的结果是不能够使用的。

但是V8引擎中提供了一种解决办法Deoptimization过程,这个过程是,一旦发现在执行机器指令时候,执行的操作不一样的时候,Deoptimization会反向优化,又转化为字节码,执行后续操作。

2、V8引擎的解析图

javascript依赖的支持是什么

V8执行的细节:

①、Blink将源码交给V8引擎,Stream获取到源码并且进行编码转换

②、scanner会进行词法分析,词法分析之后会将代码转换为成tokens

③、tokens会被转换为AST树,经过Parser和PreParser:

Parser就是直接将tokens转换为AST树架构;

PreParser预解析,为什么会需要预解析?

1)如上图中的函数outer(),内部有一个函数inner(),但是并没有任何调用inner()的代码,那么就意味着并不是所有的JavaScript代码,都是一开始就被执行。对所有的JavaScript代码进行解析,必定会影响网页的运行效率。

2)V8引擎实现了Lazy Parsing(延迟解析)的方案,作用是将不必要的函数进行预解析,我只需要知道有这么个函数就行,也就是只解析暂时需要的内容,对函数的全量解析在函数被调用的时候才会执行。

3)例如上图中函数outer中的inner函数,它就是会执行预解析。

④、生成AST树之后,会被Ignition转成字节码,之后的过程就是代码的执行过程。

以上就是关于“javascript依赖的支持是什么”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注编程网行业资讯频道。

免责声明:

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

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

javascript依赖的支持是什么

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

EWeb4J的pom依赖是什么

这篇文章主要介绍“EWeb4J的pom依赖是什么”,在日常操作中,相信很多人在EWeb4J的pom依赖是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”EWeb4J的pom依赖是什么”的疑惑有所帮助!接下来
2023-06-17

linux依赖包指的是什么

这篇文章主要讲解了“linux依赖包指的是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“linux依赖包指的是什么”吧!linux依赖包是指“库文件”,大部
2023-03-24

Maven依赖关系是什么

这篇文章主要介绍“Maven依赖关系是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Maven依赖关系是什么”文章能帮助大家解决问题。1.何为依赖?我们在平时的项目开发中也是同理,你需要依赖一些
2023-06-26

php依赖注入指的是什么

本篇内容介绍了“php依赖注入指的是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!在PHP中,依赖注入是指对类的依赖通过构造器完成自动注
2023-06-29

Maven的传递性依赖是什么

Maven的传递性依赖指的是当一个项目依赖于另一个项目时,如果被依赖的项目又依赖于其他项目,那么这些依赖也会被自动引入到当前项目中。这种传递性依赖使得开发者无需手动管理所有依赖项,而是通过声明直接依赖的项目,Maven会自动处理所有的传递性
Maven的传递性依赖是什么
2024-04-09

Java依赖注入的方式是什么

这篇“Java依赖注入的方式是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Java依赖注入的方式是什么”文章吧。Spr
2023-07-02

php依赖注入的原理是什么

PHP依赖注入的原理是通过将一个对象的依赖关系通过构造函数、方法参数或者setter方法的方式进行传递。依赖注入的目的是解耦,使得代码更加灵活、可测试和可维护。具体来说,依赖注入原理包括以下几个步骤:1. 定义依赖关系:首先需要定义需要注入
2023-09-21

laravel依赖注入的原理是什么

Laravel的依赖注入原理是基于反射的。依赖注入是一种设计模式,它的目的是通过将依赖对象的实例传递给需要它们的对象,来解耦和提高代码的可测试性和可维护性。在Laravel中,依赖注入是通过服务容器实现的。服务容器是一个用于管理类的实例的
2023-10-22

SpringBoot依赖管理的特性是什么

这篇文章主要讲解了“SpringBoot依赖管理的特性是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“SpringBoot依赖管理的特性是什么”吧!1.父依赖parent介绍pom文件中
2023-07-02

Spring的依赖注入机制是什么

Spring的依赖注入(Dependency Injection,DI)机制是一种设计模式,用于实现对象之间的解耦和组件的松耦合。它通过将对象的依赖关系从代码中移除,而是将它们定义在配置文件中,由Spring容器负责管理和注入所需的依赖对象
2023-09-17

angular依赖注入的原理是什么

Angular的依赖注入(Dependency Injection)是一种设计模式,用于管理组件之间的依赖关系。它的原理是通过将组件所需的依赖项作为参数传递给组件的构造函数来实现。具体来说,Angular使用一个注入器(Injector)来
2023-09-21

laravel中依赖注入指的是什么

这篇文章给大家分享的是有关laravel中依赖注入指的是什么的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。laravel依赖注入一词是由Martin Fowler提出的术语,它是将组件注入到应用程序中的一种行为,
2023-06-22

spring依赖注入的原理是什么

Spring依赖注入的原理是通过IOC(Inversion of Control)容器来实现的。IOC容器是Spring框架的核心,它负责创建对象、管理对象的生命周期以及解决对象之间的依赖关系。在IOC容器中,对象的依赖关系不再由对象自身管
2023-09-29

java依赖倒置的作用是什么

Java依赖倒置(Dependency Inversion)的作用是减少模块之间的耦合性,提高代码的可维护性和可扩展性。传统的依赖关系是指高层模块依赖于底层模块,而依赖倒置原则则是要求高层模块和底层模块都应该依赖于抽象而不是具体的实现细节
2023-10-27

Spark中的窄依赖和宽依赖有什么区别

在Spark中,窄依赖和宽依赖是指不同的RDD之间的依赖关系。它们的区别在于如何执行操作和进行数据分区。窄依赖(Narrow Dependency):窄依赖指的是每个父RDD分区只被子RDD的一个分区所使用。具体来说,当一个RDD的每个分
Spark中的窄依赖和宽依赖有什么区别
2024-03-04

laravel依赖注入原理是什么

Laravel的依赖注入原理是通过容器(Container)来实现的。容器是一个管理依赖关系的工具,它可以创建和解析对象,并自动解决对象之间的依赖关系。在Laravel中,我们可以通过构造函数、方法参数、属性注入等方式来声明依赖关系。当需要
2023-09-06

python3 依赖倒置原则是什么

本篇内容介绍了“python3 依赖倒置原则是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!场景针对园区停车信息,需要对各个公司提供的停
2023-06-20

编程热搜

目录