JavaScript代码是如何被机器理解并执行的呢?
作为 JavaScript 开发者,通常我们不需要关心JavaScript引擎是如何执行代码的。但是,了解 JavaScript 引擎的工作原理,知晓它如何处理我们编写的 JS 代码、肯定是有益的。
注意:这篇文章讲述的原理,基于 Node.js 和 Chromium 的浏览器所使用的 V8 引擎。
HTML 解析器遇到script标签时,会从网络、缓存中以字节流的方式加载代码。此阶段,字节流解码器会负责将字节转为代码字符。
例如,字节流中的 0066 解码为 f,0075 解码为 u,006e 解码为 n,0063 解码为 c,0074 解码为 t,0069 解码为 i,006f 解码为 o,006e 解码为 n。结合起来便是: function! JavaScript 中的一个函数关键字,这时会将它做为JavaScript代码,并创建一个标记并发送给JS引擎。
JS引擎使用两个解析器:预解析器和解析器。为了减少加载网页所需的时间,引擎会尽量避免立即解析不必要的代码。预解析器处理可能稍后会使用的代码,而解析器则处理立即需要的代码!
如果某个函数只有在用户点击按钮后才会被调用,那么不必要立即编译这段代。如果用户最终点击了按钮并需要那段代码,它才会被发送到解析器。
解析器根据从字节流解码器接收到的代码创建节点:创建一个抽象语法树(AST)。
接下来,轮到解释器了!解释器遍历 AST,并根据 AST 包含的信息生成字节码。
一旦字节码完全生成,AST 就会被删除,从而释放内存空间。字节码已经是机器可以识别和处理的东西!
字节码速度很快。
但还可以更快。当字节码运行时,它可以检测某些行为是否经常发生,比如你多次调用一个函数:这时便可优化它,让它运行得更快:字节码与行为反馈数据一起被发送到优化编译器。优化编译器接从这些信息中生成高度优化过的字节码:机器码。
总结而言,JS代码变为机器可识别的整个过程是:
字节流 → JavaScript代码 → 抽象语法树(AST) → 字节码 → 机器码。
分享
热搜
相关推荐
-
大神Karpathy:我给大模型「SQL注入」攻击,简直不要太轻松
机器之心Pro 1跟贴 -
不会写代码全交给AI,它能写出完整的APP吗?这是我们的测试结果
量子位 -
阿里推出AI数据科学家,全流程自动化,科研小白也能用
量子位 21跟贴 -
美国宾夕法尼亚州参院竞选将重新计票
参考消息 3941跟贴 -
在阿里,痛苦的人开始信教
钛媒体APP 2610跟贴 -
宁愿开摆!也不想动这堆“屎山代码”
墨轩TG -
腾讯字节宣讲会流程曝光,唯一的非985格外惹人注目!
考研木木学姐 -
字节藏了一张底牌
虎嗅APP 11跟贴 -
成为程序员后,我的手再也写不了诗了
码客人生 19跟贴 -
字节AI版小李子一开口:黄风岭,八百里
量子位 18跟贴 -
不靠更复杂的策略,仅凭和大模型训练对齐,零样本零经验单LLM调用
机器之心Pro 1跟贴 -
诺奖AI成果开源,AlphaFold3代码免费下载
量子位 -
几行乱码让大模型获得科学思维,这个神奇的提示词突然火了
机器之心Pro 49跟贴 -
上海试点:菜场现烧!97元能吃一桌菜,晚上大排长龙,商家却说“不太赚钱”
上观新闻 404跟贴 -
0-0,亚洲第8逼平澳大利亚,国足渔翁得利:争小组第二有戏了
侧身凌空斩 1320跟贴 -
张家界大庸古城试运营三年入驻店铺可查仅18家,日均购票人数不足20人,商家自称“苟延残喘”
极目新闻 1873跟贴 -
年轻人抛弃搜索引擎
虎嗅APP 1026跟贴 -
人工智能研究生的论文,需要放代码吗
复旦张军平 -
半小时教你手搓AI视频通话,还有懒人版代码已开源
量子位 -
100万贱卖,曾坐拥2.4亿用户的“互联网全球500强”,被时代抛弃?
钛媒体APP 292跟贴
热门跟贴