Node.js入门经典 读书笔记(3)
本章中我們將講述Node.js的作用
1、設計Node.js的目的
Node.js是構建在Chrome的JavaScript運行時之上的一個平臺,用于簡單構建快速的、可擴展的網(wǎng)絡應用程序。Node.js使用事件驅(qū)動的、非阻塞的I/O模型,這讓其既輕量又高效,是運行于不同發(fā)布設備上的數(shù)據(jù)密集型實時應用程序的完美平臺。
并發(fā)簡單的可以理解為指的是許多人同時嘗試做同樣的事情。
2、I/O理解操作
I/O是輸入/輸出的簡寫,指的是計算機和人或者數(shù)據(jù)處理系統(tǒng)之間的通信??梢允褂煤茴愃朴赑HP一樣的語句來進行輸出。即echo。
2.1 處理輸入
? 計算機編程是什么?計算機編程就是編寫解決某一個問題的軟件并且處理圍繞著該問題的可能的各種不可預測性。
2.2 聯(lián)網(wǎng)I/O的不可預測性
? 當今的Web應用程序的設計變得越來越復雜。I/O變得更加的碎片化,而且I/O操作也變得更為頻繁。
- 與第三方應用程序編程接口(API)的交互繁重
- 許多不同設備發(fā)送與接收數(shù)據(jù),包括移動設備、電視和公告板等等
- 巨大數(shù)量的客戶同時連接并實時交互
3、不可預測性
?例子:使用Node.js從不同的Web服務器上獲取主頁。
1 var http = require('http'), 2 urls = ['shapeshed.coom', 'www.bbc.co.hk', 'www.baidu.com']; 3 4 function fetchPage (url) { 5 var start = new Date(); 6 http.get({host: url}, function (res) { 7 console.log("Got response from: " + url); 8 console.log("Request took:", new Date() - start, 'ms'); 9 }); 10 } 11 12 for (var i = 0; i < urls.length; i++) { 13 fetchPage (urls[i]); 14 }以上的代碼,在不同次運行的時候會輸出不同的時間,這也就是由于Web服務器響應時間不同導致的。而這些不同也是由于以下原因?qū)е?#xff1a;
在傳統(tǒng)的HTML頁面中使用JavaScript,例如,當用戶單擊頁面超鏈接時,有事件被觸發(fā),而JavaScript代碼并不是對一組用戶可能進行的動作按線性排序列出,然后以此構造代碼;而是圍繞事件來構架。事件可在任何時刻發(fā)生,也可發(fā)生不止一次。以上所描述的就是事件驅(qū)動的編程,因為在程序中要是有事情發(fā)生的話那么有個事件必須發(fā)生。事件驅(qū)動編程是處理不可預測性的極佳方式,因為我們可以識別將要發(fā)生的事件,即使我們并不知道事件什么時候會發(fā)生。
JavaScript在瀏覽器中極高效地使用了這個模型,允許開發(fā)人員創(chuàng)建基于瀏覽器打的富應用程序,這樣的應用程序圍繞著事件和用戶與頁面之間的交互方式編寫。
現(xiàn)代Web應用程序的趨勢:
- 許多不同類型的設備可連接到Web應用程序
- 設備可作為輸入和輸出
- 在一個應用程序內(nèi),不同的服務由不同的服務器來完成
- 應用程序與許多第三方數(shù)據(jù)源的交互很繁重
- 客戶與服務器之間的數(shù)據(jù)實時雙向流動
而通過以上的比較可以發(fā)現(xiàn),所有的趨勢都指向了并發(fā)。Node的事件化的I/O模型讓我們無需擔心互鎖和并發(fā)這兩個在多線程異步I/O中常見的問題。Node.js將JavaScript解決不確定性所用的事件驅(qū)動方法加入到解決并發(fā)程序的可能方法清單中。事件驅(qū)動編程并不是新的思想。其他語言同樣實現(xiàn)過,而解決并發(fā)問題多的其他方法還包括線程以及使用不同的進程。
?
轉(zhuǎn)載于:https://www.cnblogs.com/maybe1491/archive/2013/04/29/3051454.html
總結
以上是生活随笔為你收集整理的Node.js入门经典 读书笔记(3)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: jenkins配置ant使用方法
- 下一篇: 利用JMeter进行Web测试(简介适合