单线程Javascript中的AJAX实现

ain*_*kna 7 javascript browser ajax multithreading asynchronous

如果Javascript不是多线程的,那么AJAX请求如何变为异步?

实现浏览器是否具体?

Poi*_*nty 8

浏览器执行模型基于"事件循环"的概念.只有一个线程服务事件(略微过度简化).当事件发生时,将按顺序调用处理程序.

Ajax只是一种导致某些事件的机制.设置HTTP请求是同步的,但只是设置它.浏览器通过在发生事件时触发事件来响应表示来自服务器的返回数据的网络通信.

现代浏览器稍微复杂一点,因为每个窗口可能有自己的进程(或者一些其他系统级"线程"构造).此外,新的"Web worker"功能允许单独的线程状隔间同时运行.

  • @EliasVanOotegem谢谢!"Web Workers"可以实现,使得它们的代码与页面(和其他工作者)的代码同时运行,但由于线程间通信模型是如此严格基于消息(几乎像Erlang进程),因此它相对安全. (2认同)