最佳答案
反模式:
同步执行:
我们避免所有同步执行,这也称为阻塞 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 的所有反模式都适用。在我看来,主要的破坏性是将 JavaScript 视为 C(仅编写过程代码)或 C#/Java(伪造经典继承)。
JavaScript 应被视为原型(prototype) OOP 语言或函数式语言。我个人建议你使用新的 ES5 特性,同时使用 underscore作为实用腰带。如果您充分利用这两者的优势,您将自动开始以适合 JavaScript 的函数式风格编写代码。
我个人对如何编写适当的原型(prototype) OOP 代码没有任何好的建议,因为我从来没有掌握它的窍门。
模块化代码:
node.js 有很棒的 require
语句,这意味着你可以模块化你的所有代码。
node.js 中不需要全局状态。实际上,您需要专门去 global.foo = ...
提升到全局状态,这是 always 一种反模式。
通常代码应该是弱耦合的,EventEmitter 可以很好地解耦您的模块并编写易于实现/替换的 API。
代码完成:
Code Complete 2 中的任何内容本书适用,我不会重复。
关于node.js - nodejs的任何反模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6081184/