node.js - nodejs的任何反模式?

标签 node.js v8

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

GC、闭包、错误处理、OO 等危险。

最佳答案

反模式:

同步执行:

我们避免所有同步执行,这也称为阻塞 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/

相关文章:

javascript - 使用 node.js 进行垃圾收集

javascript - V8 中的栈和堆(JavaScript)

javascript - 使用 Mongoose 添加不在模式中的字段

node.js - Node.js结果和错误处理-'TypeError : callback is not a function

node.js - 保持 Elasticsearch 连接处于事件状态

node.js - Kannel 作为 SMPP 服务器

javascript - ECMAscript 中的 switch-case 性能

javascript - Android 的 JNI JavaScript 绑定(bind)是否有效地将 TypedArray/ArrayBuffer 作为数组传递给 Java?

garbage-collection - Node.js 和 V8 垃圾回收

javascript - 使用深层嵌套的异步函数进行错误处理