iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 18
3
Modern Web

前端設計轉前端工程師-JS踩坑雜記 30 天系列 第 18

設計看JS - 設計永遠搞不懂的同步、非同步 01

  • 分享至 

  • xImage
  •  

Hello~~ Today 我們要走一點技術路線 (名模生死鬥出場法)
來介紹介紹阿宅 PO 到現在還是 狂踩、瘋踩 的技術大坑

「JavaScript 同步、非同步」

所以阿宅 PO 假日心一橫,決定來好好了解了解這個技術坑裡
到底是怎麼一回事!

簡述同步、非同步

首先來先簡單介紹一下,什麼是 同步非同步

  • 同步 - 一件事做完才做下一件事情; 打完小弟才打 Boss,一次只打一個人(?!)
  • 非同步 - 同一時間做很多事; 找一群人圍毆小弟跟 Boss

而 JavaScript 本身特性就是 一次只做一件事
它是一個 Single thread 單執行緒的語言,由上至下逐一執行。

也就是說 JavaScript 是走 同步 這個路線的
會覺得在實際撰寫、執行上會覺得 JavaScript 是非同步的感覺
是因為 瀏覽器 (Browser) 本身內部不是單執行緒的,它是多執行緒

多執行緒的瀏覽器

瀏覽器需要處理很事情,其本身的內部設計就是多執行緒共存的環境
像是一些I/O操作、定時器的計時 (setTimeOut) 和事件監聽 ( click, keydown...) 等
都是由瀏覽器提供的其他執行緒來完成的,而這些事件屬於 非同步事件

常見的幾個執行緒/引擎

這邊幫大家整理一下我們常聽到的幾個瀏覽器的執行緒或叫引擎:

  1. GUI 渲染引擎 => 主要職責是 渲染頁面 ( Chrome使用的是 Webkit 引擎 )
  2. JavaScript 解析和執行 => 負責 JavaScript 程式碼的解析和執行 ( Chrome使用的是 V8 引擎 )
  3. Web API’s => setTimeOut、DOM Event、Ajax、Http Requests...等

渲染執行緒和JS引擎執行緒是不能同時進行

既然瀏覽器是多執行緒,所以 JavaScript 在瀏覽器會變成多執行緒嗎?
噢~不~~傻孩子,這跟要蘋果變香蕉一樣的是不可能的~XD

JavaScript 在瀏覽器內一樣是單執行緒喔~
而瀏覽器為了要同時做很多事情,所以開了很多條執行緒,所以無論在什麼時候都會開啟一個 JavaScript 引擎執行緒來解析和執行 JavaScript。

像是上面有提到,為何實際執行時會覺得 JavaScript 感覺像是非同步
是因為在瀏覽器中執行的 JavaScript 執行緒 與 其他瀏覽器的執行緒 交互作用下,而有「非同步」、「non-blocking」、「並行」特性。

這還只是開頭喔~~
接下來還會談到 Callback Function 和 Event Loop
關於這兩個部分,我們下集會提到唷~


感冒到最後只剩咳咳咳...
淚~~~~~


上一篇
中場休息聊是非 - 設計是感性視覺動物,工程是理性邏輯怪物
下一篇
設計看JS - 設計永遠搞不懂的同步、非同步 02
系列文
前端設計轉前端工程師-JS踩坑雜記 30 天30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言