小编典典

网络工作者处理AJAX调用-优化过度?

ajax

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

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

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

  • 2岁的jQuery功能建议使用网络工作者进行AJAX调用
  • 这个 SO问题似乎询问了一些不同的东西(在Web Worker中使用同步请求与AJAX调用)

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

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


阅读 237

收藏
2020-07-26

共1个答案

小编典典

为此在jsperf上创建了一个适当的基准。取决于浏览器, WebWorker方法 比原始ajax调用 慢85-95%


笔记:

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