人人人妻人人人妻人人人,99精品国产综合久久久久五月天 ,欧美白人最猛性XXXXX,日韩AV无码免费播放

News新聞

業(yè)界新聞動態(tài)、技術(shù)前沿
Who are we?

您的位置:首頁      JS/JQ/AJAX      為什么我要用 Node.js? 案例逐一介紹

為什么我要用 Node.js? 案例逐一介紹

標(biāo)簽: 發(fā)布日期:2014-03-17 00:00:00 664

 介紹

  JavaScript 高漲的人氣帶來了很多變化,以至于如今使用其進(jìn)行網(wǎng)絡(luò)開發(fā)的形式也變得截然不同了。就如同在瀏覽器中一樣,現(xiàn)在我們也可以在服務(wù)器上運(yùn)行 JavaScript ,從前端跨越到后端,這樣巨大的反差讓人難以想象,因?yàn)閮H僅在幾年前 Javascript 還如同 Flash 或者 Java applet 那樣嵌入網(wǎng)頁在沙箱環(huán)境中運(yùn)行。

  在深入Node.js之前,你可能需要閱讀和了解使用SEO友好的。

  缺點(diǎn):

  • 任何CPU密集型的計算都將阻礙 Node.js 的反應(yīng),所以使用多線程的平臺是一個更好的方法?;蛘?,您也可以嘗試向外擴(kuò)展的計算[*]。
  • Node.js 使用關(guān)系型數(shù)據(jù)庫依舊十分痛苦(詳細(xì)見下方)。拜托了,如果你想執(zhí)行關(guān)系型數(shù)據(jù)操作,請考慮別的環(huán)境:Rails, Django 甚至 ASP.NET MVC 。。。。

  【*】另一種解決方案是,為這些CPU密集型的計算建立一個高度可擴(kuò)展的MQ支持的環(huán)境與后端處理,以保持 Node 作為一個前臺專員來異步處理客戶端請求。

 Node.js 不應(yīng)該在什么地方使用

  使用關(guān)系型數(shù)據(jù)庫的服務(wù)端 WEB 應(yīng)用

  對比 Node.js 上的 Express.js 和 Ruby on Rails,當(dāng)你使用關(guān)系型數(shù)據(jù)庫的時候請毫不猶豫的選擇后者。

  Node.js 的關(guān)系數(shù)據(jù)庫工具仍處于早期階段,目前還沒有成熟到讓人能夠愉快地使用它。而與此同時,Rails天生自帶了數(shù)據(jù)訪問組件,連同DB schema遷移的支持工具和一些Gems(一語雙關(guān),一指這些如同珍寶的工具,二指ruby的gems程序包)。Rails和它的搭檔框架們擁有非常成熟且被證明了的活動記錄(Active Record)或數(shù)據(jù)映射(Data Mapper)的數(shù)據(jù)訪問層的實(shí)現(xiàn),而這些是當(dāng)你在使用純JavaScript來復(fù)制這些應(yīng)用的時候會非常想要使用的東西。

  不過,如果你真的傾向于全部使用 JS(并且做好可能抓狂的準(zhǔn)備),那么請繼續(xù)關(guān)注 Sequelize 和 Node ORM2 ,雖然這兩者仍然不成熟的,但他們最終會迎頭趕上。

  [*] 使用 Node 光是作為前端而 Rails 做后端來連接關(guān)系型數(shù)據(jù)庫,這是完全有可能也并不少見的。(筆者注:國外有種說法,PHP這一類程序員也可以算作是前端)

  繁重的服務(wù)端的計算和處理

  當(dāng)涉及到大量的計算,Node.js 就不是最佳的解決方案。你肯定不希望使用 Node.js 建立一個斐波那契數(shù)的計算服務(wù)。一般情況下,任何 CPU密集型操作 會削弱掉 Node通過事件驅(qū)動, 異步 I/O 模型等等帶來的在吞吐量上的優(yōu)勢,因?yàn)楫?dāng)線程被非異步的高計算量占用時任何傳入的請求將被阻塞。

  正如前面所說,Node.js 是單線程的,只使用一個單一的CPU核心。至于,涉及到服務(wù)器上多核并發(fā)處理,Node 的核心團(tuán)隊已經(jīng)使用 cluster 模塊的形式在這一方面做了一些工作 (參考:http://nodejs.org/api/cluster.html)。當(dāng)然,您也可以很容易的通過 nginx 的反向代理運(yùn)行多個 Node.js 的服務(wù)器實(shí)例來避免單一線程阻塞的問題。

  關(guān)于集群(clustering) ,你應(yīng)該將所有繁重的計算轉(zhuǎn)移到更合適的語言寫的后臺進(jìn)程來處理,同時讓他們通過像 RabbitMQ 那樣通過消息隊列服務(wù)器來進(jìn)行通信。

  即使你的后臺處理可能最初運(yùn)行在同一臺服務(wù)器上時看不出什么優(yōu)點(diǎn),但是這樣的做法具有非常高的可擴(kuò)展性的潛力。這些后臺處理服務(wù)可以容易地分割出去,作為單獨(dú)的 worker 服務(wù)器,而不需要配置入口 web服務(wù)器的負(fù)載。

  當(dāng)然,你也可以在其他語言平臺上用同樣的方法,但使用 Node.js 你可以得到很高的吞吐量,每個請求都作為一個小任務(wù)非常迅速和高效地處理,這一點(diǎn)我們已經(jīng)討論過了。

  結(jié)論

  我們已經(jīng)從理論到實(shí)踐討論過 Node.js 了,從它的目標(biāo)和野心,到其優(yōu)點(diǎn)和缺點(diǎn)。在 Node.js 的開發(fā)中99%的問題是由誤用阻塞操作而造成的。

  請記?。篘ode.js 從來不是用于解決大規(guī)模計算問題而創(chuàng)建的。它的出現(xiàn)是為了解決大規(guī)模I/O 的問題,并且在這一點(diǎn)上做的非常好

  綜上,如果你項目需求中不包含CPU密集型操作,也不需要訪問任何阻塞的資源,那么你就可以利用的 Node.js 的優(yōu)點(diǎn),盡情的享受快速、可擴(kuò)展的網(wǎng)絡(luò)應(yīng)用。

  原文鏈接: toptal   翻譯: 伯樂在線 - Lellansin