azi*_*ani 136 javascript xmlhttprequest
由于JavaScript在单个线程中运行,在发出AJAX请求后,后台实际发生了什么?我想更深入地了解这一点,任何人都可以解释一下吗?
jfr*_*d00 208
在封面下,javascript有一个事件队列.每次javascript执行线程完成时,它都会检查队列中是否还有另一个要处理的事件.如果存在,则将其从队列中拉出并触发该事件(例如,鼠标单击).
位于ajax调用下的本机代码网络将知道何时完成ajax响应并且将事件添加到javascript事件队列中.本机代码如何知道ajax调用何时完成取决于实现.它可以用线程实现,也可以是事件驱动本身(它并不重要).实现的重点是,当完成ajax响应时,一些本机代码将知道它已完成并将事件放入JS队列.
如果当时没有运行Javascript,将立即触发该事件,该事件将运行ajax响应处理程序.如果当时正在运行某些内容,则当前执行的javascript线程结束时将处理该事件.不需要通过javascript引擎进行任何轮询.当一段Javascript完成执行时,JS引擎只检查事件队列以查看是否还有其他需要运行的事件.如果是这样,它会从队列中弹出下一个事件并执行它(调用为该事件注册的一个或多个回调函数).如果事件队列中没有任何内容,则JS解释器具有空闲时间(垃圾收集或空闲),直到某个外部代理将其他内容放入事件队列并再次唤醒它.
因为所有外部事件都通过事件队列,并且当javascript实际运行其他内容时没有触发事件,所以它保持单线程.
以下是一些有关细节的文章:
| 归档时间: |
|
| 查看次数: |
21026 次 |
| 最近记录: |