任何nodejs的反模式?

什么是node.js的反模式 ,用node.js开发时应该避免什么?

像GC,closures,error handling,面向对象等危险。

反模式:

同步执行:

我们避免了所有的同步执行,这也被称为阻塞IO。 node.jsbuild立在非阻塞IO的基础之上,任何一个阻塞调用都会引起一个直接的瓶颈。

  • fs.renameSync
  • fs.truncateSync
  • fs.statSync
  • path.existsSync

是所有阻止IO调用,这些都必须避免。

尽pipe如此,它们确实存在。 他们可能也可能只能在服务器的设置阶段使用。 在设置阶段使用同步调用非常有用,因此您可以控制执行的顺序,而且您不必在处理第一个来电时仔细考虑callback是否已经执行请求。

低估V8:

V8是node.js构build的底层JavaScript解释器。 (是的spidernode是在工作!)V8是快速的,这是GC是非常好的,它知道它到底在做什么。 没有必要微观优化或低估V8。

内存泄漏:

如果您来自基于浏览器的强大的JavaScript背景,那么您并不关心内存泄漏问题,因为单个页面的生命周期从几秒到几个小时不等。 在哪里作为单个node.js服务器的生命周期范围从几天到几个月。

内存泄漏只是当你来自非服务器端的JS背景时,你不会想到的东西。 深入理解内存泄漏是非常重要的。

一些资源:

  • 如何防止node.js中的内存泄漏?
  • 使用Node.js服务器debugging内存泄漏

目前,我自己不知道如何先发制人地再次捍卫他们。

JavaScript的

JavaScript的所有反模式都适用。 在我看来,主要的破坏性的东西是把JavaScript当成C(只写程序代码)或者像C#/ Java(伪造经典inheritance)。

JavaScript应该被视为典型的OOP语言或作为一种function性语言。 我个人build议您使用新的ES5function,并使用下划线作为工具带。 如果您充分利用这两者,您将自动开始以适合JavaScript的function风格编写代码。

对于如何编写适当的原型OOP代码,我个人并没有什么好的build议,因为我从来没有掌握过它。

模块化代码:

node.js有很好的require语句,这意味着你可以模块化所有的代码。

node.js中不需要全局状态 其实你需要专门去global.foo = ...提升到全球的状态,这总是一个反模式。

一般来说,代码应该是弱耦合的,EventEmitter允许你的模块很好地解耦,编写一个易于实现/replace的API。

代码完成:

Code Complete 2书中的任何内容都适用,我不再重复。