浏览器端node.js还是非阻塞javascript?

时间:2011-10-11 17:12:51

标签: javascript node.js nonblocking event-driven

我对非阻塞架构非常着迷。虽然我没有使用Node.js,但我从概念上掌握了它。此外,我一直在开发一个事件驱动的Web应用程序,因此我对事件编程有了基本的了解。

如何在浏览器中编写非阻塞javascript?我想这在某些方面必须与Node的不同之处有所不同。例如,我的应用程序允许用户加载大量数据(序列化为JSON)。解析此数据以重新构建应用程序状态。这是一个繁重的操作,可能导致浏览器锁定一段时间。

我相信使用网络工作者是一种方式。 (这似乎是显而易见的选择,但是,Node完成了一个非阻塞,事件驱动的架构,我相信不使用Web Workers,所以我想必须有另一种方式。)我相信计时器也可以发挥作用。我读到了TameJS和其他一些扩展javascript语言的库。我对使用原生javascript而不引入新语言语法的javascript库感兴趣。

非常感谢资源,图书馆和实际示例的链接。

编辑:

了解更多,我意识到我所谈论的内容属于“期货”一词。 然而,jQuery实现了这一点,它始终使用XHR来调用服务器进行处理的服务器,然后返回结果,而我所做的就是在不调用服务器的情况下执行相同的操作,客户端执行处理但是在非阻塞中方式。

http://www.erichynds.com/jquery/using-deferreds-in-jquery/

2 个答案:

答案 0 :(得分:2)

三种方法是在浏览器上进行非阻塞工作

  • Web Workers。 WebWorkers创建了一个新的隔离线程供您进行计算,但browser support告诉您IE< 10讨厌您。
  • 没有这样做,不应该在客户端上以阻塞的方式进行昂贵的工作,向服务器发送ajax请求来执行此操作,然后让服务器返回结果。

穷人的话:

你可以使用几种黑客:

  • 使用setTimeout模拟时间拼接。这基本上意味着在每次“一次性”工作之后,您可以通过调用setTimeout(doMore, 10)为浏览器提供一些响应空间。这基本上是以非常差的非优化方式编写自己的进程调度程序,而是使用Web worker
  • 通过使用自己的html文档创建iframe来创建“新流程”。在这个iframe中,您可以在不阻止自己的html文档响应的情况下进行计算。

答案 1 :(得分:0)

非阻塞具体是什么意思?

最长的操作Ajax调用已经是非阻塞(异步)

如果你需要一些长时间运行的功能来“在某个地方”运行然后再做一些事情,你可以打电话给

 setTimeout(function, 0)

并从函数中调用回调。

您还可以阅读promiseshere as well