Node.js是建立在Chrome強勁的V8 JavaScript引擎上的服務器端框架。雖然最初是用C++編寫的,但是應用程序通過JavaScript運行。
下面這4個基本概念是你想要掌握node.js所必需的。我會盡可能長話短說向大家介紹它們。
由于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);});在這個例子中,服務員獲得菜單,并告知廚師,然后返回取另一份菜單。在完成第一個菜單進程中,他既按照順序給當前顧客上菜,也接受來自其他客戶的點單。服務員不會因為阻塞來自于其他客戶的點菜而浪費時間。
原型是JavaScript的一個復雜概念。不過因為在Node.js中你要多次用到原型,所以每個JavaScript開發人員都必須了解這個概念。
在實現經典繼承的語言中,例如Java,或C ++,對于以代碼重用為目的的語言,你首先必須寫一個類,然后從該類創建對象或擴展該類。但是,在JavaScript中不存在類的概念。首先在JavaScript中創建一個對象,然后從這個對象中增加自己的對象,或創建新的對象。這就是所謂的原型傳承和通過原型的實現。
新聞熱點
疑難解答
圖片精選