我正在使用使用Web Workers处理所有AJAX请求的代码(如果有)。这些工作人员几乎只执行XMLHttpRequest对象处理(无需额外的计算)。 worker 创建的所有请求都是异步的(request.open("get",url,true))。

最近,我遇到了一些与此代码有关的问题,我开始怀疑是应该花时间修复此问题还是只是丢弃整个解决方案。

到目前为止,我的研究表明该代码实际上可能会损害性能。但是,我找不到任何可靠的消息来源来支持这一点。我仅有的两个发现是:

  • 2岁的jQuery feature suggestion使用网络 worker 进行AJAX调用
  • this这样的问题似乎在询问一些不同的问题(在Web Worker中使用同步请求与AJAX调用)

  • 有人可以指出我这个问题的可靠消息来源吗?或者,是否有任何基准可以消除我的怀疑?

    [编辑]当WebWorker还负责解析结果(JSON.parse)时,此问题会变得更加有趣。异步解析是否提高了性能?

    最佳答案

    我创建了一个proper benchmark for that on jsperf。取决于浏览器, WebWorker方法比原始ajax调用慢速度85-95%。

    笔记:

  • 因为每个请求的网络响应时间可能不同,所以我仅测试new XMLHttpRequest()JSON.parse(jsonString);。没有真正的AJAX调用。
  • WebWorker的设置和拆卸操作是,而不是,是被测量的
  • 请注意,我正在测试单个请求,对于多个同时请求,webworker方法的结果可能更好
  • Calvin Metcalf向我解释说,在jsperf上比较同步和异步不会给出准确的结果,因此他创建了another benchmark消除了异步开销。结果仍然表明,WebWorker方法的速度明显慢。
  • Reddit discussion中,我了解到复制了主页和WebWorker之间传递的数据,并且必须在此过程中对其进行序列化。因此,仅使用WebWorker进行解析没有多大意义,无论如何都必须先对数据进行序列化和反序列化,然后才能在主页上使用它们。
  • 10-07 21:30