iT邦幫忙

2023 iThome 鐵人賽

DAY 18
0
自我挑戰組

那些有趣的程式系列 第 29

【Day29】從零開始的程式大亂鬥:JavaScript-Worker

  • 分享至 

  • xImage
  •  

今天要介紹的是 JavaScript 中的 Worker

JavaScript 本身是單線程的,這代表它一次只能處理一件任務,因此在處理大量計算或IO操作時,可能會導致網頁凍結或反應緩慢。

為了解決性能缺點,Worker 就誕生了。Worker 是一個獨立的線程,運行在後台,不會阻塞主線程。主要用途是執行耗時的操作,而不會對用戶界面的反應時間產生負面影響,像是:

  • 計算
  • 數據處理
  • 網絡請求

我們可以想作,開啟一條新線程來處理其他比較耗時的任務。
當然,有好就有壞,開啟一條新線程相當於多用了一份資源,就可能造成資源的浪費,因此不應該過度使用。

除了以上優點以外,Worker 在使用上還是有些限制:

  • 同源限制
    • Worker 的腳本檔案必須是在同一個來源
  • DOM 限制,無法讀取網頁的 DOM,像是:
    • Document
    • Window
  • 消息限制
    • 必須使用 Message 來和主線程傳遞資料或訊息
  • ...

而缺點的部分,可以想作多用了一份資源去另外開啟新線程,因此可能造成資源的浪費。


上一篇
【Day28】從零開始的程式大亂鬥:JavaScript-渲染流水線
下一篇
【Day30】從零開始的程式大亂鬥:HTML-Elements
系列文
那些有趣的程式35
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言