Node.js新手必須知道的4個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概念