我正在使用JavaScript,HTML5和AngularJS编写应用程序。它只需要在最近的浏览器上工作(例如,IE10但不是IE9)。
在应用程序的几个地方,会有计算密集型任务,例如XML解析,base64解码;这些可能涉及相当大的数据(几MB肯定是可能的)。
如果我只是调用atob()
或DOMParser.parseFromString()
之类的内容,我会在几秒钟甚至几分钟内得到一个无响应的浏览器。这显然是用户无法接受的。
我使用Angular的Q服务来实现异步访问外部Web服务,从而避免在等待响应时挂起浏览器。但是这样的操作已经有了异步API。
这些计算密切型任务怎么样,它们没有自己的异步API?
我可以将这些任务分开一点,将承诺链接起来。这有帮助吗?浏览器消息队列在每个任务结束时都会自动旋转吗?
我看到“Web Workers”的存在,似乎提供了适当的多线程。但是它们似乎具有相当差的能力来向/从工作线程传输对象。当然,像我这样的人来自C#.Net似乎也是这样!例如,我想将Angular服务(内置和我自己的)注入到线程上的任务中。而且我也不想在线程之间复制大量数据。
其他人是否实现了包含严重计算的响应式客户端Web应用程序?如果是这样,他们用什么来实现这个目标?
答案 0 :(得分:3)
听起来你正在寻找Parallel.js library。
以下是他们网站上图书馆的简要说明:
“Parallel.js是一个用于Javascript中多核处理的小型库。它的创建是为了充分利用不断成熟的Web工作者API。”
我目前还没有发现任何特定于Angular中使用Parallel.js的示例,但我确信将该库集成为Angular服务并不会太难。