Javascript 网络工作者与承诺

Javascript 网络工作者与承诺,javascript,asynchronous,promise,jquery-deferred,web-worker,Javascript,Asynchronous,Promise,Jquery Deferred,Web Worker,为了使web应用程序具有响应性,您使用异步非阻塞请求。我可以设想两种方法来实现这一点。一是使用延期/承诺。另一个是网络工作者。对于Web Workers,我们最终引入了另一个进程,并产生了来回封送数据的开销。我在寻找某种性能指标,以帮助理解何时选择简单的非阻塞回调而不是Web Workers 是否有某种方法可以在不必原型化两种方法的情况下使用?我在网上看到很多关于网络工作者的教程,但我没有看到很多成功/失败的故事。我只知道我想要一个响应迅速的应用程序。我想使用Web Worker作为内存中数据结

为了使web应用程序具有响应性,您使用异步非阻塞请求。我可以设想两种方法来实现这一点。一是使用延期/承诺。另一个是网络工作者。对于Web Workers,我们最终引入了另一个进程,并产生了来回封送数据的开销。我在寻找某种性能指标,以帮助理解何时选择简单的非阻塞回调而不是Web Workers

是否有某种方法可以在不必原型化两种方法的情况下使用?我在网上看到很多关于网络工作者的教程,但我没有看到很多成功/失败的故事。我只知道我想要一个响应迅速的应用程序。我想使用Web Worker作为内存中数据结构的接口,该数据结构可以是0.5-15MB(基本上是一个DB),用户可以查询和更新


正如我对javascript处理的理解,可以将一个长时间运行的任务分割开来,这样它就可以周期性地产生控制,允许其他任务分配一部分处理时间。这是使用网络工作者的标志吗?

`延迟/承诺和网络工作者满足不同的需求:

  • 延迟/承诺是将引用分配给尚未可用的结果,并组织在结果可用或返回失败后运行的代码的构造

  • Web工作人员以异步方式执行实际工作(使用操作系统线程而不是进程-因此它们相对较轻)

换句话说,JavaScript是单线程的,您不能使用延迟/承诺异步运行代码-一旦代码运行满足承诺,就不会运行其他代码(您可以更改执行顺序,例如使用
setTimeout()
,但这不会使您的web应用程序本身更具响应性)。尽管如此,您还是可以通过每隔几毫秒增加一次索引(例如使用setInterval)来迭代一个值数组,从而产生异步查询的假象,但这几乎不实际

为了异步执行查询等工作,从而从应用程序的UI中卸载这些工作,您需要一些实际异步工作的东西。我看到几个选择:

  • 使用提供异步API的

  • 运行您自己的内存数据结构,并使用web workers(如您所示)执行实际查询

  • 使用服务器端脚本引擎(如运行代码),然后使用客户端ajax启动查询(加上处理结果的承诺)

  • 使用可通过HTTP访问的数据库(如Redis、CouchDB),并从客户端发出异步GET(即ajax)查询数据库(加上处理结果的承诺)

  • 使用例如开发混合web应用程序

在您的情况下,哪种方法是最好的?没有确切的要求很难说,但以下是我要看的尺寸:

  • 代码复杂性——如果您已经有了数据结构的代码,那么Web Workers可能是一个很好的选择,否则IndexedDB看起来更合理
  • 性能—如果您需要一致的性能,服务器端实现或DB似乎更合适
  • 体系结构/复杂性-您希望所有处理都在客户端完成,还是能够负担管理服务器端实现的工作(成本)

我发现了一篇有用的文章。

请您提供一个更具体的Promise/WebWrokers使用场景示例好吗?我们可以与UI关联的东西。非常感谢。你忘了成本。您是否能够在具有队列/功能体系结构的单独服务器上运行/重新运行繁重的报告。一个棘手的问题是低功耗设备的存在,比如iPad Pro 10.5英寸,只有2gb内存。太糟糕了,他们抢先杀死大画布的速度比其他任何东西都快。谢谢你指出这一点。为了清楚起见,您是否能够负担得起管理服务器端实现的工作暗示了它的成本方面这是一个想法: