javascript - node js應用 - 如何決定何時使用Node.js?



8 Answers

我相信Node.js最適合實時應用:在線遊戲,協作工具,聊天室,或者其他用戶需要立即看到一個用戶(或機器人?或傳感器?)對應用程序做什麼的任何事情,沒有頁面刷新。

我還要提一下,Socket.IO與Node.js相結合,可以比長輪詢更進一步減少實時延遲。 作為最壞的情況,Socket.IO將回歸長輪詢,而是使用網絡套接字甚至Flash(如果可用的話)。

但是我還應該提一下,使用Node.js可以更好地解決因線程而導致代碼阻塞的任何情況。 或者您需要應用程序進行事件驅動的任何情況。

此外,Ryan Dahl在一次談話中說,我曾經參加過Node.js基準測試,與Nginx的常規舊HTTP請求密切相關。 因此,如果我們使用Node.js構建,我們可以非常有效地服務我們的常規資源,當我們需要事件驅動的東西時,它就可以處理它了。

另外,它一直都是JavaScript。 Lingua Franca整個堆棧。

Question

node js website

我是這類新手,但最近我聽到很多關於Node.js好處。 考慮到我一般喜歡使用jQuery和JavaScript,我不禁想知道如何決定何時使用Node.js. 我想到的Web應用程序就像Bitly一樣 - 需要一些內容,歸檔它。

從我過去幾天所做的所有作業中,我獲得了以下信息。 Node.js的

  • 是一個命令行工具,可以作為常規Web服務器運行,並讓一個人運行JavaScript程序
  • 利用偉大的V8 JavaScript引擎
  • 當你需要同時做幾件事時非常好
  • 是基於事件的所以所有美妙的Ajax類似的東西都可以在服務器端完成
  • 讓我們在瀏覽器和後端之間共享代碼
  • 讓我們與MySQL交談

我遇到的一些消息來源是:

考慮到Node.js幾乎可以在亞馬遜的EC2實例上運行,我試圖了解哪些類型的問題需要Node.js,而不是像PHPPythonRuby那樣強大的國王。 。 我知道這實際上取決於人們對語言的專業知識,但我的問題更多地涉及一般類別:何時使用特定框架以及它特別適合哪種類型的問題?




簡而言之:

Node.js非常適合具有大量並發連接的應用程序,並且每個請求只需要很少的CPU週期,因為在執行函數期間會阻止事件循環(包含所有其他客戶端)。

關於Node.js中事件循環的一篇好文章是Mixu的技術博客:了解node.js事件循環




使用Node啟動下一個項目的最重要原因...

  • 所有最酷的傢伙都進入了它...所以它一定很有趣。
  • 你可以在冷卻器上進行聚會,並有很多Node冒險來吹噓。
  • 在雲託管成本方面,你是一個便宜的pincher。
  • 用Rails完成了那個
  • 你討厭IIS部署
  • 你的舊IT工作變得相當沉悶,你希望你處於一個閃亮的新起點。

期待什麼......

  • 如果沒有您從未需要的所有服務器膨脹軟件,您將感受到安全和安全。
  • 像火箭一樣運行並且可以很好地擴展。
  • 你夢想著它。 你安裝了它。 節點包repo packages是世界上最大的開源庫生態系統。
  • 你的大腦會在嵌套回調的土地上扭曲時間......
  • ......直到你學會遵守Promises
  • SequelizePassport是您的新API朋友。
  • 調試大多數異步代碼將會變得有趣
  • 所有Noders掌握Typescript

誰用它?

  • PayPal,Netflix,沃爾瑪,LinkedIn,Groupon,優步,GoDaddy,道瓊斯
  • 這就是他們切換到Node的原因。



我認為沒有人提到Node.js的另一件好事是令人驚嘆的社區,包管理系統(npm)以及存在的模塊數量,只需將它們包含在package.json文件中即可包含這些模塊。




它可以在哪裡使用

  • 高度事件驅動且I / O嚴重受限的應用程序
  • 處理與其他系統的大量連接的應用程序
  • 實時應用程序(Node.js是從頭開始設計的,實時且易於使用。)
  • 將大量信息流傳輸到其他來源和從其他來源流動的應用程序
  • 高流量,可擴展的應用程序
  • 移動應用程序必須與平台API和數據庫通信,而無需進行大量數據分析
  • 構建網絡應用程序
  • 需要經常與後端通信的應用程序

在移動領域,黃金時段的公司依靠Node.js來提供移動解決方案。 看看為什麼?

LinkedIn是一位傑出的用戶。 他們的整個移動堆棧都是基於Node.js構建的。 他們從每個物理機器上運行15個服務器,15個實例,到4個實例 - 可以處理雙倍的流量!

eBay推出了ql.io,一種用於HTTP API的Web查詢語言,它使用Node.js作為運行時堆棧。 他們能夠調整常規開發人員質量的Ubuntu工作站,以處理每個node.js進程超過120,000個活動連接,每個連接消耗大約2kB內存!

Walmart重新設計其移動應用程序以使用Node.js並將其JavaScript處理推送到服務器。

欲了解更多信息,請訪問: http://www.pixelatingbits.com/a-closer-look-at-mobile-app-development-with-node-js/http://www.pixelatingbits.com/a-closer-look-at-mobile-app-development-with-node-js/




我為新項目選擇Node.js的另一個原因是:

能夠進行基於純雲的開發

我已經使用了Cloud9 IDE一段時間了,現在我無法想像沒有它,它涵蓋了所有的開發生命週期。 您所需要的只是一個瀏覽器,您可以隨時隨地在任何設備上進行編碼。 您無需在一台計算機中籤入代碼(如在家中),然後在另一台計算機(例如在工作場所)結賬。

當然,可能有基於雲的IDE用於其他語言或平台(Cloud 9 IDE也增加了對其他語言的支持),但使用Cloud 9進行Node.js開發對我來說真的是一次很棒的體驗。




穿石棉longjohns ...

昨天我的標題是Packt Publications, 使用JavaScript進行反應式編程 。 它不是一個以Node.js為中心的標題; 前面的章節旨在涵蓋理論,後來代碼密集的章節涵蓋了實踐。 因為我不認為沒有給讀者一個網絡服務器是合適的,所以Node.js似乎是最明顯的選擇。 該案件在開盤前已經關閉。

我本可以非常樂觀地看到我對Node.js的體驗。 相反,我誠實地談到了我遇到的好點和壞點。

讓我在這裡提供一些相關的引用:

警告:Node.js及其生態系統很熱 - 足以讓你嚴重燒傷!

當我在數學方面擔任教師助理時,我被告知的一個非顯而易見的建議是不要告訴學生一些事情是“容易的”。回想起來,原因有點明顯:如果你告訴別人一些事情很容易,那麼沒有看到解決方案可能最終感覺(甚至更多)愚蠢,因為他們不僅沒有得到如何解決問題,而且他們太愚蠢無法理解的問題是一個簡單的問題!

有些問題不僅會讓來自Python / Django的人感到煩惱,如果你改變任何東西,它會立即重新加載源代碼。 對於Node.js,默認行為是,如果進行一次更改,舊版本將繼續處於活動狀態,直到時間結束或直到您手動停止並重新啟動服務器。 這種不恰當的行為不僅會惹惱Pythonistas; 它還會激怒提供各種解決方法的本機Node.js用戶。 在撰寫本文時,問題“在Node.js中自動重新加載文件”有200多個upvotes和19個答案; 編輯將用戶定向到保姆腳本,節點主管,主頁位於http://tinyurl.com/reactjs-node-supervisor 。 這個問題為新用戶提供了很大的機會感到愚蠢,因為他們認為他們已經解決了問題,但舊的,錯誤的行為完全沒有改變。 並且很容易忘記反彈服務器; 我已多次這樣做了。 我想提供的信息是,“不,你不是傻瓜,因為Node.js的這種行為讓你感到厭倦; 只是Node.js的設計者沒有理由在這裡提供適當的行為。 試著應對它,也許從節點主管或其他解決方案中獲得一些幫助,但請不要走開,感覺你是愚蠢的。 你不是那個有問題的人; 問題出在Node.js的默認行為中。“

經過一些辯論之後,這部分被遺留下來,正是因為我不想給人一種“很容易”的印象。我在工作中反复切手,而且我不想平息困難。讓你相信讓Node.js及其生態系統運行良好是一件簡單的事情,如果它對你來說也不是直截了當的,你就不知道你在做什麼。 如果你沒有使用Node.js遇到令人討厭的困難,那太好了。 如果你這樣做,我希望你不要離開感覺,“我是愚蠢的 - 我一定有問題。”如果你遇到與Node.js有關的令人討厭的驚喜,你就不是傻瓜。 不是你! 它是Node.js及其生態系統!

在最後幾章和結論中逐漸提升後,我並不真正想要的附錄討論了我在生態系統中能夠找到的內容,並為愚蠢的文字主義提供了一種解決方法:

另一個看起來非常合適並且可以兌換的數據庫是HTML5鍵值存儲的服務器端實現。 這種方法具有API的主要優勢,大多數優秀的前端開發人員都能很好地理解。 就此而言,它也是一個API,大多數不那麼優秀的前端開發人員都能很好地理解。 但是使用node-localstorage包,雖然不提供字典語法訪問(您希望使用localStorage.setItem(key,value)或localStorage.getItem(key),而不是localStorage [key]),但實現了完整的localStorage語義,包括默認的5MB quota ?為什麼? 服務器端JavaScript開發人員是否需要受到保護?

對於客戶端數據庫功能,每個網站5MB的配額確實是一個慷慨而有用的空間,讓開發人員可以使用它。 你可以設置一個低得多的配額,並且仍然為開發人員提供了一個不可估量的改進,而不是一瘸一拐地進行cookie管理。 5MB的限制並不能很快地適應大數據客戶端處理,但是資源豐富的開發人員可以用來做很多事情,這是一個非常慷慨的限制。 但另一方面,5MB並不是最近購買的大多數磁盤的一個特別大的部分,這意味著如果你和一個網站不同意什麼是合理使用磁盤空間,或者某些網站只是很糟糕,它並不真正花費你很多,除非你的硬盤已經太滿,否則你沒有淹沒硬盤的危險。 如果平衡稍微少一點或多一點,我們可能會更好,但總的來說,它是解決客戶端背景的內在緊張的一個不錯的解決方案。

但是,可能會輕輕地指出,當您是服務器的代碼編寫者時,您不需要任何額外的保護來使您的數據庫超過可容忍的5MB大小。 大多數開發人員既不需要也不希望工具充當保姆,並保護他們不要存儲超過5MB的服務器端數據。 而在客戶端的5MB配額是一個黃金平衡行為在Node.js服務器上相當愚蠢。 (並且,對於本附錄中涵蓋的多個用戶的數據庫,可能會略微痛苦地指出,每個用戶帳戶不是5MB,除非您在每個用戶帳戶的磁盤上創建一個單獨的數據庫;這是5MB之間共享所有用戶帳戶在一起。如果你病毒式傳播,那可能會很痛苦 !)文檔說明配額是可自定義的,但是一周前給開發人員詢問如何更改配額的電子郵件是無法回答的,就像問題一樣。 我能找到的唯一答案是在Github CoffeeScript源代碼中,它被列為構造函數的可選第二個整數參數。 所以這很容易,您可以指定一個等於磁盤或分區大小的配額。 但是除了移植一個沒有意義的功能之外,該工具的作者完全沒有遵循一個非常標準的解釋0的約定,因為對於變量或函數來說意味著“無限制”,其中整數是指定某些資源使用的最大限制。 這種錯誤的最好做法可能是指定配額是無限:

if (typeof localStorage === 'undefined' || localStorage === null)
  {      
  var LocalStorage = require('node-localstorage').LocalStorage;
  localStorage = new LocalStorage(__dirname + '/localStorage',
    Infinity);
  }

按順序交換兩條評論:

人們不斷地使用JavaScript作為一個整體來自己的腳,並且JavaScript的一部分被製作成可敬的語言是Douglas Crockford本質上說,“JavaScript作為一種語言有一些非常好的部分和一些非常糟糕的部分。 這是好的部分。 只要忘記其他任何東西都在那裡。“也許熱門的Node.js生態系統會發展自己的 ”道格拉斯·克羅克福德“,他會說,”Node.js生態系統是一個編碼狂野的西部,但有一些真正的寶石可以找到。 這是一個路線圖。 以下是幾乎不惜任何代價避免的區域。 以下是可以在任何語言或環境中找到最豐富的付費區域。“

也許其他人可以將這些話作為挑戰,並遵循Crockford的主導並為Node.js及其生態系統寫下“好的部分”和/或“更好的部分”。 我買了一份!

考慮到所有項目的熱情程度和工作時間,可能需要在一年,或兩年,或三年內,對本文撰寫時對未成熟生態系統的任何評論進行大幅度調整。 在五年內說“2015 Node.js生態系統有幾個雷區”真的很有意義。 2020 Node.js生態系統有多個天堂。“




我可以分享點和使用節點js的原因。

  1. 對於聊天,協作編輯等實時應用程序,我們更好地使用nodejs,因為它是事件庫,其中火災事件和數據來自服務器的客戶端。
  2. 簡單易懂,因為它是javascript基礎,大多數人都有想法。
  3. 大多數當前的Web應用程序都轉向角度js和骨幹,使用節點很容易與客戶端代碼交互,因為它們都將使用json數據。
  4. 很多插件可用。

缺點:-

  1. Node將支持大多數數據庫,但最好的是mongodb,它不支持複雜的連接和其他。
  2. 編譯錯誤......如果任何錯誤,應用程序將停止工作,我們需要再次手動或使用任何自動化工具啟動它,開發人員應該處理其他每個例外。

結論: - Nodejs最適合用於簡單和實時的應用程序。如果你有非常大的業務邏輯和復雜的功能,那麼最好不要使用nodejs。如果您想構建一個應用程序以及聊天和任何協作功能..節點可以在特定部分使用,並保持應該與您的便利技術。




Related