当前位置: 首页 > 面试题库 >

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

姬凡
2023-03-14
问题内容

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

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

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

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

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

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


问题答案:

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

笔记:

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


 类似资料:
  • 问题内容: angularJS如何使用Web Worker在后台运行进程?我有什么模式可以遵循吗? 当前,我正在使用在单独的Web worker中具有模型的服务。该服务实现的方法如下: 在实现中,此方法将带有数据的消息发送给工作程序。这使我可以抽象出它是在单独的线程中执行的事实,并且我还可以提供一种对服务器甚至在同一线程中执行此操作的服务器进行查询的实现。 由于我是Java语言的新手,我只是在回收

  • 我的web应用程序是由对服务器端的大量Ajax调用组成的。每次客户登录我的站点时,登录页面将从服务器获取(JSON Web令牌)令牌,并将其作为存储在客户端。(我选择将其存储为cookie,是因为这是唯一让浏览器自动发送的方式,而且据说比HTML5网页存储更安全)。令牌中有一个字段描述令牌的过期日期。对于每个Ajax调用,都会发送令牌进行身份验证。 但是上面的方法有一个问题:“如何在客户端优雅地处

  • 网络爬虫使用的技术--数据抓取: 在爬虫实现上,除了scrapy框架之外,python有许多与此相关的库可供使用。其中,在数据抓取方面包括: urllib2(urllib3)、requests、mechanize、selenium、splinter; 其中,urllib2(urllib3)、requests、mechanize用来获取URL对应的原始响应内容;而selenium、splinter通

  • 我在页面中有以下脚本代码。当进行ajax调用时,我可以看到浏览器检查/调试器部分抛出net::ERR_EMPTY_RESPONSE错误。它在本地主机环境中工作正常,但在生产中抛出上述错误。 在客户端代码中, 在服务器端代码(PHP)中,我在updateUsersData.PHP中有以下代码: 你认为这是由于带有过期调用的头还是Jquery 1.9.1版本中的错误?我们以前版本的时候没有发现这样的错

  • 本文向大家介绍AJAX工作原理及优缺点详解,包括了AJAX工作原理及优缺点详解的使用技巧和注意事项,需要的朋友参考一下 AJAX 是一种用于创建快速动态网页的技术。通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。 一、ajax所包含的技术 大家都知道ajax并非一种新的技术,而是几种原有技术的结合体。它由下列技

  • git 提供相当灵活的协作方式,最常见的方式为:协作者获得原始版本库的镜像,并在上面工作;发起者从协作者那里获取更新 协作者通过git clone创建一个镜像版本库: git clone user@url:~/path [local] 网络对于 git 来说是透明的,凡是可以访问的位置,如 http、ftp、ssh……,甚至本地路径,对于 git 来说没有什么区别。 通过以下命令,创建一个本机原