【问题标题】:How to do compute-intensive tasks in AngularJS application?如何在 AngularJS 应用程序中执行计算密集型任务?
【发布时间】: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


【解决方案1】:

听起来您正在寻找Parallel.js library

以下是他们网站上对该库的简要说明:

“Parallel.js 是一个用于 Javascript 中的多核处理的小型库。创建它是为了充分利用不断成熟的 web-workers API。”

我目前不知道任何特定于 Angular 中使用 Parallel.js 的示例,但我确信将库集成为 Angular 服务不会太难。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-08
    • 1970-01-01
    • 2011-12-07
    相关资源
    最近更新 更多