本文通过介绍JavaScript引擎的的相关概念和工作原理,帮助您编写出更加流畅且高质量的JavaScript代码。
[[349317]]
(资料图)
【清一色.com快译】朋友,您在编译和执行代码时,是否曾考虑过JavaScript背后的引擎?作为一名程序员,我建议您通过本文来了解JavaScript引擎的工作原理。这将有益于您编写出更加流畅且高质量的JavaScript代码。
什么是JavaScript引擎?
JavaScript引擎遵循的是ECMAScript标准。此类标准定义了JavaScript引擎的工作机制和所有功能。因此,JavaScript引擎是一个程序,它可以帮助您将JavaScript代码转换为较低级别的机器代码。
总的说来,诸如JavaScript和FORTRAN等高级语言都是从机器语言中抽象出来的。与C或C++相比,JavaScript的抽象程度更高。而C和C++更接近于硬件,因此运行效率也会更高一些。
编译(compilation)与解释(interpretation)
编程语言通常通过编译(compilation)和解释(interpretation)来实现代码的功能。其中,
编译器可以被定义为协助转换代码的程序。它可以将由任何编程语言(源语言)所编写的代码,转换为另一种目标语言的代码。例如:将源代码从高级编程语言转换为低级编程语言(即机器语言),来执行既定的任务。而解释器则是通过逐行、逐条指令地分析源代码,在无需第三方参与的情况下,直接在目标机器上执行相应机器代码。尽管编译和解释是完成编程语言的两个方面,但是由于使用解释的大多数系统都需要由编译器完成的翻译工作,因此在某些情况下两者之间是存在交集的。就JavaScript而言,其技术上的编译,也属于解释类别。也就是说,JavaScript编译器在运行的时候,其执行的就是Just-In-Time(JIT)编译。在此,JavaScript引擎恰好可以连接到浏览器和Node JS之类的Web服务器,以便用户具有运行时(run-time)编译、以及执行JavaScript代码的权限。
JavaScript引擎剖析
ECMA脚本通过指定浏览器实施JavaScript的过程,以便程序在每个单一浏览器中都能运行一致。当然,每个浏览器都为提交过的JavaScript代码提供了一个运行所需的JavaScript引擎。例如:Netscape浏览器使用的是Spider Monkey JavaScript引擎。该引擎被定义为带有零优化(zero optimizations)的基本解释器。它虽然可以运行提交过来的JavaScript代码,但是耗时较长。
工作原理
JavaScript引擎工作的基本工作流程是:获取JavaScript源代码,然后使用易于CPU理解的二进制指令(机器代码)进行编译。
JavaScript引擎主要由基线编译器组成,该编译器以中间表示(intermediate representation,IR)的形式编译代码。换言之,它被字节码所调用,然后将字节码提供给解释器。解释器使用字节代码,将代码转换为机器代码,以适合在硬件上运行。其实,这与Java的工作原理非常相似,只不过字节代码的生成是由程序员完成的,而字节代码则可以被普遍共享。
虽然基线编译器的使命是尽可能快地执行代码编译,但是它还是会生成未经优化的字节码。在解释器中,这些字节码会导致应用程序的速度变慢。为此,Mozilla Firefox浏览器将Spider Monkey JavaScript进行了嵌入,以优化并提高机器代码的效率。例如:JavaScript引擎会直观地了解到变量的数据类型,进而更好地生成少量的机器代码。
此外,JavaScript引擎还可以根据代码的执行情况,通过收集和分析数据,发现代码运行缓慢的原因,进而给出优化并替换的建议。
知名的JavaScript引擎
除了前面介绍过Firefox正在使用的Spider Monkey引擎,还有Internet Explorer正在使用的Chakra引擎,而Google使用的是V8引擎。虽然它们用到了不同的编译器,但是它们所遵循的优化结构是相似的。
Google的V8:
由Lark Bak创建的The Chromium项目开发了开源的Javascript引擎。该项目为Google Chrome和Chromium网络浏览器提供了开发服务。Chrome的V8引擎几乎是在Chrome的首个版本诞生(2008年9月2日)的同时,就应运而生了。V8能够很好地兼容Node.js和MongoDB等服务器端技术。
由于V8带有Ignition解释器,因此它能够通过低级字节码完成解释与执行。尽管这些低级字节码比起机器码来说既小又慢,但它们需要编译的时间会更少。我们可以使用Full-Codegen编译器,来生成未优化的代码。该编译器的运行速度比其他编译器要快一些。JIT编译器—Turbofan不但可以编译代码,并且能够密切注意代码是否会在整个JavaScript执行的过程中被多次用到。也就是说,它的垃圾收集器会观察各种对象中不再引用到的数据。而且这种数据的收集工作是由收集器来完成的。值得一提的是,在执行垃圾回收的周期内,V8引擎将会自动停止程序的运行。
CHAKRA:
由Microsoft开发的Chakra JavaScript引擎,被用在了Microsoft Edge Web浏览器中。它是Internet Explorer中Jscript引擎的一个分支。我们可以简单地理解为:Chakra提高了Internet Explorer中JavaScript的执行质量。由于是用新的JavaScript编译器组成,因此Chakra可以帮助用户将JavaScript代码编译成为高级机器代码。通过提供全新的解释器,Chakra不但能够在传统的网页上执行脚本,而且能够改进JavaScript的运行时和各种库。
SPIDER MONKEY:
由Netscape Communications的Brendan Eich使用C和C++语言编写的Spider Monkey,最终被发布成为了开源的JavaScript引擎。目前,它被用在包括Firefox在内的许多享有Mozilla公共许可证(2.0版)的产品中。它将类型推断(type inference)与JIT编译器—Jaegermonkey相连接,以生成有效的代码。
在结构上,Spider Monkey是由一个解释器、几个JIT编译器、一个反编译器、以及一个垃圾收集器所组成。
RHINO:
由Mozilla Foundation管理的Rhino JavaScript引擎,是一款完全由Java编写的开源软件。它同样可以被使用在Mozilla Firefox中。
JavaScript运行时
与其他编程语言不同的是,JavaScript是一种单线程的语言运行时(language runtime),且只能一次性执行并完成程序代码。由于代码是按照顺序被执行的,因此那些需要花费较长时间的代码,可能会阻塞后续有待执行的其他代码。例如:当您在浏览器(如:Google Chrome)上打开某个网站时,它会调用JavaScript的一个执行线程,用来处理诸如滚动网页,在网页上打印部分内容,侦听DOM事件,以及执行某项操作等。然而,如果JavaScript一旦停止执行,浏览器就会自动停止所有各项操作。这就意味着浏览器在完成某项任务之前,并不会响应其他的任何内容。
根据概念,JavaScript运行时是指JavaScript代码所处的环境或条件。因此,当JavaScript在Google Chrome上执行时,JavaScript运行时便是v8;如果在Mozilla上,它就是Spider Monkey;如果在IE上,则为Chakra。
JavaScript运行时的API提供了一种执行桌面与服务器端应用的方法。由于这些API在Windows 10和任何版本的Windows操作系统上可用,因此Windows操作系统可以通过使用Chakra的相关标准,向应用程序添加不同的脚本功能。当然,目标系统上也需要安装好Internet Explorer 11。
内联缓存(Inline Caching)
内联缓存的概念源于经验观察。也就是说,通过观察并记住以前直接在调用站点处那些相同方法的查询结果,来加快运行时方法的绑定速度,并提高查找的性能。同时,为了简化此过程,我们可以为调用站点分配不同的状态。例如:将最初的站点分配为“未初始化(uninitialized)”状态。那么,语言运行时到达未初始化的特定调用站点时,将执行动态查找,并将结果存储到调用站点中,同时将其状态更改为“单态(monomorphic)”。后续,如果语言运行时再次到达同一调用站点时,它会从现有的存储中进行检索,并直接予以调用,而无需再次执行任何其他的查找。此外,为了解决不同类型的对象可能出现在同一调用站点的可能性,语言运行时还必须在代码中插入保护条件(guard conditions)。
至此,希望您已经对JavaScript引擎的相关概念和工作原理有所了解。希望您能更好地将其运用到项目编程中。
原文标题:How JavaScript Engine Works?,作者:Vyom Srivastava
【清一色译稿,合作站点转载请注明原文译者和出处为清一色.com】
下一篇:最后一页
-
全球热议:详解JavaScript引擎的相关概念和工作原理
2023-05-05
本文通过介绍JavaScript引擎的的相关概念和工作原理,帮助您编写出更加流畅且高质量的JavaScript代码。2020
-
“取之有道、用之有道”,樊锦诗给北大捐1000万元用于敦煌学研究
2023-05-05
据光明日报消息,4日,樊锦诗向母校北京大学捐赠1000万,设立樊锦诗教育基金,用以支持北大的敦煌学研究。
-
襄阳到北海自驾游攻略(襄阳到北海自驾游攻略路线图)
2023-05-05
1 襄阳到北海自驾游攻略路线图由于路途遥远,我个人以为要制定重点:1、尽量不走回头路;2、抓重点;3、去
-
【天天报资讯】重庆去北海自驾怎么走(重庆去北海自驾怎么走最快)
2023-05-05
1 重庆去北海自驾怎么走最快重庆自驾北海最佳的线路还是传统的贵州、广西这条路线。从重庆出发,经遵义市、
-
自驾游中俄小镇(中俄自驾游营地) 世界即时
2023-05-05
1 中俄自驾游营地北京露营地北京蜗途房车天开花海露营地北京昌平蜗途房车农业生态露营地北京延庆八达岭龙湾
-
阜阳市周末自驾游路线(阜阳周边自驾游去哪里好玩)
2023-05-05
1 阜阳周边自驾游去哪里好玩信阳鸡公山、茗阳温泉、六安鲜花岭、大别山石窟、大别山情人谷、天堂寨、万佛湖
-
丽水到云和梯田自驾怎么走(浙江丽水站到云和梯田乘什么车)
2023-05-05
1 浙江丽水站到云和梯田乘什么车可以通过以下路线前往云和梯田景区:1 先到达丽水市,在丽水市区内乘坐前往
-
热消息:学习意义的名言_有意义的名言关于学习
2023-05-05
1、百川东到海,何时复西归?汉乐府《长歌行》少壮不努力,老大徒伤悲。2、(岳飞)百学须先立志。3、(朱熹)宝剑锋
-
5月5日 13:38分 海量数据(603138)股价快速拉升 每日速读
2023-05-05
分时图快速拉升意味此时存在大单买入,在大单的推动下,股价快速地上涨。截止发稿,海量数据(603138)涨幅
-
焦点热门:nationwide和countrywide_nationwide
2023-05-05
1、nationaladj 民族的国家的2、nationwideadj 全国范围的全国性的以上就是【nation
-
正确先生白岩松 中国故事(关于正确先生白岩松 中国故事介绍) 焦点速读
2023-05-05
1、《正确先生白岩松(中国故事)》是中信出版股份有限公司出版的图书,作者是张卓和林天宏。2、。
-
全球今头条!常州焦溪油菜花自驾游(常州哪里油菜花最美)
2023-05-05
1 常州哪里油菜花最美4月已确定马拉松赛事日历4月3日,2021重庆永川马拉松4月3日,2021奉化海峡两岸桃花马
-
青海省去哪里自驾游最好(青海省去哪里自驾游最好呢)
2023-05-05
1 青海省去哪里自驾游最好呢去青海湖建议走国道,因为是旅游观光看风景,走高速看不到沿途的风景,走国道可
-
神农架到恩施自驾怎么走(神农架到恩施路况怎样?)
2023-05-05
1 神农架到恩施路况怎样?如果你更喜欢自然风光和野生动物,可以选择前往神农架。神农架是全国最大的自然保护
-
自驾游锦溪农家乐(锦溪古镇农家乐2日游)
2023-05-05
1 锦溪古镇农家乐2日游从你说的来看,南方确实需要定义一下,江南还是绝对的南方。如果是江南,那么周庄、
-
湖北到深圳自驾(湖北到深圳自驾中途在哪里住一晚)
2023-05-05
1 湖北到深圳自驾中途在哪里住一晚看您怎么坐车铁路里程是1200公里左右!你可以在深圳火车站看下车次:车次全
-
向劳动者致敬,小记者开展“五一”街头实践活动
2023-05-05
为培养小记者正确的劳动价值观和良好的劳动品质,以及提升小记者媒介素养,掌尚大庆教育频道《小记者》(大
-
环球资讯:上海故事围巾有档次吗
2023-05-05
上海故事的围巾定价一般在100元左右,属于中端档次。对然虽然上海故事普遍的价格不是很贵,但是性价比还是
-
快消息!高德地图沉浸导航日使用次数破亿,已落地全国26城
2023-05-05
高德地图沉浸导航日使用次数破亿,已落地全国26城
-
《会飞翔的孩子》大型少儿系列电视剧启动仪式新闻发布会在广州举行 环球关注
2023-05-05
日前,2023年4月29日由众星捧月影业、箭翔星秀文化、星台文化、非同凡响栏目组联合出品的大型少儿系列电视
广告
X 关闭
全球消息!奥林巴斯是哪个国家品牌?什么是单反相机?
最近这段时间总有小伙伴问小编奥林巴斯是哪个国家品牌_奥林巴斯是哪个国家的品牌是什么,小编为此在网上...
观天下!军舰的排水量是什么意思?排水量怎么计算?
提起军舰的排水量是什么意思_排水量是什么意思大家在熟悉不过了,被越来越多的人所熟知,那你知道军舰的...
环球报道:联想v370笔记本综合测评?联想v370笔记本最新报价是多少?
提起联想z370cpu_lenovov370大家在熟悉不过了,被越来越多的人所熟知,那你知道联想z370cpu_lenovov370...
天天新消息丨微信新功能官方提醒怎么设置?如何使用微信的提醒功能?
(资料图片仅供参考)最近这段时间总有小伙伴问小编微信新功能官方提醒怎么设置_微信新功能官方提醒怎么玩...
当前报道:华为荣耀X1有哪些配置参数?华为荣耀x1标配是什么?
(资料图片)在生活中,很多人都不知道华为荣耀x10max_华为荣耀x1是什么意思,其实他的意思是非常简单的,...
全球今日讯!怎么选择适合自己的笔记本?实惠笔记本有哪些推荐?
最近小编看到大家都在讨论电脑啥牌子的好价格又实惠笔记本_实惠笔记本相关的事情,对此呢小编也是非常的...
焦点简讯:胸部怎么按摩健康(胸部怎么变大)
您好,现在渔夫来为大家解答以上的问题。胸部怎么按摩健康,胸部怎么变大相信很多小伙伴还不知道,现在让...
天天快看点丨挑战不可能第四季免费观看(挑战不可能第四季最新)
(相关资料图)您好,现在渔夫来为大家解答以上的问题。挑战不可能第四季免费观看,挑战不可能第四季最新相...
全球观焦点:爱亲者不敢恶于人敬亲者不敢慢于人(爱亲者不敢恶于人敬亲者不敢慢于人)
【资料图】您好,现在渔夫来为大家解答以上的问题。爱亲者不敢恶于人敬亲者不敢慢于人,爱亲者不敢恶于人...
消息!美年体检报告查询(美年体检报告查询)
(相关资料图)您好,现在渔夫来为大家解答以上的问题。美年体检报告查询,美年体检报告查询相信很多小伙伴...
广告
X 关闭
倒计时!国内新能源汽车行业或将进入“无补贴时代”
一个月之后,国内新能源汽车行业有可能进入无补贴时代。根据工信部、财政部、科技部和发展改革委联合发...