为了使 Web 应用程序具有响应能力,您可以使用异步非阻塞请求。我可以设想两种方法来实现这一目标。一种是使用 deferreds/promise。另一个是网络工作者。对于 Web Workers,我们最终引入了另一个流程,并且产生了来回整理数据的开销。我一直在寻找某种性能指标来帮助理解何时选择简单的非阻塞回调而不是 Web Workers。
是否有某种方法可以制定使用哪种方法而无需对两种方法进行原型设计?我在网上看到很多关于 Web Workers 的教程,但我没有看到很多成功/失败的故事。我只知道我想要一个响应式应用程序。我正在考虑使用 Web Worker 作为内存中数据结构的接口,该数据结构可能是用户可以查询和更新的 0.5-15MB(本质上是数据库)。
据我了解 JavaScript 处理,可以采用单个长时间运行的任务并将其分割,以便它定期产生控制,从而允许其他任务获得处理时间的一部分。这是使用 Web Workers 的标志吗?
`Deferred/Promise 和 Web Workers 满足不同的需求:
换句话说,JavaScript 是单线程的,你不能使用 deferred/promises 来run异步代码 - 一旦代码运行实现了承诺,就不会运行其他代码(您可以更改执行顺序,例如使用setTimeout()
,但这并不会让您的网络应用程序本身更具响应性)。尽管如此,您仍然可以通过以下方式创建异步查询的错觉:通过每隔几毫秒增加索引来迭代值数组(例如使用 setInterval),但这几乎不实用。
为了异步执行查询等工作,从而从应用程序的 UI 中卸载这项工作,您需要一些实际异步工作的东西。我看到几个选项:
use an 索引数据库 https://developer.mozilla.org/en/docs/IndexedDB它提供了一个异步API,
运行您自己的内存中数据结构,并按照您的指示使用网络工作人员来执行实际查询,
使用服务器端脚本引擎,例如NodeJS http://nodejs.org/运行您的代码,然后使用客户端 ajax 启动查询(加上处理结果的承诺),
使用可通过 HTTP 访问的数据库(例如 Redis、CouchDB),并从客户端发出异步 GET(即 ajax)来查询数据库(加上处理结果的承诺),
使用例如开发混合网络应用程序Parse https://parse.com/.
哪种方法最适合您的情况?如果没有确切的要求,很难说,但以下是我会考虑的尺寸:
- 代码复杂性——如果您已经有了数据结构的代码,那么 Web Workers 可能是一个不错的选择,否则 IndexedDB 看起来更明智。
- 性能——如果您需要一致的性能,服务器端实现或数据库似乎更合适
- 架构/复杂性——您是否希望所有处理都在客户端完成,或者您能负担得起管理服务器端实现的精力(成本)吗?
I found 这本书 http://pragprog.com/book/tbajs/async-javascript一本有用的读物。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)