【发布时间】:2013-09-17 02:05:13
【问题描述】:
我正在处理使用 Web Worker(如果可用)处理所有 AJAX 请求的代码。这些工作人员几乎只做XMLHttpRequest 对象处理(没有额外的计算)。工作人员创建的所有请求都是异步的 (request.open("get",url,true))。
最近,我遇到了一些关于这段代码的问题,我开始怀疑我是应该花时间修复这个问题还是直接放弃整个解决方案。
到目前为止,我的研究表明,这段代码实际上可能会损害性能。但是,我找不到任何可靠的来源支持这一点。我仅有的两个发现是:
- 2 岁的 jQuery feature suggestion 使用 Web Worker 进行 AJAX 调用
- this SO 问题似乎询问了一些不同的东西(在网络工作者与 AJAX 调用中使用同步请求)
谁能给我指出一个讨论这个问题的可靠来源?或者,有没有什么基准可以打消我的疑虑?
[EDIT] 当 WebWorker 也负责解析结果时(JSON.parse),这个问题变得更有趣了。异步解析是否提高了性能?
【问题讨论】:
-
uffffffffffff 我只是在等待一个好的答案。
-
你可以在这里建立你自己的测试:jsperf.com/webworker-vs-single-thread/11
-
网络工作者在进行计算量大的工作时会很有帮助。 AJAX 请求主要受 IO 限制。如果除了将结果传递回主应用程序之外,您没有对结果进行任何操作,那么您不太可能看到任何性能优势,并且很可能您的性能会略有下降,因为传递结果会产生一些开销返回。
-
如果他们给你带来了问题并且他们没有解决任何问题...... :)
-
AJAX 调用本质上是异步的,因此除了调用 JavaScript 引擎之外,它们不会占用太多计算时间。如果您在 Web Worker 代码中解析结果,但如果您在主线程中处理请求的结果,那么 WebWorkers 非常棒,这将是 99% 的计算时间。这意味着它将优化这 1%,这可能没有多大帮助。
标签: javascript ajax asynchronous web-worker