任何节点的反模式?

gui*_* 桂林 16 v8 node.js

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

GC,闭包,错误处理,面向对象等危险.

Ray*_*nos 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功能,并使用下划线作为实用带.如果您充分利用这两者,您将自动开始以适合JavaScript的功能样式编写代码.

我个人对如何编写适当的原型OOP代码没有任何好的建议,因为我从来没有掌握它.

模块化代码:

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

node.js中不需要全局状态.实际上你需要特别global.foo = ...提升到全球状态,这总是一种反模式.

通常代码应该是弱耦合的,EventEmitter允许您的模块很好地解耦并编写易于实现/替换的API.

代码完成:

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