gpt4 book ai didi

javascript - 关于 web worker 同步请求的看法

转载 作者:可可西里 更新时间:2023-11-01 01:32:01 24 4
gpt4 key购买 nike

我想知道您对此有何看法。是否推荐在 web worker 中使用同步请求(XMLHttpRequest)?我能发现什么问题?

我一直在我的应用程序中对此进行测试,但没有发现任何问题。但我害怕这种同步行为,因为以前使用 jQuery 和 AJAX 的经验。我的应用程序从数据库中的多个表中获取大量数据,这需要时间。对于从表中检索到的每一组数据,我需要立即对其进行处理,以免拖延整个过程。同时,用户正在与浏览器交互,所以它可以被阻止,我认为 web workers 可以正常工作。您认为这是一个好的解决方案吗?或者我应该尝试使用异步请求吗?

谢谢。

最佳答案

我没有确凿的事实,但既然你征求了意见......:)

Chrome 中有一个明显的问题:过多的 Web Worker 会导致静默崩溃(根据 this bug report ,上限为 ~60-100)。普遍的问题是 Web Worker 是资源密集型的,至少对于 v8 是这样。

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

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

我不认为自己是这方面的专家,所以请物有所值。

更新:为各种场景添加一些优点/缺点。

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

  • 一般来说,同步请求会更容易编写,并且会产生易于理解的代码。同步请求的一个缺点是它们可能会鼓励编写长函数,而这些函数应该分割成单独的、更小的函数。
  • 如果您进行单个调用,则两种方法完成所需的时间没有区别,同步更好,因为它更简单一些。我说它只是简单了一点,因为使用一个回调监听器的单个异步调用确实非常简单。
  • 如果您要进行必须按特定顺序发生的多个调用,例如加载用户的个人资料数据,然后根据他们的地址获取本地天气,同步调用会更好,因为它更容易编写并且更容易阅读。阅读它的主要内容是调用中的顺序依赖关系将通过选择同步进行调用及其在函数中的顺序来清楚地概述。电话越多,这就越重要。如果有很多调用,复杂性的差异可能会很大。
  • 如果您必须进行不需要按任何特定顺序发生的多次调用,那么异步请求会更好,因为整个过程可能比同步请求快几个数量级。您调用的电话越多或连接速度越慢,总耗用时间的差异就越大;这种差异会增长得非常快(呈指数增长?)。从阅读代码的人的 Angular 来看,我认为在这种情况下使用同步请求会有点误导,因为它会暗示调用具有顺序性,即使实际上没有。从编写一系列相互不依赖的异步请求的 Angular 来看,这应该不会太糟糕,因为您只需设置一个计数器,进行所有调用,在每个回调中递增计数器,您就完成了当计数器等于您调用的电话数时。

更新:@rbrundritt非常有趣且相关 observation in a comment关于这个答案:

One thing I found working with web workers is that they appear to each gain their own http limit. Browsers limit the number of concurrent http requests to around 8 or 12 depending on the browser before throttling, which can be a bottle neck if you have a lot of requests to process. I've found that if I pass my requests web workers, each can do 8 to 12 concurrent requests before they start throttling. This can be a huge benefit for some apps.

@rbrundritt

关于javascript - 关于 web worker 同步请求的看法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14068084/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com