Javascript - Event Loop

 Javascript - Event Loop


江湖在走, EvenLoop 要懂.

開始用JavaScript嘗試為世界做些什麼之前, 先把Event Loop弄懂可以讓作品更討喜


這次參考的學習資料是 youtube - JSconf的教學影片, 連結如下

Review and respect to:

https://www.youtube.com/watch?v=8aGhZQkoFbQ



結論:

最重要的就是實際應用啦

透過影片裡面的例子可以知道

什麼是該去避免跟如何避免


趕時間的朋友可以花5分鐘

把下面精簡過的內容讀過一次

有時間的朋友建議把上面連結的影片看完

真的很有時間的朋友可以先看過我的說明後再去看連結的影片...


名詞介紹:


RunTime: 這邊指的針對javascript的運作環境


Single Threaded: Javascript是單線程的程式語言, 主程式碼(main)會被安排到要執行
                              堆疊中(stack).  而且一次只會做一件事情.

Stack: 程式會從底部開始進行堆疊, 而是從最上方開始逐個執行, 執行完後從stack移除


Heap:  被物件占用的記憶體


Web API: 可以簡單理解為瀏覽器以及其背後的伺服器


Task Queue: 這邊可以想像為是一個等待區域. 準備好很多事情要放入Stack裡面去做.
                       但是TaskQueue很有人性, 它會等Stack手上是空著的時候才會丟任務進去.
                       而且也是一次丟一項而已. 這麼好的主管去哪裡找. 



So, What is Event Loop?

當面試的時候, 如果被問到這個問題. what's event loop of JavaScript. 

中文有人稱作事件循環. 但是我覺得有點詞不達意. 我個人是理解為javaScript的作業流程

只要劃出下面這個圖, 至少先拿二十分.


#1    程式碼中的動作會依序放入STACK中   (STACK是唯一做事的人, 所以用大寫給予尊重)

#1.5  STACK中的階段性任務(其中一段程式碼)執行完後
         需要變更資料的就變更, 需要輸出的就會直接輸出  

#2    需要Web API處理的事項就會移除STACK交付給 Web API處理.  不會卡在STACK

#3    而Web API執行完後還有需要執行任務就會丟到task queue這邊等待派送到stack進行處理

#4     task queue會等STACK清空後, 把等待中的任務一個一個交給STACK處理



範例介紹



影片中: 22:00處 

Delay()  這邊表示很龐大的程式碼, 需要較長的時間來處理

如果在stack中安排了這類的程式碼, 程式運行必須要先處理完這個大傢伙才能繼續往後走

當這種大傢伙很多的時候, 就會覺得程式運行起來很卡. 

學術一點講就是安排了太多任務在同步處理.  (Synchronous)

這邊使用同步不是很多任務同時進行   而是說在同一個步驟下進行. 中文很難我知道

影片中用這個範例清楚的說明如果不尊重Event Loop會發生什麼事情


其中一個解決方法就是盡量運用非同步的方式去處理.  影片範例

(Async Callback & Call Stack).  使用非同步語法把任務盡量都丟出去讓別人去做

然後把消化好的CallBack到Task Queue這邊等待處理. 主程式就不會卡住了

by the way.  setTimeout()是瀏覽器喔API喔



留言