過年7天樂,學nodejs 也快樂

自從上次接觸nodejs 已經好長時間了,可是年末公司太忙了 ,沒時間看,html

上次文章在ubuntu上安裝nodejs[開啓實時web時代] http://www.cnblogs.com/qqloving/p/3286001.html 2013-08-27node

過年回家,家裏沒網,做爲一個戰鬥型屌絲,天然不能錯過如此學習機會,因而買了兩本書 一本《深刻淺出nodejs》一本《寫給你們看的c++》c++

看完nodejs 有點感受,是移動互聯網時代不錯的技術選型,相信,5年後nodejs在中國必定會火起來,就像10年前c#剛出來,標榜爲net 而生同樣。程序員

 

1 首次在底層將性能的核心由單臺服務器提高到服務器節點組合

傳統上大部分程序設計性能優化和核心都是在提高單臺服務器的性能,而對服務器節點組合性能提高缺少考慮。web

一方面是,在獨立軟件服務提供商時代,過去80%的程序都運行在單臺服務器上正則表達式

另外一方面是,在計算機結構上,cpu最快,內存次之,硬盤最次,網絡io性能最爛,因此傳統計算機都圍繞這cpu 、內存、硬盤進行設計。這能夠理解爲時代侷限性。編程

前幾年,ruby 再次在單臺服務器的性能上要求下滑一下,從而使開發效率在提升一次,但這幾年發現ruby風彷佛小了,爲啥呢?ubuntu

我的認爲開發效率乃是微軟的絕殺領域,ruby想要依靠開發效率在編程世界混一席之地,談何容易,加之開源世界不是很重視開發效率,而重視可閱讀,可擴展,可維護,促使ruby風颳的快,走的也快,並且高開發效率很容易出現零和遊戲【1我的埋BUG,1我的改bug,一我的排期,看着每一個人都很辛苦,都很努力,都應該加工資,可是從老闆角度,結果維持爲0】c#

nodejs的出現,完全把性能分爲cpu性能和io性能,而在io性能上採起異步回調機制,完全消滅了計算機之間通訊形成的等待堆積,形成的性能問題,後端

併發量大時候,大量的等待壓垮 服務器在傳統服務器和應用上彷佛是屢見不鮮,這可能要和nodejs說 拜拜了

傳統web服務器應對海量併發 nodejs 服務器因對海量併發
微博桌面截圖_20140208200906

傳統的web服務器由於單臺服務器能夠承受的連接數有限,因此就弄一大堆海量服務器來分擔負載,

可是單臺服務器的業務邏輯依然很複雜,軟件開發的複雜度總體上依然沒有下降,不信,你看看你的各類性能調優和可維護行的知識,是否是圍繞單臺服務器的.例如高性能的***

標誌

不多寫一個循環裏面掉接口




微博桌面截圖_20140208201239
node js由於單一線程就能夠處理很高的併發,因此每臺服務器只須處理一點點業務邏輯,由一個隊列上的其餘服務器處理其餘邏輯,這樣,單臺服務器的複雜度就極大的下降,我認爲複雜度是性能的天敵,只有消滅複雜度,纔能有可靠的性能



標誌
一個循環裏面掉接口很正常

2 nodejs自身及服務器和單線程的脆弱性

我也不知道nodejs是否是史上第一次自身就是服務器的編程工具,我資歷太淺,才work4年,nodejs是我見到的第一個自身就是服務器的編程工具.

nodejs 是單線程,遇到未知錯誤就自動退出了 。

爲何說nodejs脆弱呢,我是這麼推理的以.NET和iis爲例子

1 .NET APP 普通異常 黃頁                                                     普通

2 .NET APP的 iis程序池異常 程序退出                          嚴重

3 .NET iis 異常 這臺服務器上的全部iis託管的程序異常        超級嚴重

你們平時寫程序 黃頁彷佛是加長便飯,即便是程序上線了,該黃頁的時候,仍是黃頁,可是程序總體是沒問題的

iis程序池沒法啓動和iis異常就不多見了能夠忽略了

可是在nodejs中,就徹底不同 ,1和2放在一塊兒了,由於nodejs 自身就成程序池,並且是單線程,只要出現一次異常,該線程就 退出了

這就好像之前你們只犯錯誤1 犯錯1000次纔可能遇到1次錯誤2,在nodejs中犯一次錯誤就直接是錯誤2

在nodejs 風掛起來後,國外緊跟着的就是js的測試驅動的不少討論和實踐,框架出了一個又一個,爲啥呢?nodejs有需求唄

3 v8內存限制和cpu、io壓力分散、事件循環問題

node 的v8 內存限制 一個線程的內存在32位和64位下都默認沒有突破2g內存,傳統的web服務器,壓力一上來,內存很快就上去了,更不用說內存比較大的操做了

node 經過異步機制增強了對cpu 和io的利用,形成了設計程序時候要先預判,我這個程序是cpu 密集呢仍是io密集呢?

說實話 2013年, 經過不少事件 我才意識到 原來IO 是個很深的領域,好久之前一直認爲io沒啥簡單的和1同樣。。。。。

node 總體上是依靠事件循環機制驅動,像遞歸程序很是消耗node的事件循環,極可能就形成堆棧溢出 程序退出 ,因此通常循環遞歸用c++寫插件

這幾個因素和到一塊兒,就形成node 設計程序模塊時候 要更細緻,技術粒度更細

就像一個普通的站點 用.NET 開發什麼都幹了 可是node 可能就不是這麼回事了,例如 文件上傳、驗證碼生成 ,檢索服務,正則表達式服務等等,基本上看上去 高cpu 和高內存的模塊 都要剝離出來

4先後端模型風格一致和c++

爲啥nodejs 出現後全堆棧開發就屢屢上頭條呢?,NET 程序員寫js的時候怎麼沒人說全堆棧開發呢?

爲啥呢?由於,有人絕望了,再加上移動互聯網的普及的加速,在服務器端生成html後到客戶端渲染已經OUT了

[ps:seo也out了,由於移動端連接不存在了]

so 一羣被壓抑好久的身懷js絕技的人,拿着nodejs神器,在短短4年時間,幾乎攻下了web開發的各個角落,從未有一門語言在4年時間內取得如此成績.c#用了10年 才勉強取代了本身的大哥asp的市場份額,可見nodejs是多nb

[ps:隨着我國人口老齡化,新生人口減小,用人成本提升,不一樣分工的溝通成本將會年年上升]

全堆棧的nodejs 和宇宙效率最高的.NET 技術股票值得長期持有,尤爲是要創業的各位夥伴們

微博桌面截圖_20140208211801

一直都想看看c++ 可是,NET這個大而全的平臺上通常遇不到啥問題須要用c++解決,

最起碼nodejs 遞歸程序得用c++寫

nodejs 就不同,有一堆問題須要,因此過年就順便看看了c++,總體感受c++沒有剛上大學時候在圖書館裏面看的那麼難了微笑.

感受c++理論上也入門了 就剩下寫nodejs 時候謝謝c++練手了微笑

這也說明學習.NET 是快速進步的途徑,想學啥就學啥,我效率高,我怕啥,

5如何學習nodejs web開發?

根據我多年學習經驗

快速學習web開發的渠道 最快的是

抓取數據->整理數據->展現數據->程序優化 

題目選好了說不定還能掛點廣告把服務器錢掙回來呢

so lets go O(∩_∩)O~

                                                                                                               我實踐mvc TDD的項目  http://www.unknownerror.org/ 

                                                                                                                有時間 再弄個nodejs版本的

相關文章
相關標籤/搜索