我对非阻塞架构非常着迷。虽然我没有使用Node.js,但我从概念上掌握了它。此外,我一直在开发一个事件驱动的Web应用程序,因此我对事件编程有了基本的了解。
如何在浏览器中编写非阻塞javascript?我想这在某些方面必须与Node的不同之处有所不同。例如,我的应用程序允许用户加载大量数据(序列化为JSON)。解析此数据以重新构建应用程序状态。这是一个繁重的操作,可能导致浏览器锁定一段时间。
我相信使用网络工作者是一种方式。 (这似乎是显而易见的选择,但是,Node完成了一个非阻塞,事件驱动的架构,我相信不使用Web Workers,所以我想必须有另一种方式。)我相信计时器也可以发挥作用。我读到了TameJS和其他一些扩展javascript语言的库。我对使用原生javascript而不引入新语言语法的javascript库感兴趣。
非常感谢资源,图书馆和实际示例的链接。
编辑:
了解更多,我意识到我所谈论的内容属于“期货”一词。 然而,jQuery实现了这一点,它始终使用XHR来调用服务器进行处理的服务器,然后返回结果,而我所做的就是在不调用服务器的情况下执行相同的操作,客户端执行处理但是在非阻塞中方式。
答案 0 :(得分:2)
三种方法是在浏览器上进行非阻塞工作
穷人的话:
你可以使用几种黑客:
setTimeout
模拟时间拼接。这基本上意味着在每次“一次性”工作之后,您可以通过调用setTimeout(doMore, 10)
为浏览器提供一些响应空间。这基本上是以非常差的非优化方式编写自己的进程调度程序,而是使用Web worker 答案 1 :(得分:0)
非阻塞具体是什么意思?
最长的操作Ajax调用已经是非阻塞(异步)
如果你需要一些长时间运行的功能来“在某个地方”运行然后再做一些事情,你可以打电话给
setTimeout(function, 0)
并从函数中调用回调。
您还可以阅读promises和here as well