瀏覽器訪問一個網站所經歷的步驟

  1. Chrome搜索自身的DNS緩存node

  2. 搜索操做系統自身的DNS緩存(瀏覽器沒有找到緩存或緩存已經失效)
    查看Chrome瀏覽器的DNS緩存信息(chrome://net-internals/#dns):
    chrome

  3. 讀取本地HOST文件編程

  4. 瀏覽器發起一個DNS的一個系統調用後端

    • 運營商服務器把結果返回操做系統內核同時緩存起來瀏覽器

    • 操做系統內核把結果返回瀏覽器緩存

    • 最終瀏覽器拿到www.jianshu.com對應的IP地址服務器

    • 寬帶運營商服務器查看自己緩存多線程

    • 運營商服務器發起一個迭代DNS解析的請求異步

  5. 瀏覽器得到域名對應的IP地址後,發起HTTP「三次握手」異步編程

  6. TCP/IP鏈接創建起來後,瀏覽器就能夠向服務器發送HTTP請求了。(使用了好比說,用HTTP的GET方法請求一個跟域名,協議能夠採用HTTP1.0。)

  7. 服務器端接受到了這個請求,根據路徑參數,通過後端的一些處理以後,把處理後的一個結果的數據返回給瀏覽器。若是是慕課網的頁面就會把完整的HTML頁面代碼返回給瀏覽器。

  8. 瀏覽器拿到了簡書網的完整的HTML頁面代碼,在解析和渲染這個頁面的時候,裏面的JS、CSS、圖片靜態資源,他們一樣也是一個個HTTP請求都須要通過上面的主要的七個步驟。

  9. 瀏覽器根據拿到的資源對頁面進行渲染,最終把一個完整的頁面呈現給了用戶。

一些概念

1. 什麼是回調?

回調是異步編程時的基礎,將後續邏輯封裝成起始函數的參數,逐層嵌套

2. 什麼是同步/異步?

同步是指:發送方發出數據後,等接收方發回響應之後才發下一個數據包的通信方式。
異步是指:發送方發出數據後,不等接收方發回響應,接着發送下個數據包的通信方式。

3. 什麼是I/O?

磁盤的寫入(in)磁盤的讀取(out)

4. 什麼的單線程/多線程?

一次只能執行一個程序叫作單線程
一次能執行多個程序叫多線程

5. 什麼是阻塞/非阻塞?

阻塞:前一個程序未執行完就得一直等待
非阻塞:前一個程序未執行完時能夠掛起,繼續執行其餘程序,等到使用時再執行

6. 什麼是事件?

一個觸發動做(例如點擊按鈕)

7. 什麼是事件驅動?

一個觸發動做引發的操做(例如點擊按鈕後彈出一個對話框)

8. 什麼是基於事件驅動的回調?

爲了某個事件註冊了回調函數,可是這個回調函數不是立刻執行,只有當事件發生的時候,纔會調用回調函數,這種函數執行的方式叫作事件驅動~這種註冊回調就是基於事件驅動的回調,若是這些回調和異步I/O(數據寫入、讀取)操做有關,能夠看做是基於回調的異步I/O,只不過這種回調在nodejs中是有事件來驅動的

9. 什麼是事件循環?

事件循環Eventloop,假若有大量的異步操做,一些I/O的耗時操做,甚至是一些定時器控制的延時操做,它們完成的時候都要調用相應的回調函數,從而來完成一些密集的任務,而又不會阻塞整個程序執行的流程,此時須要一種機制來管理,這種機制叫作事件循環.
總而言之就是:管理大量異步操做的機制叫作事件循環

Event Loop:回調函數隊列。異步執行的函數會被壓入這個隊列; 隊列被循環查詢。

相關文章
相關標籤/搜索