为什么meteor.js同步?

时间:2012-08-27 21:47:01

标签: node.js meteor node-fibers

代码是否因同步而受到影响?为什么编码同步获胜? 我在进行一些研究时发现了这两个链接:http://bjouhier.wordpress.com/2012/03/11/fibers-and-threads-in-node-js-what-for/https://github.com/Sage/streamlinejs/

如果目标是防止意大利面条代码,那么显然你可以使用例如streamline.js的异步代码,这不是回调金字塔,对吗?

2 个答案:

答案 0 :(得分:33)

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

  • 同步功能,如节点fs.readFileSyncfs.statSync等。所有这些功能的名称都有Sync(*)。这些功能是真正的同步阻止。如果您调用它们,则会阻止事件循环并终止节点的性能。您只应在服务器的初始化脚本(或命令行脚本)中使用这些函数。
  • fiber streamline.js 等库和工具。这些解决方案允许您在 sync-style 中编写代码,但您使用它们编写的代码仍将执行异步。他们阻止事件循环。

(*)require也在阻止。

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

胜利不在性能方面(这些解决方案有自己的开销,因此它们可能稍微慢一点,但它们也可以比特定代码模式(如缓存)的原始回调更好。胜利以及这些解决方案开发的原因在于可用性方面:它们允许您以同步方式编写代码,即使您正在调用异步函数。

2017年1月25日编辑:我创建了3个要点来说明非阻塞纤维: fibers-does-not-block.jsfibers-sleep-sequential.jsfibers-sleep-parallel.js

答案 1 :(得分:3)

使用streamlinejs之类的代码时代码不是“同步”的。实际代码仍然异步运行。编写大量匿名回调函数并不是很好,这些东西对这些函数有帮助。