【问题标题】:AJAX implementation in single-threaded Javascript单线程 Javascript 中的 AJAX 实现
【发布时间】:2012-09-28 22:07:04
【问题描述】:

如果 Javascript 不是多线程的,AJAX 请求如何异步处理?

实现浏览器是特定的吗?

【问题讨论】:

    标签: javascript ajax multithreading browser asynchronous


    【解决方案1】:

    浏览器执行模型基于“事件循环”的概念。只有一个线程服务于事件(稍微过于简单化)。当事件发生时,会依次调用处理程序。

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

    现代浏览器稍微复杂一些,因为每个窗口可能有自己的进程(或其他一些系统级“线程”结构,一般来说)。此外,新的“网络工作者”功能允许单独的类似线程的隔间同时运行。

    【讨论】:

    • +1,完美答案,简洁明了。只需添加一点:在某种程度上,单线程的 JS 实现确实是特定于浏览器的。但到目前为止,没有 JS 的实现(据我所知)支持多线程。理论上是可以的,但缺点是巨大的:JS被那些对(多线程)开发的核心概念没有真正理解的人使用,再加上很多写JS的人实际上是滥用语言。老实说,与在业余网站上冲浪相比,克苏鲁的崛起似乎是一场野餐。没有不尊重,虽然
    • 业余编程很棒,我们都是这样开始的,但是想想如果我们从一开始就拥有严肃的工具,我们会对自己的机器造成什么伤害?在网络上,你破坏的不仅仅是你的机器......基本上,让 JS 成为它的本来面目:一种伟大的语言,它开始很容易,但对于那些愿意寻找它们的人来说,它的结构非常简洁。有很多东西要学习,线程可以等待,直到学习了闭包、lambda、委托、作用域等......
    • @EliasVanOotegem 谢谢!好吧,“Web Workers”可以被实现,使得他们的代码与页面(和其他工作人员)的代码同时运行,但是因为线程间通信模型非常严格地基于消息(几乎就像 Erlang 进程一样),所以它是相对安全的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-24
    • 2016-01-29
    • 2021-07-23
    • 1970-01-01
    • 1970-01-01
    • 2014-09-24
    相关资源
    最近更新 更多