1. 程式人生 > >Node.js新手必須知道的4個JavaScript概念

Node.js新手必須知道的4個JavaScript概念

gem pack ref red ges bject 下一個 應用程序 view

如果只需要知道一種編程語言就可以構建一個全棧的應用程序,是不是特別了不起?Ryan Dahl為了把這個想法成為現實,創造了node.js。Node.js是建立在Chrome強勁的V8 JavaScript引擎上的服務器端框架。雖然最初是用C++編寫的,但是應用程序通過JavaScript運行。

這樣一來,問題就解決了。一種語言就可以統治一切。而且,在整個應用程序中你只需要使用這一種語言。所以,我們需要深刻了解node.js。這就是本文的主題。

下面這四個基本概念是你想要掌握node.js所必需的。我會盡可能長話短說向大家介紹它們。

技術分享圖片

1.非阻塞或異步I/O

由於Node.js是一種服務器端框架,所以它的一個主要工作就是處理瀏覽器請求。在傳統的I/O系統中,當前請求只有當先前請求的響應(HTML頁面)已到達才會發出。這就是為什麽它被稱為阻塞I/O。服務器阻塞其他請求是為了處理當前的請求,而這會導致瀏覽器的等待。

Node.js不遵循I/O的這個原則。如果一個請求需要花費較長時間,那麽Node.js會發送請求到事件循環(event loop)中,並繼續在調用棧(call stack)中處理下一個請求。一旦未決請求完成處理,它就會告訴Node.js,並將響應渲染在瀏覽器上。

用一個虛擬的例子來理解這一點:

阻塞I / O

// take order for table 1 and wait...
var order1 = orderBlocking([‘Coke‘, ‘Iced Tea‘]);
// once order is ready, take order back to table.
serveOrder(order1);
// once order is delivered, move on to another table.
// take order for table 2 and wait...
var order2 = orderBlocking([‘Coke‘, ‘Water‘]);
// once order is ready, take order back to table.
serveOrder(order2);
// once order is delivered, move on to another table.
// take order for table 3 and wait...
var order3 = orderBlocking([‘Iced Tea‘, ‘Water‘]);
// once order is ready, take order back to table.
serveOrder(order3);
// once order is delivered, move on to another table.

在這個餐廳例子中,服務員給出菜單,等待訂單完成,然後再回到餐桌根據菜單上菜。在當前客戶點菜時,服務員就在旁邊等待,不接受其他客戶的菜單。

非阻塞I / O

// take order for table 1 and move on...
orderNonBlocking([‘Coke‘, ‘Iced Tea‘], function(drinks){
  return serveOrder(drinks);
});
// take order for table 2 and move on...
orderNonBlocking([‘Beer‘, ‘Whiskey‘], function(drinks){
  return serveOrder(drinks);
});
// take order for table 3 and move on...
orderNonBlocking([‘Hamburger‘, ‘Pizza‘], function(food){
  return serveOrder(food);
});

在這個例子中,服務員獲得菜單,並告知廚師,然後返回取另一份菜單。在完成第一個菜單進程中,他既按照順序給當前顧客上菜,也接受來自其他客戶的點單。服務員不會因為阻塞來自於其他客戶的點菜而浪費時間。

2.原型

原型是JavaScript的一個復雜概念。不過因為在Node.js中你要多次用到原型,所以每個JavaScript開發人員都必須了解這個概念。

在實現經典繼承的語言中,例如Java,或C ++,對於以代碼重用為目的的語言,你首先必須寫一個類,然後從該類創建對象或擴展該類。但是,在JavaScript中不存在類的概念。首先在JavaScript中創建一個對象,然後從這個對象中增加自己的對象,或創建新的對象。這就是所謂的原型傳承和通過原型的實現。

每個JavaScript對象被鏈接到一個來自於它可以繼承屬性的原型對象。原型類似其他OO語言中的類,但不同的是,它們本身也是對象。每一個對象都鏈接到Object.prototype,而Object.prototype自帶JavaScript預定義。

如果你通過obj.propName或 obj[‘propName‘] 查找屬性,而對象並不具有可通過 obj.hasOwnProperty(‘propName’)被檢查的屬性,那麽JavaScript的運行時會在其原型對象中查找屬性。如果原型對象也沒有這樣的屬性,那麽依次檢查它的原型,直到找到匹配,或者到達Object.prototype。如果該屬性不存在原型鏈,那麽它會導致一個未定義的值。

本次給大家推薦一個免費的學習圈,裏面概括移動應用網站開發,css,html,webpack,vue node angular以及面試資源等。**獲取資料

Node.js新手必須知道的4個JavaScript概念