2011-05-21 18 views
15

node.js的anti-patterns是什麼,用node.js開發時應該避免什麼?nodejs的任何反模式?

危險像GC,封閉,錯誤處理,面向對象等。

+1

我幾乎不能相信有人投票關閉了這個話題。 – 2011-05-21 12:09:12

+0

你應該讓它成爲一個社區wiki,因爲它本身不是一個可回答的問題。 – mikl 2011-05-21 12:19:13

+0

@miki它不能成爲一個CW,因爲只有答案可以。 – Raynos 2011-05-21 12:25:29

回答

19

反模式:

同步執行:

我們避免一切同步執行,這也被稱爲阻塞IO。 node.js建立在非阻塞IO之上,任何單個阻塞調用都會引入一個直接的瓶頸。

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

是否所有阻塞的IO調用而這些必須避免。

雖然他們確實存在的原因。他們可能也可能只能在服務器的設置階段使用。在設置階段使用同步調用非常有用,因此您可以控制執行的順序,並且您不需要認真思考處理第一次傳入時的回調是否已經執行請求。

低估V8:

V8是底層的JavaScript解釋器,Node.js的基礎上。 (是的,spidernode正在開發中!)V8速度很快,它的GC非常好,它完全知道它在做什麼。沒有必要微觀優化或低估V8。

內存泄漏:

如果你來自一個基於強大的瀏覽器的JavaScript的背景,那麼你千萬不要因爲一個單頁的壽命,從秒到幾個小時很在乎內存泄漏。單個node.js服務器的生命週期從幾天到幾個月不等。

當你來自非服務器端的JS背景時,內存泄漏並不是你想到的。深入理解內存泄漏非常重要。

一些資源:

目前,我自己也不知道如何先發制人保衛反對票他們。

的JavaScript的JavaScript

所有反模式適用。在我看來,主要的破壞性的東西是像C一樣對待JavaScript(只寫程序代碼)或者像C#/ Java(僞造經典繼承)。

JavaScript應被視爲典型的OOP語言或作爲功能語言。我個人建議您使用新的ES5功能,並使用underscore作爲工具帶。如果您充分利用這兩者,您將自動開始以適合JavaScript的功能風格編寫代碼。

對於如何編寫適當的原型OOP代碼,我個人沒有任何好的建議,因爲我從來沒有掌握它。

模塊化代碼:

node.js中具有很大的require聲明,這意味着你可以模塊化所有的代碼。

node.js中不需要全局狀態。其實你需要專門去global.foo = ...提升到全局狀態,這是總是一個反模式。

通常,代碼應該是弱耦合的,EventEmitter允許您的模塊很好地解耦,並且可以編寫易於實現/替換的API。

代碼大全:

凡是在Code Complete 2本書適用,我就不再重複了。

+0

同意。但你能否提供一些先進的話題。 – 2011-05-21 12:14:22

+1

@guillin「先行話題」含糊不清。 – Raynos 2011-05-21 12:24:13

+0

我聽到過一些聲音,說v8 GC有時會讓程序停一會兒,什麼樣的代碼會造成這個問題呢? – 2011-05-21 13:31:09