代码是否因同步而受到影响?为什么编码同步获胜? 我在进行一些研究时发现了这两个链接:http://bjouhier.wordpress.com/2012/03/11/fibers-and-threads-in-node-js-what-for/,https://github.com/Sage/streamlinejs/
如果目标是防止意大利面条代码,那么显然你可以使用例如streamline.js的异步代码,这不是回调金字塔,对吗?
答案 0 :(得分:33)
你必须在这里区分两件事:
fs.readFileSync
,fs.statSync
等。所有这些功能的名称都有Sync
(*)。这些功能是真正的同步和阻止。如果您调用它们,则会阻止事件循环并终止节点的性能。您只应在服务器的初始化脚本(或命令行脚本)中使用这些函数。(*)require
也在阻止。
Meteor使用纤维。它的代码是以同步方式编写的,但它是非阻塞的。
胜利不在性能方面(这些解决方案有自己的开销,因此它们可能稍微慢一点,但它们也可以比特定代码模式(如缓存)的原始回调更好。胜利以及这些解决方案开发的原因在于可用性方面:它们允许您以同步方式编写代码,即使您正在调用异步函数。
2017年1月25日编辑:我创建了3个要点来说明非阻塞纤维: fibers-does-not-block.js,fibers-sleep-sequential.js,fibers-sleep-parallel.js
答案 1 :(得分:3)
使用streamlinejs
之类的代码时代码不是“同步”的。实际代码仍然异步运行。编写大量匿名回调函数并不是很好,这些东西对这些函数有帮助。