Hello~~ Today 我們要走一點技術路線 (名模生死鬥出場法)
來介紹介紹阿宅 PO 到現在還是 狂踩、瘋踩 的技術大坑
「JavaScript 同步、非同步」
所以阿宅 PO 假日心一橫,決定來好好了解了解這個技術坑裡
到底是怎麼一回事!
首先來先簡單介紹一下,什麼是 同步、非同步
而 JavaScript 本身特性就是 一次只做一件事!
它是一個 Single thread 單執行緒的語言,由上至下逐一執行。
也就是說 JavaScript 是走 同步 這個路線的
會覺得在實際撰寫、執行上會覺得 JavaScript 是非同步的感覺
是因為 瀏覽器 (Browser) 本身內部不是單執行緒的,它是多執行緒。
瀏覽器需要處理很事情,其本身的內部設計就是多執行緒共存的環境
像是一些I/O操作、定時器的計時 (setTimeOut) 和事件監聽 ( click, keydown...) 等
都是由瀏覽器提供的其他執行緒來完成的,而這些事件屬於 非同步事件。
這邊幫大家整理一下我們常聽到的幾個瀏覽器的執行緒或叫引擎:
渲染執行緒和JS引擎執行緒是不能同時進行
既然瀏覽器是多執行緒,所以 JavaScript 在瀏覽器會變成多執行緒嗎?
噢~不~~傻孩子,這跟要蘋果變香蕉一樣的是不可能的~XD
JavaScript 在瀏覽器內一樣是單執行緒喔~
而瀏覽器為了要同時做很多事情,所以開了很多條執行緒,所以無論在什麼時候都會開啟一個 JavaScript 引擎執行緒來解析和執行 JavaScript。
像是上面有提到,為何實際執行時會覺得 JavaScript 感覺像是非同步
是因為在瀏覽器中執行的 JavaScript 執行緒 與 其他瀏覽器的執行緒 交互作用下,而有「非同步」、「non-blocking」、「並行」特性。
這還只是開頭喔~~
接下來還會談到 Callback Function 和 Event Loop
關於這兩個部分,我們下集會提到唷~
感冒到最後只剩咳咳咳...
淚~~~~~