Node.js入門概念講解

本文經過簡單易懂的方式(例子+概念)講解了如下幾個http進階概念,同時聯繫node.js,講解了node.js中的HTTP原理。你們在看這篇文章以前,但願先確保瞭解了此文羅列的概念。前端

由於本文只是用最簡單的Node來說解,因此也適用於非Node學習者。node

什麼是回調?

例子

你打飯店電話問老闆有沒有位子,老闆說他去看一下,而後就掛了電話,你去作別的事情,老闆找了很久找到了位子,而後再從新撥通你的電話告訴你。老闆找到位子後回撥電話這個動做叫作回調。編程

概念

回調函數就是某個函數執行完畢後執行的函數。segmentfault

聯繫Node.js

//回調函數爲具名函數
function learn(something) {
  console.log(something);
}

function we(callback, something) {
  something += ' is cool';
  callback(something);
}

we(learn, 'Nodejs');

//回調函數爲匿名函數
we(function(something) {
  console.log(something);
},'Jade');

//輸出:

Nodejs is cool
Jade is cool

什麼是同步/異步?

例子

同步:你打飯店電話問老闆有沒有位子,老闆說他去看一下,而後不掛電話,你一直等在電話前,老闆找了很久找到了位子,而後告訴你。這個過程就叫同步。瀏覽器

異步:你打飯店電話問老闆有沒有位子,老闆說他去看一下,而後就掛了電話,你去作別的事情,老闆找了很久找到了位子,而後再從新撥通你的電話告訴你。這個過程就叫異步。安全

概念

同步:各個任務依次執行,下一個任務等待上一個任務完成以後再執行。微信

異步:各個任務獨立執行,A任務不須要等到B任務完成,就能夠先執行,直到B任務調用回調函數。多線程

聯繫Node.js

在Node.js中,setTimeout(),setInterval()就是最基本的異步函數。異步

var c = 0

function printIt() {
  console.log(c)
}

function plus(callback) {
  setTimeout(function() {
    c += 1
    callback()
  },1000)
}

plus(printIt)

什麼是I/O?

概念

I:input,磁盤的寫入。異步編程

O:output,磁盤的讀出。

聯繫Node.js

在Node.js中,指代的就是一些讀寫的接口。

什麼是單線程/多線程?

例子

單線程:你談女友,一次只能談一個,談完了這個才能談下一個,這個就叫單線程。因此單線程安全。

多線程:若是你有能力腳踏多隻船,那麼這就叫多線程。若是你處理得好,平時的時候相安無事。但有時候你犯傻逼,女友們上房揭瓦,這個就叫爭搶資源。

概念

單線程:只有到前面的流程執行完以後,纔會執行下一個流程。

多線程:同時執行多個程序。

聯繫Node.js

Node.js就是一門單線程語言

什麼是阻塞/非阻塞?

例子

阻塞:你打飯店電話問老闆有沒有位子,老闆說他去看一下,你掛下電話什麼事都不作,一直等到老闆查好位置來找你。這時候你的狀態就作阻塞。

非阻塞:你打飯店電話問老闆有沒有位子,老闆說他去看一下,你掛下電話跑去看電視玩電話,老闆查好位置來找你的時候你在去考慮吃飯的事情。這時候你的狀態就叫作非阻塞。

概念

阻塞:前一個程序要等待後一個程序完成以後才能執行,前一個程序的狀態叫作阻塞。

var i = 0;
while(1) {
  i++
}
//這段程序對其餘程序產生了阻塞

非阻塞:前一個程序無需等待後一個程序完成以後才執行,前一個程序的狀態叫作非阻塞。

單線程、回調、異步、非阻塞,結合Node.js的一句話總結

對於單線程的Node.js,咱們能夠經過回調的方式,實現異步編程,達到非阻塞的效果。

爲了講解Node.js裏的回調函數什麼時候被調用,咱們須要講解什麼是事件和事件驅動。

什麼是事件?

在瀏覽器中,鼠標點擊是事件,拖動窗口也是事件.

function clickIt(e) {
  window.alert('Button is clicked')
}
var button = document.getElementById('#button')

button.addEventListener('click',clickIt)

//按鈕被觸發了click事件以後,執行回調函數clickIt

什麼是事件驅動?

像以下代碼中的clickIt函數執行的方式(被click事件觸發)稱爲事件驅動

function clickIt(e) {
  window.alert('Button is clicked')
}
var button = document.getElementById('#button')

button.addEventListener('click',clickIt)

//按鈕被觸發了click事件以後,執行回調函數clickIt

什麼是事件循環?

概念

  • 當存在不少事件觸發的回調函數排隊等待處理時,處理這些回調函數的管理機制稱爲事件循環。

  • 事件循環是一個回調函數隊列,當有異步操做時,就將回調函數壓入這個隊列,等待處理。

  • 事件循環是一個先進先出的任務隊列

  • 整個隊列能夠理解成一個普通函數和回調函數構成的完整的隊列

後話

只有理解了以上這些看似很空的概念以後,才能深刻學習node.js的http。但願你們和我一塊兒努力,若是有不理解的地方但願你們可以和我一塊兒在評論區討論。

如對個人文章感興趣,請關注微信公衆號「每日前端」,天天分享一篇優質前端文章。 圖片描述

相關文章
相關標籤/搜索