2012-06-28 36 views
5

我在Node.js中只開發了2周,並開始重新創建一個以前用PHP編寫的網站。到目前爲止這麼好,看起來像我可以在相同或更短的時間內在PHP中完成同樣的事情(使用Express)。什麼是常見的開發問題,陷阱和建議?

我已經遇到了事情,你就必須要習慣,如使用的模塊,模塊不共享共同的環境,並進入使用回調文件系統和數據庫操作等

不過的習慣是有開發人員可能會發現很多東西,這對節點的開發非常重要嗎?其他人都在Node開發的問題有,但是直到後來纔出現。陷阱?專業知識和新手什麼都不?

我將不勝感激任何建議和意見。

+0

第一件事:這個問題不適合StackOverflow。其次:總的來說,語言**幾乎從來都不是問題。這個想法,系統**的架構幾乎總是**的問題。 – freakish

+0

@freakish是有時語言是一個問題,如果它不適合您的應用程序需要。這就是爲什麼你可能不打算在彙編程序中編寫一個網站。 –

回答

19

以下是你可能沒有意識到,直到後來的事情:

  • 節點將暫停執行最終運行垃圾收集器/週期性。發生這種情況時,您的服務器將暫停打嗝。對大多數人來說,這個問題並不是一個重大問題,但它可能成爲構建近期系統的障礙。請參閱Does Node.js scalability suffer because of garbage collection when under high load?
  • 節點是單進程,因此默認情況下僅使用1個CPU。有內置的集羣支持來運行多個進程(通常每CPU一個),並且在大多數情況下,Node社區認爲這是一個可靠的方法。不過,你可能會對這個現實感到驚訝。
  • 堆棧跟蹤往往失去了應有的事件隊列中,讓你的日誌和調試方法需要改變顯著

以下是你可能會運行一段時間,到一些小的絆腳石(我還碰到了對這些)

  • 記住在成功的回調中做callback(null, value)。作爲第一個參數傳遞null是很奇怪的,因此我忘了這麼做。相反,我不小心做了callback(value),這被調用者解釋爲錯誤,直到我調試了一段時間並拍了額頭。
  • 當您在guard子句中調用回調時忘記使用return,並且不希望函數繼續執行該點之後的執行。有時這會導致回調被調用兩次,這會導致各種不正當行爲。

這裏有一些NICE事情你可能不最初知道

  • 正是在node.js中容易得多,使用真棒流量控制的圖書館之一,做這樣加載3網絡複雜的操作資源,然後以串行方式進行2個DB調用,然後並行寫入2個日誌文件,然後發送HTTP響應。這些東西在節點中是微不足道的和美麗的,在許多同步環境中幾乎不可能。
  • 所有節點的模塊都是新的和現代的,大多數情況下,您可以找到一個設計精美的模塊,並使用優秀的API來完成您所需的任務。 Python現在也有很好的庫,但是將Node的cheerio或jsdom模塊與python的BeautifulSoup進行比較,看看我的意思。將python的requests模塊與節點的superagent進行比較。
  • 有一個社區的好處來自於一個人們關注現代Web開發的現代平臺。節點社區和PHP社區之間的對比不能被誇大。
+0

感謝您的回答! –