node.js的anti-patterns是什么,使用node.js开发时应该避免什么?
危险,如GC,关闭,错误处理,OO等。
答案 0 :(得分:21)
反模式:
同步执行:
我们避免所有同步执行,这也称为阻塞IO。 node.js构建在非阻塞IO之上,任何单个阻塞调用都会引起直接的瓶颈。
fs.renameSync
fs.truncateSync
fs.statSync
path.existsSync
是否所有阻塞IO调用都必须避免。
他们确实存在是有原因的。它们可能也可能仅在服务器的设置阶段使用。在设置阶段使用同步调用非常有用,这样您就可以控制执行顺序,并且在处理第一个传入时,您不需要非常认真地考虑哪些回调已执行或尚未执行请求。
低估V8:
V8是node.js构建的底层JavaScript解释器。 (是的,spidernode正在开发中!)V8很快,它的GC非常好,它确切知道它在做什么。无需微观优化或低估V8。
内存泄漏:
如果您来自强大的基于浏览器的JavaScript背景,那么您不必关心内存泄漏,因为单个页面的生命周期从几秒到几小时不等。单个node.js服务器的生命周期从几天到几个月不等。
当你来自非服务器端JS背景时,内存泄漏并不是你想到的。了解内存泄漏非常重要。
一些资源:
目前我自己也不知道如何先发制人地捍卫他们。
<强>的JavaScript 强>
JavaScript的所有反模式都适用。在我看来,主要的破坏性是像C(只编写程序代码)或像C#/ Java(伪造经典继承)一样对待JavaScript。
JavaScript应被视为原型OOP语言或功能语言。我个人建议您使用新的ES5功能,并使用underscore作为实用带。如果您充分利用这两者,您将自动开始以适合JavaScript的功能样式编写代码。
我个人对如何编写正确的原型OOP代码没有任何好的建议,因为我从来没有掌握它。
模块化代码:
node.js有很棒的require
语句,这意味着您可以模块化所有代码。
node.js中不需要全局状态。实际上你需要专门去global.foo = ...
提升到全局状态,这总是一个反模式。
通常代码应该是弱耦合的,EventEmitter允许你的模块很好地解耦,并编写一个易于实现/替换的API。
代码完成:
Code Complete 2一书中的任何内容均适用,我不会重复。