iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >javascript依赖的支持是什么
  • 668
分享到

javascript依赖的支持是什么

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

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

这篇“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依赖的支持是什么”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注编程网JavaScript频道。

--结束END--

本文标题: javascript依赖的支持是什么

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

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

本篇文章演示代码以及资料文档资料下载

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

下载Word文档
猜你喜欢
  • javascript依赖的支持是什么
    这篇“javascript依赖的支持是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“j...
    99+
    2024-04-02
  • JavaScript中依赖注入的原理是什么
    这期内容当中小编将会给大家带来有关JavaScript中依赖注入的原理是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。如下需求:假设已经有定义好的服务模块Key-Va...
    99+
    2024-04-02
  • EWeb4J的pom依赖是什么
    这篇文章主要介绍“EWeb4J的pom依赖是什么”,在日常操作中,相信很多人在EWeb4J的pom依赖是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”EWeb4J的pom依赖是什么”的疑惑有所帮助!接下来...
    99+
    2023-06-17
  • npm目前支持哪几类依赖包管理
    这篇文章主要介绍npm目前支持哪几类依赖包管理,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!npm 目前支持以下几类依赖包管理:dependenciesdevDependencies...
    99+
    2024-04-02
  • linux依赖包指的是什么
    这篇文章主要讲解了“linux依赖包指的是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“linux依赖包指的是什么”吧! l...
    99+
    2023-03-24
    linux
  • Oozie支持哪些类型的作业和依赖关系
    Oozie支持以下类型的作业和依赖关系: MapReduce作业 Pig作业 Hive作业 Sqoop作业 Java程序作业 Sh...
    99+
    2024-04-02
  • Maven依赖关系是什么
    这篇文章主要介绍“Maven依赖关系是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Maven依赖关系是什么”文章能帮助大家解决问题。1.何为依赖?我们在平时的项目开发中也是同理,你需要依赖一些...
    99+
    2023-06-26
  • php依赖注入指的是什么
    本篇内容介绍了“php依赖注入指的是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!在PHP中,依赖注入是指对类的依赖通过构造器完成自动注...
    99+
    2023-06-29
  • Maven的传递性依赖是什么
    Maven的传递性依赖指的是当一个项目依赖于另一个项目时,如果被依赖的项目又依赖于其他项目,那么这些依赖也会被自动引入到当前项目中。...
    99+
    2024-04-09
    Maven
  • laravel依赖注入的原理是什么
    Laravel的依赖注入原理是基于反射的。依赖注入是一种设计模式,它的目的是通过将依赖对象的实例传递给需要它们的对象,来解耦和提高代...
    99+
    2023-10-22
    laravel
  • Java依赖注入的方式是什么
    这篇“Java依赖注入的方式是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Java依赖注入的方式是什么”文章吧。Spr...
    99+
    2023-07-02
  • Spark中的窄依赖和宽依赖有什么区别
    在Spark中,窄依赖和宽依赖是指不同的RDD之间的依赖关系。它们的区别在于如何执行操作和进行数据分区。 窄依赖(Narrow ...
    99+
    2024-03-04
    Spark
  • SpringBoot依赖管理的特性是什么
    这篇文章主要讲解了“SpringBoot依赖管理的特性是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“SpringBoot依赖管理的特性是什么”吧!1.父依赖parent介绍pom文件中...
    99+
    2023-07-02
  • Spring的依赖注入机制是什么
    Spring的依赖注入(Dependency Injection,DI)机制是一种设计模式,用于实现对象之间的解耦和组件的松耦合。它...
    99+
    2023-09-17
    Spring
  • angular依赖注入的原理是什么
    Angular的依赖注入(Dependency Injection)是一种设计模式,用于管理组件之间的依赖关系。它的原理是通过将组件...
    99+
    2023-09-21
    angular
  • spring依赖注入的原理是什么
    Spring依赖注入的原理是通过IOC(Inversion of Control)容器来实现的。IOC容器是Spring框架的核心,...
    99+
    2023-09-29
    spring
  • java依赖倒置的作用是什么
    Java依赖倒置(Dependency Inversion)的作用是减少模块之间的耦合性,提高代码的可维护性和可扩展性。 传统的依赖...
    99+
    2023-10-27
    java
  • laravel中依赖注入指的是什么
    这篇文章给大家分享的是有关laravel中依赖注入指的是什么的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。laravel依赖注入一词是由Martin Fowler提出的术语,它是将组件注入到应用程序中的一种行为,...
    99+
    2023-06-22
  • php依赖注入的原理是什么
    PHP依赖注入的原理是通过将一个对象的依赖关系通过构造函数、方法参数或者setter方法的方式进行传递。依赖注入的目的是解耦,使得代...
    99+
    2023-09-21
    php
  • python3 依赖倒置原则是什么
    本篇内容介绍了“python3 依赖倒置原则是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!场景针对园区停车信息,需要对各个公司提供的停...
    99+
    2023-06-20
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作