分析JS單線程非同步io回調的特性,js單線程io回調

來源:互聯網
上載者:User

分析JS單線程非同步io回調的特性,js單線程io回調

我們最開始接觸javascript應該大部分是從html中的js指令碼開始,但是這種看似簡單的語言稀裡糊塗的用了好幾年,也沒有搞清楚它的一些原理機制,有沒有躺槍!

起碼javascript在操作dom的時候用了各種事件回調,比如按鈕,連結的點擊,滑鼠經過,擷取焦點等等.

在這個過程中,我們在dom上綁定一個事件回呼函數 比如 onclick="doCheck()" 這個過程就是給dom元素註冊了一個click 事件,並且綁定了一個事件回呼函數 doCheck().

當滑鼠點擊這個元素的時候,觸發了事件,馬上執行事件綁定函數並回.

再後來是接觸到jquery 的時候,大量的

$("#id").click(function(){alert('點擊事件');});

這種jquery的文法寫的越來越多似乎已經習慣了,但是你是都留意過前面的選取器只是選擇過濾dom節點,接著的click就是一個事件註冊,而裡面的 function(){} 其實是一個參數,事件綁定函數的參數,這裡面就要求你熟悉javascript的文法了.

function在javascript中是一個對象,對象就可以指世界的萬事萬物,所以對象可以包含很多屬性,方法等.

既然是對象,那就可以當做一個參數去傳遞,這種函數叫做 高階函數.

而且這種函數沒有定義名稱對不對,當然你可以一個名稱,然後把名稱傳過來也是一樣的,但是沒有意義,因為這裡的函數對象其實是一個形參,所以我們習慣的不給這種函數起名字,這就是常說的匿名函數.

接著上面的$("#id").click 說起,當點擊事件被觸發時,就要執行事件綁定函數.和上面直接在dom上給定onclick方法是一樣的效果.

假設瀏覽器裡有多個線程去操作指令碼的話,你能想象到他的亂嗎? 線程一正要去修改元素A的value值,結果沒想到線程二已經把元素A從dom樹刪除節點,這時線程一隻好操作失敗報錯.這樣的情況是不糟透了,要麼瀏覽器無維護多個線程資料的一致性,要麼前端工程師自己去維護,所以......瀏覽器只有一個線程去操作dom,這樣省去了很多不必要的麻煩.

setTimeout(function(){alert('彈出');},300);while(true){........}

你覺得 300毫秒後 alert('彈出') 還有戲嗎?

沒有了,永遠沒有戲了,等待300毫秒只是騙取你的感情的.因為瀏覽器是單線程模式執行指令碼.

一旦線程處於死迴圈模式下去執行 while 語句,你的setTimeout 再也不會起任何作用了.

進而我們走入了 node.js 世界,它完全保留了javascript在瀏覽器的特性,單線程非同步回調,也正是因為這個特點它才是它,假如node.js 是一門同步語言,就算所有的npm包都是 c++ 擴充的(速度夠快吧)再快你也比不過c語言處理速度是不是,那麼node.js可能還沒有出世就已經被php鄙視了.

正是因為它的非同步回調IO,更能提高他的效率,讓我想起以前學校的一種快餐店和學校食堂的對比情況:

食堂是所有學生拿著盤子在視窗排成一字型隊,打飯的妹妹一個一個盛好了,挨個端上飯走了.這是同步處理結果.

學校快餐店也是學生排隊點餐,但是點完餐拿上你的呼叫器就可以離開找位置去了.這樣單位時間內服務員可以為很多人提供服務,而且點好餐的同學可以找位置做自己其他事情,而不用傻傻地站到視窗等飯,直到你的飯出來的那一刹那,伺服器會根據單號按下編碼,這時你桌上的呼叫器會響起,你去取餐就好了.這是非同步處理.那個呼叫器響起就是觸發事件.

單線程可以減少多線程之間狀態切換引起的資源浪費和維護困難,當然也有專門的第三方包來支援多核多線程的情景,你可以自己權衡.

以上就是關於JS單線程回調的全部資訊內容,如有大家在學習的時候還有其他的疑問,可以在下面的留言地區討論。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.