JavaScript中的Fibers客户端实现。

6
我知道meteorjs使用node-fibers,但是它们的github页面表示它仅适用于服务器端和v8(还是不是这样?)。
  1. meteorjs如何在客户端实现非阻塞的同步api?
  2. 它是否与除chrome之外的其他浏览器兼容?
如果有人能指向纯JS实现的fibers,或者解释它们是如何工作的(它们有自己的事件循环吗?),我将不胜感激。
同时,任何指向已经工作的客户端fibers实现的github项目的链接也将不胜感激!
毕竟现在是圣诞节 :)

这是一个非常好的问题。实际上,我甚至没有意识到它是这样的。 - Alexandre Bourlier
4个回答

3

node-fibers项目是Node.js的一个服务器端扩展,用C++实现,仅适用于Windows。你可能永远不会在Web浏览器中看到它。


1
没错,但是 Meteor 如何在客户端实现纤程呢? - g00fy
@g00fy 不是这样的。我认为你可能在文档中误解了某些内容。 - Pointy
@g00fy 可能他们会使用“Web Workers”,但是那对我来说并不像线程/纤程那么相似。 - Pointy

2

JavaScript是单线程的。如果你想实现非阻塞I/O,你需要实现一个类似node.js的消息循环和异步I/O库。默认情况下,所有客户端I/O都是同步的,不过Meteor和其他库都提供了回调函数的支持。

是的,Meteor的客户端实现可以在除了Chrome之外的多个浏览器上运行。


那么,明确一下,Meteor如何在客户端(异步)以同步方式处理Collection.find?您可以在此处找到示例:https://github.com/meteor/meteor/blob/master/examples/leaderboard/leaderboard.js - g00fy
2
通过响应式。Meteor会监视集合中的更改。当检测到更改时,您的模板代码将重新运行,并重新生成生成的HTML和DOM部分。 - David Wihl

0

试试 JSCEX(Windjs

Wind.js 是一个先进的库,它使我们能够使用纯 JavaScript 控制流程进行异步编程(以及更多),而无需额外的预编译步骤。

它适用于服务器端和客户端。


感谢@softguy,https://www.npmjs.org/package/wind需要更多的英文说明才能让我理解它。 - Sebastian Sastre
同意,这似乎是一个真正的答案。 这里有一个更好的主页: https://github.com/JeffreyZhao/wind - Sam Watkins

0

我相信在服务器端,由于MiniMongo的存在,一切都是纯同步的。因此,不需要异步回调或更准确地说,Meteor不需要等待来自服务器的update回调才能继续执行下一条指令,因为MiniMongo会同步响应。

我还没有通过查看源代码来验证我刚才说的一切,但我无法想象它如何以不同的方式工作。

编辑

我还没有深入研究源代码,但Meteor指南的这一部分似乎与我的想法一致。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接