首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Web Workers vs Promises

Web Workers vs Promises
EN

Stack Overflow用户
提问于 2014-01-05 10:58:29
回答 1查看 16K关注 0票数 36

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

有没有某种方法可以在不对两种方法都进行原型的情况下制定使用哪种方法?我在网上看到了很多关于Web Worker的教程,但我没有看到多少成功/失败的故事。我只知道我想要一个响应式的应用。我正在考虑使用Web Worker作为内存中数据结构的接口,该内存数据结构的大小可能在0.5-15MB之间(本质上是一个DB),用户可以查询和更新。

根据我对javascript处理的理解,有可能将一个长时间运行的任务分成片,这样它就会周期性地产生控制,从而允许其他任务占用一部分处理时间。这会是使用Web Workers的标志吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-05 12:50:47

`延迟/承诺和Web Worker解决不同的需求:

  • Deferred/promise是一些构造,用于将引用分配给尚不可用的结果,并组织在结果可用或返回失败时运行的代码。
  • 网络工作者异步执行实际工作(使用操作系统线程而不是进程-因此它们相对较轻)。

换句话说,JavaScript是单线程的,你不能使用延迟/承诺来异步运行代码--一旦代码运行完成了承诺,其他代码就不会运行了(你可以改变执行顺序,例如使用setTimeout(),但这并不会让你的web应用程序本身更具响应性)。尽管如此,您仍然可以通过某种方式创建异步查询的假象,例如,通过每隔几毫秒递增索引(例如,使用setInterval)来迭代值数组,但这几乎不实用。

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

  • 使用提供异步API的IndexedDB
  • 运行您自己的内存中数据结构,并使用web工作器,如您所述,执行实际查询,
  • 使用服务器端脚本引擎(如NodeJS )运行代码,然后使用客户端ajax启动查询(以及承诺处理结果),

< code >H116使用可通过HTTP访问的数据库(例如Redis,CouchDB),从客户端发出异步GET (即ajax)来查询数据库(外加处理结果的承诺),

开发混合web应用程序

在您的情况下,哪种方法最好?如果没有确切的要求,很难判断,但以下是我将考虑的维度:

  • 代码复杂性-如果您已经有了用于数据结构的代码,Web Workers可能是一个很好的选择,否则IndexedDB看起来更像sensible.
  • Performance -如果您需要一致的性能,服务器端实现或数据库看起来更像appropriate
  • Architecture/complexity -您是希望所有处理都由客户端完成,还是负担得起管理服务器端实现的努力(成本)?

我发现this book是一个有用的读物。

票数 57
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20929508

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档