【发布时间】:2013-07-30 15:58:15
【问题描述】:
我正在使用 JavaScript、HTML5 和 AngularJS 编写应用程序。它只需要在最近的浏览器上工作(例如,IE10 但不是 IE9)。
在应用程序的几个地方,都会有计算密集型任务,例如 XML 解析、base64 解码;这些可能涉及相当大的数据(几 MB 肯定是可能的)。
如果我只是调用 atob() 或 DOMParser.parseFromString() 之类的东西,我会在几秒钟甚至几分钟内得到一个无响应的浏览器。这显然是用户无法接受的。
我使用 Angular 的 Q 服务来实现异步访问外部 Web 服务之类的操作,从而避免在等待响应时挂起浏览器。但此类操作已经有了异步 API。
那些没有自己的异步 API 的计算密集型任务呢?
我可以将其中一些任务拆分一下,链接承诺。这有帮助吗?浏览器消息队列是否在每个任务结束时旋转?
我看到“Web Workers”的存在,它似乎提供了适当的多线程。但是他们似乎在将对象传输到/从工作线程中的能力相当差。当然,对于像我这样来自 C#.Net 的人来说似乎就是这样!例如,我想将 Angular 服务(内置的和我自己的)注入线程上的任务中。而且我也不想在线程之间复制大量数据。
其他人是否正在实现包含严肃计算的响应式客户端 Web 应用程序?如果是这样,他们用什么来实现这一点?
【问题讨论】:
-
对于注入服务,工作线程可以使用全局函数 importScripts('script.js') - 以防万一你错过了。可悲的是,复制数据的问题没有解决方案。
-
我一直在试验,我无法让 Angular 本身加载到工作程序中(它需要窗口和文档),所以我想我不能使用任何 Angular?
标签: javascript html angularjs