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

关于Web Worker中同步请求的意见

文嘉禧
2023-03-14
问题内容

我想知道你对此有何看法。建议在Web Worker中使用同步请求(XMLHttpRequest)?我能找到什么问题?

我已经在我的应用程序中对此进行了测试,但没有发现任何麻烦。但是由于使用jQuery和AJAX的旧经验,我担心这种同步行为。我的应用程序从数据库中的多个表中获取大量数据,这需要时间。对于从表中检索到的每束数据,我需要立即对其进行处理,以免延迟整个过程。同时,用户正在与浏览器进行交互,因此可以将其阻止,我认为网络工作者可以正常工作。您认为这是一个很好的解决方案吗?还是应该尝试使用异步请求?

谢谢。


问题答案:

我没有确凿的事实,但是既然您要征求意见… :)

Chrome中存在一个明显的问题:太多的Web
Worker会导致无提示的崩溃(根据此bug报告,上限为60-100
)。普遍的问题是,至少在v8中,Web Workers占用大量资源。

假设最终要进行多个HTTP调用,如果要在Web Worker中进行同步HTTP调用:

  • 从某种意义上说,您是在用异步HTTP调用来交换异步Web Workers,这只会在混合中添加其他中介,而您仍然必须异步管理事物。
  • 如果您走的是更简单,更节省资源的路线,并且只使用一个Web Worker,您将花费大量时间等待它给您响应。
  • 另一方面,如果您使用多个Web Worker,则可能需要跟踪哪个空闲,忙碌等,在这种情况下,您将创建一个本地的调度程序,而不是使用自带的调度程序。嵌入浏览器。
  • 最后,Web Workers很昂贵(显然),您最终可能会创建多个Web Workers,以便他们可以坐下来等待HTTP调用完成。

我不认为自己是这方面的专家,所以请考虑它的价值。

更新:针对各种情况添加了一些优点/缺点。

在使用Web Worker进行同步和异步HTTP调用之间进行选择时,会想到一些优点/缺点:

  • 通常,同步请求将更易于编写,并将导致易于遵循的代码。同步请求的一个缺点是它们可能鼓励编写长函数,这些长函数应划分为单独的较小的函数。
  • 如果您要进行单个调用,则在两种方法之间完成时间所花费的时间没有差异,并且同步更好,因为它更简单一些。我说这只是简单一点,因为使用一个回调侦听器进行单个异步调用确实非常简单。
  • 如果您要进行多个按特定顺序进行的调用,例如加载用户的个人资料数据,然后根据其地址获取本地天气,则同步调用会更好,因为它更容易编写,也更容易读。读取它的主要内容是调用中的顺序依赖关系,将通过选择同步进行调用及其在函数中的顺序来明确概述。呼叫越多,这个问题就越重要。如果有许多呼叫,那么复杂性的差异可能会很大。
  • 如果您必须进行多个不需要按任何特定顺序进行的调用,那么异步请求会更好,因为与同步请求相比,整个过程可能要快几个数量级。您拨打的电话越多或连接速度越慢,总经过时间的差异就越大;这种差异将很快增长(成倍增长?)。从阅读代码的人的角度来看,我认为在这种情况下使用同步请求会 有些 具有误导性,因为这将暗示呼叫具有顺序性质,即使没有。从编写一系列彼此不依赖的异步请求的角度来看,应该不会太糟糕,因为您只需设置一个计数器,进行所有调用,在每个回调中增加计数器,然后完成当计数器等于您拨打的电话数时。

我发现与网络工作者一起工作的一件事是,他们似乎每个人都有自己的http限制。根据节流之前的浏览器,浏览器将并发http请求的数量限制为8或12个左右,如果您要处理大量请求,这可能会成为瓶颈。我发现,如果我通过我的请求网络工作者,每个人可以在开始节流之前执行8到12个并发请求。对于某些应用程序来说,这可能是一个巨大的好处。



 类似资料:
  • 问题内容: 如果我需要按顺序调用3 http API,那么以下代码将是更好的选择: 问题答案: 使用像这样的延期。 如果您需要传递范围,则只需执行以下操作

  • 本文向大家介绍全面解析iOS中同步请求、异步请求、GET请求、POST请求,包括了全面解析iOS中同步请求、异步请求、GET请求、POST请求的使用技巧和注意事项,需要的朋友参考一下 先给大家分别介绍下iOS中同步请求、异步请求、GET请求、POST所代表的意思,然后在逐一通过实例给大家介绍。 1、同步请求可以从因特网请求数据,一旦发送同步请求,程序将停止用户交互,直至服务器返回数据完成,才可以进

  • 问题内容: 同步请求和异步请求之间的性能(速度方面)是否有差异? 使用异步请求的所有原因是什么? 问题答案: 您应该始终使用异步Ajax请求,实际上,我只知道应该使用同步Ajax请求的一个地方,即您是否在Ajax请求中,将新的JavaScript文件嵌入客户端,然后引用类型和/或原始Ajax请求返回的JavaScript文件中的对象。然后,应该(或可以理智地)通过使用同步Ajax请求包括对这个新J

  • 本文向大家介绍详解XMLHttpRequest(一)同步请求和异步请求,包括了详解XMLHttpRequest(一)同步请求和异步请求的使用技巧和注意事项,需要的朋友参考一下 XMLHttpRequest 让发送一个HTTP请求变得非常容易。你只需要简单的创建一个请求对象实例,打开一个URL,然后发送这个请求。当传输完毕后,结果的HTTP状态以及返回的响应内容也可以从请求对象中获取。  通过XML

  • 问题内容: 最新版本的Chrome是否已停止同步Ajax调用?进行同步Ajax调用时出现错误。我们更新到最新的Chrome版本-73.0.3683.103后,该问题突然出现。目前,同步调用在Firefox和IE上可以正常工作。我们正在错误以下 消息:“无法在’XMLHttpRequest’上执行’发送’:无法加载’Path …’:页面关闭时的同步XHR”。名称:“ NetworkError” 有人

  • 下面的代码我得到当我使用异步.当我使用同步时,它成功了。 链接失败,但在异步和同步情况下都成功。 出什么事了?这是在Python3.4中实现的。2在FreeBSD8上,aiohttp 0.14。4,请求2.5。3. 此操作的输出为: