问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

从JS引擎理解Await 与.then()的堆栈处理

发布网友 发布时间:2024-10-01 08:04

我来回答

1个回答

热心网友 时间:2024-10-13 19:12

Async/Await并非简单的语法糖,它能提高代码可读性,并优化JavaScript引擎对堆栈信息的处理。

与Promise相比,Async/Await的一个关键区别在于,await会暂停async函数的执行,而Promise.then则将函数加入回调链中后继续执行当前函数。

当Promise链抛出未处理的错误时,无论使用await还是Promise.then,JavaScript引擎都需要打印错误信息及其堆栈。然而,两者获取堆栈的方式不同。

使用Promise.then时,JavaScript引擎需要记录并保存堆栈信息。对于V8引擎,它会将堆栈信息附加在Promise上并在Promise链中传递,以便c()函数在需要时获取堆栈信息。

记录堆栈信息需要时间,这会降低性能;而保存堆栈信息需要占用额外的内存。

使用await时,无需存储当前的堆栈信息,因为存储b()到a()的指针就足够了。当等待b()函数执行时,a()函数被暂停了,因此a()函数的作用域还在内存中可以访问。如果b()函数抛出一个错误,堆栈信息可以通过指针迅速生成。如果c()函数抛出一个错误,堆栈信息也可以像同步函数一样生成,因为c()函数是在a()函数中执行的。

Async/Await并非简单的语法糖,它有助于JavaScript引擎处理堆栈的方式更高效且节省内存。

为了优化JavaScript引擎处理堆栈的方式并提高性能,遵循以下建议:

尽量不要使用Babel转码器。所有支持Service Workers的浏览器都支持Async/Await,因此没有必要转码。这一点同样适用于JavaScript moles via script tag。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
染色翡翠如何测 染色翡翠怎么测 中国平安保险保单号码 平安人寿团体保险,工人出险意外,医院病例写的是从两米高处落下脚摔伤... 小老鼠咬的牙印是连在一起的吗 ...总觉得生活的孤独, 我想学点乐器,培养性格,那么请问我适合学什么乐... 我是一个高二的女生、最近对吉他和架子鼓很有兴趣 ...DLINK-624+A 也恢复默认过。账号密码不管怎么输入都不对admin_百度... D-Link DI-624+A无线路由器的使用说明书丢了,不知道用户密码怎么办 我的D-link DI-624+A 无线路由器忘记密码,怎么办? 避孕的方法有哪些 哪种最靠谱 异步函数async/await JS进阶 - 深入async await 我眼中的 async/await javascript 对async/await 的理解 如何使用 await-to-js 库优雅的处理 async await 错误 肚皮舞有哪些种类 肚皮舞有几种风格哪一种最常用 肚皮舞有哪些风格 夏至搬家有什么说法 1.2厘米直径,长9米的钢筋有多少公斤重 钢筋质量如何计算 如何算钢筋理论重量? 人睡觉时为什么用枕头 人为什么要枕枕头睡觉 睡觉为什么枕枕头 手机炒股业务的BREW客户端软件怎么选择和安装? 台式电脑下载什么软件破解Wi-Fi好 急 台式电脑连无线需要什么软件 台式电脑什么软件才能连接wifi? 一年开2万公里正常吗 解梦 梦到娘家 有三个死尸 一个手机号创了两个微信号原来的微信号会不会没有? 请问已收到发票未认证 为啥不计入待认证进项税科目,而是都记入了待抵扣... 增值税未认证计入什么科目 今年阳历几月几日是阴历6月29 于1983年6月29日阴历和阳历都一样的是几几年? 1987年阳历7月25日阴历6月29的生日。好像是闰六月再加上夏令时。阳历... 可爱搞笑的句子精选147句 怎么样挽回喜欢的她,让她接受我? 除了桃李满天下,人们还常用哪些话来赞美教师? 你知道人们还常用那些话来赞美教师吗 ...你知道人们还常用哪些话来赞美教师吗?请你写一写。 狼穴:希特勒的秘密总部目录 狼穴:希特勒的秘密总部内容简介 梦到一个亲戚,本来她没去世,但是梦里却是鬼,一直缠着我要咬我。这个预 ... 幼儿园的中签率高就能中签吗? 汽车泵指的是什么样的混凝土泵 线性代数:设A(A+B)=E,证明AB=BA。 线性代数 |AB|=|BA|如何证明 cf用什么鼠标比较好,io1.1打个人竞技,鼠标速度10点,转身手很累啊,