node環境和瀏覽器的區別

1、全局環境下this的指向javascript

  在node中this指向global而在瀏覽器中this指向window,這就是爲何underscore中一上來就定義了一 root;java

  

1 var root = typeof self == 'object' && self.self === self && self ||
2             typeof global == 'object' && global.global === global && global ||
3             this;

  並且在瀏覽器中的window下封裝了很多的API 好比 alert 、document、location、history 等等還有不少。我門就不能在node環境中xxx();或window.xxx();了。由於這些API是瀏覽器級別的封裝,存javascript中是沒有的。固然node中也提供了很多node特有的API。node

2、js引擎jquery

  在瀏覽器中不一樣的瀏覽器廠商提供了不一樣的瀏覽器內核,瀏覽器依賴這些內核解釋折咱們編寫的js。可是考慮到不一樣內核的少許差別,咱們須要對應兼容性好在有一些優秀的庫幫助咱們處理這個問題好比jquery、underscore等等。npm

  nodejs是基於Chrome's JavaScript runtime,也就是說,實際上它是對GoogleV8引擎(應用於Google Chrome瀏覽器)進行了封裝。V8引 擎執行Javascript的速度很是快,性能很是好。瀏覽器

      NodeJS並非提供簡單的封裝,而後提供API調用,若是是這樣的話那麼它就不會有如今這麼火了。Node對一些特殊用例進行了優化,提供了替代的API,使得V8在非瀏覽器環境下運行得更好。例如,在服務器環境中,處理二進制數據一般是必不可少的,但Javascript對此支持不足,所以,V8.Node增長了Buffer類,方便而且高效地 處理二進制數據。所以,Node不只僅簡單的使用了V8,還對其進行了優化,使其在各環境下更加給力。服務器

  js引擎都固定了,還對應神馬兼容性。網絡

3、DOM操做閉包

  瀏覽器中的js大多數狀況下是在直接或間接(一些虛擬DOM的庫和框架)的操做DOM。由於瀏覽器中的代碼主要是在表現層工做。可是node是一門服務端技術。沒有一個前臺頁面,因此我門不會再node中操做DOM。框架

4、I/O讀寫

  與瀏覽器不一樣,咱們須要像其餘服務端技術同樣讀寫文件,nodejs提供了比較方便的組件。而瀏覽器(確保兼容性的)想在頁面中直接打開一個本地的圖片就麻煩了好多(別和我說這還不簡單,相對路徑。。。。。。試試就知道了要麼找個庫要麼二進制流,要麼上傳上去有了網絡地址在顯示。否則人家爲何要搞一個js庫呢),而這一切node都用一個組件搞定了。

5、模塊加載

  javascript有個特色,就是原生沒提供包引用的API一次性把要加載的東西全執行一遍,這裏就要看各位閉包的功力了。所用東西都在一塊兒,沒有分而治之,搞的特別沒有邏輯性和複用性。若是頁面簡單或網站固然咱們能夠經過一些AMD、CMD的js庫(好比requireJS 和 seaJS)搞定事實上不少大型網站都是這麼幹的。

  在nodeJS中提供了CMD的模塊加載的API,若是你用過seaJS,那麼應該上手很快。

  node還提供了npm 這種包管理工具,能更有效方便的管理咱們飲用的庫

  固然瀏覽器這邊ES6也有這方面的補充,相信將來會更好。。。

 

  固然,關於node和瀏覽器的區別還有不少,我會隨時補充上。

相關文章
相關標籤/搜索