簡介:
Javascript之所以能在瀏覽器運行,是因為瀏覽器提供一個“上下文環境”,它定義了Javascript可以做什么事情。
Nodejs,說白了,其實也是一個“上下文環境" , 這個上下文環境,允許在后端運行Javascript代碼。
Nodejs使用Google的V8虛擬機,來解析和執行Javascript代碼。
所以,nodejs = 運行時環境 + 庫。
應用:
nodejs可以寫web(網站后臺,網站前端),寫服務(游戲后臺,IM...),寫工具(搶票,爬蟲....)。還可以寫更多的東西。
優點:
1:單線程+非阻塞IO = 性能提升,代碼簡潔
它通過事件輪詢(event loop)來實現并行操作。由于是單線程,所以基本不用考慮多線程的問題,例如線程上下文切換,變量加鎖解鎖等等。
2:強大的npm 設計 = 海量代碼庫
Node.js 的包管理器 npm 設計得比 python 和 ruby 好很多。有很多的 module 開發者。
3:精準控制每個細節 = 高性能,大并發
nodejs是一個非常靠近底層的工具庫(+ 環境)。Node.js 可以精細的控制 Request 和 Response 的時間和內容,websocket 似乎就是為 Node.js 而生的。(配合 http://socket.io 這庫之后,在 realtime webapp 這個領域,Node.js 已經沒有對手了。看淘寶對nodejs的重視度和使用量就知道了。)
使用經驗小結:
1:javascript語法是非常自由的,而且nodejs也支持用c/c++去寫addon(nodejs的插件)。但是,由于js的性能。。。所以,如果你的需求業務非常復雜的話,不建議使用。如果你的需求是輕業務,重性能,那么可以考慮一下nodejs。
2:很少的業務需求,高強度的密集計算。業務用js實現,計算用c++實現。但是,用c++寫addon之前,會有一定的學習曲線。
(備注:Java + C++/ PHP + C++ / Nodejs + C++ ,這三種做法,第一種更多的是大型架構的結合使用做法,第二種很多中小型項目都在使用,最后者就是我剛剛提到的,目前很少人用,但是性能測試確實不錯,有一定的潛力。)
3:寫blog,寫小型的網站,基本沒什么學習曲線,前后端都是javascript,方便前端的同學接觸后端,js一統天下?。
4:nodejs的調試困難,編碼不方便等等很多“缺點”,老早就不存在了。現在的nodejs對于線程的管理使用,也在發展的很不錯。
5、對Node的優點和缺點提出了自己的看法?
優點:
1. 因為Node是基于事件驅動和無阻塞的,所以非常適合處理并發請求,因此構建在Node上的代理服務器相比其他技術實現(如Ruby)的服務器表現要好得多。
2. 與Node代理服務器交互的客戶端代碼是由javascript語言編寫的,因此客戶端和服務器端都用同一種語言編寫,這是非常美妙的事情。
缺點:
1. Node是一個相對新的開源項目,所以不太穩定,它總是一直在變。
2. 缺少足夠多的第三方庫支持。看起來,就像是Ruby/Rails當年的樣子(第三方庫現在已經很豐富了,所以這個缺點可以說不存在了)。
總結:
nodejs現在發展很快,非常出名(出名不代表很多人用)。BUT,nodejs在后端的世界怎么算,都只是一個很有潛力的小孩子,現在的地位和java,php的地位還是差距非常大。因為nodejs本來就不合適寫復雜的業務,nodejs目前更多的合適去做工具之類的開發。除非nodejs在設計的方向上能做出更大的變革,否則也很難和java平分天下。當然,nodejs本來的誕生目的也不是做“大佬”。nodejs很像geek,追求自由發展。
?????