为什么meteor.js是同步的?

不是代码效率是同步的吗? 为什么编码同步取胜? 我发现这两个链接在做一些研究: http : //bjouhier.wordpress.com/2012/03/11/fibers-and-threads-in-node-js-what-for/,https : //github.com /贤者/ streamlinejs /

如果目标是防止意大利面代码,那么显然你可以有asynchronous代码,例如streamline.js,这不是一个callback金字塔,对吧?

       

网上收集的解决方案 "为什么meteor.js是同步的?"

你必须在这里区分两件事情:

  • 同步函数,如节点的fs.readFileSyncfs.statSync等。所有这些函数的名称(*)都有一个Sync 。 这些function是真正的同步阻塞 。 如果你打电话给他们,你可以阻止事件循环,并杀死节点的性能。 您应该只在服务器的初始化脚本(或命令行脚本)中使用这些函数。
  • 库和工具,如光纤streamline.js 。 这些解决scheme允许您以同步方式编写代码,但是用它们编写的代码仍将asynchronous执行。 他们阻止事件循环。

(*) require也是阻塞的。

meteor使用纤维 。 它的代码是以同步方式编写的,但是它是非阻塞的。

胜利不是在性能方面(这些解决scheme有自己的开销,所以他们可能会稍微慢一点,但他们也可以做比原始callback在特定的代码模式,如caching更好)。 胜利,以及为什么这些解决scheme已经开发的原因在于可用性方面:即使您调用asynchronous函数,它们也允许您以同步方式编写代码。

Jan 25 2017编辑 :我创build了三个要点来说明非阻塞光纤: 光纤不做block.js , 光纤睡眠sequential.js , 光纤睡眠parallel.js

当使用像streamlinejs这样的代码时,代码不是“同步的”。 实际的代码仍然会asynchronous运行 。 编写大量的匿名callback函数并不是很漂亮,这些都是有帮助的。