分享好友 最新动态首页 最新动态分类 切换频道
JavaScript 语法解析、AST、V8、JIT
2024-12-26 20:25
作者 | 肖沐宸

来源 | https://github.com/cheogo/learn-javascript

JavaS<i></i>cript 语法解析、AST、V8、JIT

JavaScript 是如何执行的

对于常见编译型语言(例如:Java)来说,编译步骤分为:词法分析->语法分析->语义检查->代码优化和字节码生成。

对于解释型语言(例如 JavaScript)来说,通过词法分析 -> 语法分析 -> 语法树,就可以开始解释执行了。

具体过程是这样的

1、词法分析是将字符流(char stream)转换为记号流(token stream)

2、语法分析成 AST (Abstract Syntax Tree),你可以在这里试试 http://esprima.org/

3、预编译,当JavaScript引擎解析脚本时,它会在预编译期对所有声明的变量和函数进行处理!并且是先预声明变量,再预定义函数

4、解释执行,在执行过程中,JavaScript 引擎是严格按着作用域机制(scope)来执行的,并且 JavaScript 的变量和函数作用域是在定义时决定的,而不是执行时决定的。

JavaScript 中的变量作用域在函数体内有效,无块作用域

JavaScript 引擎通过作用域链(scope chain)把多个嵌套的作用域串连在一起,并借助这个链条帮助 JavaScript 解释器检索变量的值。

这个作用域链相当于一个索引表,并通过编号来存储它们的嵌套关系。

当 JavaScript 解释器检索变量的值,会按着这个索引编号进行快速查找,直到找到全局对象(global object)为止,如果没有找到值,则传递一个特殊的 undefined 值。

V8、JIT

我们常说的 V8 是 Google 发布的开源 JavaScript 引擎,采用 C++ 编写。SpiderMonkey(Mozilla,基于 C)、Rhino(Mozilla,基于 Java,而 Nodejs 依赖于 V8 引擎开发,接下来的内容是 JavaScript 在 V8 引擎中的运行状态,而类似的 JavaScript 现代引擎对于这些实现大同小异。

在本文的开头提到了编译型语言,解释型语言。JavaScript 是解释型语言且弱类型,在生成 AST 之后,就开始一边解释,一边执行,但是有个弊端,当某段代码被多次执行时,它就有了可优化的空间(比如类型判断优化,而不用一次次的去重复之前的解释执行。

编译型语言如 JAVA,可以在执行前就进行优化编译,但是这会耗费大量的时间,显然不适用于 Web 交互。

于是就有了,JIT(Just-in-time,JIT 是两种模式的混合。

它是如何工作的呢

1、在 JavaScript 引擎中增加一个监视器(也叫分析器)。监视器监控着代码的运行情况,记录代码一共运行了多少次、如何运行的等信息,如果同一行代码运行了几次,这个代码段就被标记成了 “warm”,如果运行了很多次,则被标记成 “hot”。

2、(基线编译器)如果一段代码变成了 “warm”,那么 JIT 就把它送到基线编译器去编译,并且把编译结果存储起来。

比如,监视器监视到了,某行、某个变量执行同样的代码、使用了同样的变量类型,那么就会把编译后的版本,替换这一行代码的执行,并且存储。

3、(优化编译器)如果一个代码段变得 “hot”,监视器会把它发送到优化编译器中。

生成一个更快速和高效的代码版本出来,并且存储。例如:循环加一个对象属性时,假设它是 INT 类型,优先做 INT 类型的判断

4、(去优化)可是对于 JavaScript 从来就没有确定这么一说,前 99 个对象属性保持着 INT 类型,可能第 100 个就没有这个属性了,那么这时候 JIT 会认为做了一个错误的假设,并且把优化代码丢掉,执行过程将会回到解释器或者基线编译器,这一过程叫做去优化。

优化代码图例

“hot” 代码

优化前

优化后

总结

明白一些基本原理能拓展出更多的东西,比如

1、var a = 10; var b = 20; ==> var a=10, b=20; 这些改代码的好处是什么,如何从原理解释

2、JavaScript 的函数和变量是在什么时候声明的,函数声明和函数表达式的区别

3、如何通过编译器的优化原理,如何提高 JavaScript 的执行效率

本文完~

学习更多技能

请点击下方公众号

最新文章
美女写真轻松生成,解锁AI绘图神器的魅力!
在这个科技飞速发展的时代,AI的身影无处不在,从日常生活到专业创作,都在以不同的方式渗透我们每一个角落。宝子们,总有一些美好的瞬间让我们想要记录,却因时间和技术限制而难以实现。今天,我就来和大家聊聊如何用AI生成超逼真的美女写
全球搜受邀出席2023谷歌出海峰会,共建出海新增长!
12月5日,由谷歌官方主办的2023谷歌出海峰会在深圳隆重举行!创贸集团旗下产品,全球搜——连续7年谷歌优秀合作伙伴,受邀参加!创贸集团CEO,全球搜、黑格增长创始人蒲竞超先生作为代表出席此次峰会。峰会集锦 洞察趋势今年峰会的主题是“
重庆市艺考文化课集训学校哪里好一点?快来看看吧
好一点的重庆市艺考文化课集训学校有:1、重庆学智堂教育;2、重庆昂扬速才;3、重庆春晖学校,这些学校的位置分别在重庆市九龙坡区京渝国际文创园、重庆市沙坪坝区汉渝路43号、重庆市沙坪坝区沙南街4号。 1、重庆学智堂教育推荐理由:学校
竞价开户推广平台?搜狗竞价推广账户搭建流程
竞价开户推广平台?搜狗竞价推广账户搭建流程在如今竞争激烈的市场环境中,企业的推广方式日益多样化。作为一款重要的搜索引擎,搜狗在推广广告上具备独特的优势。通过竞价推广,企业可以在潜在客户搜索相关产品或服务时,优先展示自身广
正规seo优化代理企业(seo有名气的优化公司)
大家好,今天小编关注到一个比较有意思的话题,就是关于正规seo优化代理企业的问题,于是小编就整理了5个相关介绍正规seo优化代理企业的解答,让我们一起看看吧。seo公司哪家好?整站优化外包的公司有没有?求推荐?最好的SEO排名优化工具
用AI画美女:一键生成超逼真写真,解锁你的虚拟女友!
搜狐简单AI:值得一提的是这款工具。相较于以上工具,搜狐简单AI的操作极为简便,用户只需上传几张个人喜欢的或拥有版权的图片,便可生成出超逼真的美女写真。不仅功能丰富,操作界面友好,且提高了用户的交互体验,适合所有年龄段用户使用
迷你世界0元购买皮肤教程-怎么免费领皮肤 科普
t2627_2_2627_1:4.0t1-t0:35.0t2-t1:5.0t3-t2:0.0t4-t3:2.0t5-t4:13.0t6-t5:44.0t7-t6:2.0t8-t7:0.0t9-t8:26.0t10-t9:0.0t11-t10:3.0t12-t11:0.0t13-t12:0.0t14-t13:1.0t15-t14:0.0t16-t15:0.0t17-t16:0.0t18-t17:30.0t19-t18:3.0t20-t19:3
马斯克计划转变OpenAI为营利公司?邮件曝光揭秘尴尬真相
马斯克计划转变OpenAI为营利公司?邮件曝光揭秘尴尬真相揭秘:马斯克计划变OpenAI为营利公司的背后真相科技先锋  当地时间周五,针对马斯克提起的一系列诉讼和攻击,OpenAI进行了反击,公开了多封马斯克与OpenAI几位创始人之间的邮件和聊
韩男团成员大谈朝鲜当乞丐小偷!
K-POP男团1VERSE因为有两名「脱北者」成员 Hyuk(24岁)和 Seok(24岁)备受关注。近日组合登上BBC NEWS接受访问,谈到于朝鲜生活的艰苦经历,因而成为了网友热话!1VERSE由4名成员组成,除了来自朝鲜的Seok、宥赫(Hyuk),还有日本成员Ai
上半年全球最畅销手机排行丨Note14系列预热,偏线下
来源:大米评测近日市场调研机构Omdia公布了2024上半年全球智能手机出货量TOP10:第一名相信大家都能猜到,那就是iPhone 15 Pro Max,总出货量达到了2180万部。iPhone 15排名第二,出货量为1780万部。第三名则是Galaxy A15,出货量为1730万
相关文章
推荐文章
发表评论
0评