0

知道

  • Javascript 是严格的单线程并且 settimeout 不会产生新线程。相反,它遵循事件循环模型
  • 工作线程是 HTML5 的新特性,但并非所有 HTML5 浏览器都支持它

我应该使用哪一个来进行后台数据下载?如果您有任何经验或有任何可用的基准数据,请分享。

不知道问这个问题有多重要,但为了完整起见,我想提一下数据应该是 XML 格式,并且将调用多个服务器端服务来获取数据。是否已经有一个框架可以同时满足基于手持设备的浏览器和基于桌面的浏览器数据下载的需求?

4

3 回答 3

2

Javascript 是单线程的,但这并不意味着数据不会并行下载。如果您进行异步 AJAX 调用,则您正在后台下载数据,而其余代码正在运行。

Web Worker 的目的是在主线程之外执行 CPU 繁重的工作。它们不会帮助您更快地获取数据。

于 2013-01-16T12:30:59.400 回答
0

这是一个线程,他们展示了如何使用 JQuery 运行一堆并行 AJAX 调用 使用 jQuery 的并行异步 Ajax 请求

我能想到使用工作线程的唯一原因是让它不断与服务器通信,但在这种情况下,websockets 是一个更好的解决方案http://www.html5rocks.com/en/tutorials/websockets/basics/

Web Worker 仅在 IE10+ 上受支持,因此如果您想支持旧版本的 IE,您仍然需要一个备用解决方案。http://msdn.microsoft.com/en-us/library/ie/hh673568(v=vs.85).aspx

于 2013-01-19T01:06:12.000 回答
0

工作线程尚未在所有主要浏览器上得到支持,因此我认为将工作线程纳入您的设计并不是一个好主意,除非您只想支持最新的浏览器。

所有的 Ajax 调用都可以并行进行,但我想你的问题将是如何知道所有 ajax 调用的响应已经到来并且数据被插入/更新到浏览器的数据库中。知道所有 AJAX 响应都已处理的一种方法是链接所有 AJAX 调用。但这将保证您将 AJAX 调用序列硬编码到您的代码库中。如果这不是可取的,那么您将需要一个单独的异步流来继续检查是否所有 AJAX 调用都已得到响应。您可以通过为每个 ajax 调用设置一个标志并在使用响应时将其设置为 true 来实现这一点。然后,您将继续检查另一个流程中所有标志的状态(使用 settimeout 开始)。

我知道任何现有的框架都可以处理这种复杂的活动,因此您必须自己编写代码。希望这会帮助你给出一些方向。

于 2013-01-19T04:03:06.347 回答