任何节点的反模式?

时间:2011-05-21 10:38:41

标签: node.js v8

node.js的anti-patterns是什么,使用node.js开发时应该避免什么?

危险,如GC,关闭,错误处理,OO等。

1 个答案:

答案 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一书中的任何内容均适用,我不会重复。