我正在使用 JavaScript、HTML5 和 AngularJS 编写应用程序。它只需要在最近的浏览器上工作(例如,IE10 但不是 IE9)。
在应用程序的几个地方,都会有计算密集型任务,例如 XML 解析、base64 解码;这些可能涉及相当大的数据(几MB当然是可能的)。
atob()
如果我只调用or之类的东西DOMParser.parseFromString()
,我会在几秒钟甚至几分钟内得到一个无响应的浏览器。这显然是用户不能接受的。
我使用 Angular 的 Q 服务来实现异步访问外部 Web 服务等操作,因此避免在等待响应时挂起浏览器。但是这样的操作已经有了异步 API。
这些没有自己的异步 API 的计算密集型任务呢?
我可以将其中一些任务拆分一下,链接承诺。这有帮助吗?浏览器消息队列是否在每个任务结束时旋转?
我看到了“Web Workers”的存在,它似乎提供了适当的多线程。但是他们似乎在将对象传输到/从工作线程中的能力相当差。当然,对于像我这样来自 C#.Net 的人来说似乎就是这样!例如,我想将 Angular 服务(内置的和我自己的)注入线程上的任务中。而且我也不想在线程之间复制大量数据。
其他人是否正在实现包含严肃计算的响应式客户端 Web 应用程序?如果是这样,他们用什么来实现这一目标?