1 回答

TA贡献1812条经验 获得超5个赞
根据@ThisIsNoZaku 的链接,Javascript 有一个“运行到完成”原则:
在处理任何其他消息之前,每条消息都会被完全处理。
这在推理您的程序时提供了一些很好的属性,包括这样一个事实:每当一个函数运行时,它不能被抢占并且将在任何其他代码运行之前完全运行(并且可以修改函数操作的数据)。这与 C 不同,例如,如果一个函数在一个线程中运行,它可能会在任何时候被运行时系统停止以在另一个线程中运行一些其他代码。
此模型的一个缺点是,如果一条消息需要很长时间才能完成,Web 应用程序将无法处理用户交互,例如单击或滚动。浏览器通过“脚本运行时间过长”对话框来缓解这种情况。一个好的做法是缩短消息处理时间,如果可能的话,将一条消息缩减为多条消息。
进一步阅读:https ://developer.mozilla.org/en-US/docs/Web/JavaScript/EventLoop
因此对于:
示例 A:这作为站点计数器非常有效。
示例 B:这也可以正常工作,但是如果同时发生许多请求,那么最后提交的请求将等待相当长的时间。
\remove
示例 C:如果在完成之前发送另一个调用someAsyncFunction
,那么您的数组完全有可能无效。解决这个问题的方法是将索引结果移动到.then
async 函数的子句中。
IMO,以延迟为代价,解决了许多潜在的痛苦并发问题。如果您必须优化请求的速度,那么我的建议是研究不同的架构(附加缓存等)。
添加回答
举报