異步函數(shù)
-
誤區(qū):
- 把script代碼放到body底部并不是異步執(zhí)行js代碼,僅僅是讓頁面優(yōu)先解析然后再解析執(zhí)行js代碼(注意:到js代碼執(zhí)行完之前頁面都沒有被渲染)
-
能做什么:
- 異步代碼(例如:setTimeout)是將代碼放入異步調用棧础嫡,然后等待執(zhí)行線程先渲染完頁面后(即同步代碼執(zhí)行完,html所有標簽解析完)后執(zhí)行。所以耗時的操作(如xmlHttpRequest,大量計算等)都需要使用異步
-
總結:
- 異步代碼其實質就是事件驅動+回調芽突,只不過該"事件"是由瀏覽器控制觸發(fā)
-
注意:
異步列隊其實質還是串行列隊蝌箍,僅僅只是讓線程渲染完頁面后執(zhí)行,如果大負荷計算急灭,頁面還是會假死(無法點擊按鈕等。谷遂。葬馋。)。
xmlHttpRequest(ajax)是由瀏覽器(并發(fā))執(zhí)行然后通過事件驅動來回調我們的js代碼的,并非setTimeout這種簡單的放到同步代碼后執(zhí)行埋凯。