」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > Web Worker 與 Service Worker

Web Worker 與 Service Worker

發佈於2024-11-08
瀏覽:322

介紹

當我第一次聽到這些術語時,我想,好吧,他們正在用單獨的線程做同樣的事情。那為什麼我們需要這兩個術語?

但說實話,這兩個術語及其行為方式之間存在巨大差異

會嘗試詳細解釋。

這兩個之間的共同點是

  1. 它們在單獨的執行緒中運行,不會阻塞 Javascript 的主單執行緒。

Web Worker

  • 這裡工作執行緒可以在不干擾主執行緒的情況下執行任務。
  • 這些用於需要大量 CPU 的任務,例如影像操作/處理、繁重計算和資料處理。
  • 它沒有存取DOM的能力,也不能攔截網路要求。
  • 它沒有生命週期

服務人員

  • 它是一種具有附加功能的網路工作者。
  • 它可以獨立於瀏覽器運行/即使瀏覽器關閉。
  • 它是 PWA 的核心元件,因為它們用於啟用離線支援、後台同步和推播通知等功能。
  • 它就像是位於瀏覽器和網路之間的代理伺服器。

Service Worker 的生命週期

1。登記

  • 在這裡,我們將告訴瀏覽器我們的 Service Worker javascript 檔案所在的位置。
if ('serviceWorker' in navigator) {
// wrap it in try/catch / promisses
   await navigator.serviceWorker.register('/service-worker.js')
}

if(導航器中的「serviceWorker」){ // 將其包裝在 try/catch/promises 中 等待 navigator.serviceWorker.register('/service-worker.js') }

2.安裝

  • 當瀏覽器認為Service Worker是新的時,會觸發install事件。

下面的程式碼我們要寫在service-worker.js

if ('serviceWorker' in navigator) {
// wrap it in try/catch / promisses
   await navigator.serviceWorker.register('/service-worker.js')
}

self.addEventListener('安裝', (事件) => { // 進行你的操作 })

3.啟動

  • 安裝後會跳到這裡
if ('serviceWorker' in navigator) {
// wrap it in try/catch / promisses
   await navigator.serviceWorker.register('/service-worker.js')
}

self.addEventListener('激活', (事件) => { // 執行你的操作 })

4。閒置的

  • 當 Service Worker 不執行任何操作時,它處於空閒狀態。

5。取得/訊息

  • 每當發出網路請求/訊息時,Service Worker 就會醒來並接管控制權
if ('serviceWorker' in navigator) {
// wrap it in try/catch / promisses
   await navigator.serviceWorker.register('/service-worker.js')
}

self.addEventListener('fetch', (event) => { // 執行你的操作 })

6。終止

  • 如果不使用,瀏覽器將終止 Service Worker 以節省記憶體。但當我們不知道時。

它將讓服務人員保留很長時間。

例子:-


在 chrome 中打開此鏈接,您將看到許多服務工作人員掛起,您可以執行很多操作,例如檢查/啟動和發送訊息。

if ('serviceWorker' in navigator) {
// wrap it in try/catch / promisses
   await navigator.serviceWorker.register('/service-worker.js')
}

chrome://serviceworker-internals/

Web Worker Vs Service Worker

即使瀏覽器關閉,我們如何喚醒服務人員。


筆記:-

針對這個具體我們可以使用push來喚醒,但是這個使用必須給Browser授予Notification權限,否則沒辦法。

當瀏覽器仍然開啟時,其他方法也是相關的

1。取得事件

  • 每當發出獲取請求時都會觸發此事件。
if ('serviceWorker' in navigator) {
// wrap it in try/catch / promisses
   await navigator.serviceWorker.register('/service-worker.js')
}

self.addEventListener('fetch', event => { // 處理取得事件 });

2.訊息

  • 從另一個腳本收到訊息時會觸發此事件。 (通訊發生在 Service Worker 其他 Javascript 檔案中)
if ('serviceWorker' in navigator) {
// wrap it in try/catch / promisses
   await navigator.serviceWorker.register('/service-worker.js')
}

self.addEventListener('訊息', (事件) => { // 處理訊息事件 })

3.推

  • 收到推播訊息時觸發此事件
if ('serviceWorker' in navigator) {
// wrap it in try/catch / promisses
   await navigator.serviceWorker.register('/service-worker.js')
}

self.addEventListener('push', (event) => { // 處理推送事件 })

4。同步事件

  • 當收到後台同步事件時會觸發此事件。
if ('serviceWorker' in navigator) {
// wrap it in try/catch / promisses
   await navigator.serviceWorker.register('/service-worker.js')
}

self.addEventListener('同步', (事件) => { // 處理後台同步事件 })

參考

  1. https://frontendmasters.com/courses/background-javascript

版本聲明 本文轉載於:https://dev.to/ashutoshsarangi/web-worker-vs-service-worker-5h50?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • 掌握 Laravel 中的 Eloquent where 條件
    掌握 Laravel 中的 Eloquent where 條件
    Laravel 的 Eloquent ORM(物件關係映射)是其突出的功能之一,提供了與資料庫互動的強大而富有表現力的方式。 Eloquent 提供的一項基本功能是方法,它允許開發人員高效、直觀地過濾查詢。在本文中,我們將深入研究 where 條件,探索其各種形式和實際用例。 w...
    程式設計 發佈於2024-11-08
  • 在 Gmail 的 Chrome 12+ 更新中如何從剪貼簿貼上圖片?
    在 Gmail 的 Chrome 12+ 更新中如何從剪貼簿貼上圖片?
    將剪貼簿中的圖像貼到Gmail:Chrome 12 中的操作方法Google 宣布能夠將剪貼簿中的圖像直接貼到Gmail使用Chrome 12 的Gmail 引發了人們對其底層機制的好奇。儘管使用了最新的 Chrome 版本,但一些用戶仍然無法找到有關如何在 Webkit 中實現此增強功能的資訊。 ...
    程式設計 發佈於2024-11-08
  • JavaScript 示範場景競賽 - JS 版
    JavaScript 示範場景競賽 - JS 版
    JS1024 於 2024 年回歸! 準備好迎接令人興奮的挑戰! JS1024 回歸,透過在 JavaScript、HTML 或 GLSL 中創建令人驚嘆的演示(全部在 1024 位元組限制內),將開發人員推向極限。無論您是經驗豐富的編碼員還是新手,這都是您展示創造力和技術技能的機...
    程式設計 發佈於2024-11-08
  • 第九屆 TCmeeting 的更新
    第九屆 TCmeeting 的更新
    議程上有幾個項目,本文重點介紹第 104 次 TC39 會議 [2024 年 10 月 8 日至 10 日] 的功能提案及其進展。 第一階段: 表示度量:建議在 JavaScript 中使用適當的單位格式化和表示度量。 Immutable ArrayBuffers:新增 Arra...
    程式設計 發佈於2024-11-08
  • 如何使用 CSS 在圖像地圖上實現滑鼠懸停效果?
    如何使用 CSS 在圖像地圖上實現滑鼠懸停效果?
    使用 CSS 設定圖片地圖滑鼠懸停樣式使用 CSS 設定圖片地圖滑鼠懸停樣式建立互動網頁時,通常需要包含具有可點擊區域的圖像。通常,這是使用圖像映射來實現的。然而,事實證明,在滑鼠懸停時設置這些區域的樣式以提供額外的互動性是難以實現的。 <img src="{main_photo}&...
    程式設計 發佈於2024-11-08
  • 升級您的前端遊戲:無頭與靜態未來的學習框架
    升級您的前端遊戲:無頭與靜態未來的學習框架
    前端領域正以驚人的速度發展。忘掉笨重、單一的網站吧-未來屬於無頭 CMS 和靜態網站產生器 (SSG)。這些時尚的強大功能提供了無與倫比的速度、靈活性和安全性,但征服它們需要使用正確的工具。 為了利用他們的力量,開發人員正在轉向 Next.js 和 Gatsby,這兩個尖端的前端框架塑造了我們如何...
    程式設計 發佈於2024-11-08
  • 如何修復 PyGame 動畫閃爍:故障排除和解決方案
    如何修復 PyGame 動畫閃爍:故障排除和解決方案
    PyGame 動畫閃爍:故障排除和解決方案在執行 PyGame 程式時,您可能會遇到動畫閃爍的問題。這可能會令人沮喪,特別是如果您不熟悉使用該框架。 PyGame 中動畫閃爍的根本原因通常是多次呼叫 pygame.display.update()。不應在應用程式循環中的多個點更新顯示,而應僅在循環結...
    程式設計 發佈於2024-11-08
  • JavaScript 中的聲明式程式設計與命令式程式設計
    JavaScript 中的聲明式程式設計與命令式程式設計
    當談到程式設計方法時,經常會出現兩種常見的方法:聲明式程式設計和命令式程式設計。每個都有其優點和理想的用例,尤其是在 JavaScript 中。讓我們透過一些例子來探討這兩種風格。 命令式程式設計:告訴電腦如何做 命令式程式設計就像是給出一組詳細的指令。你告訴計算機如何一步一步達到...
    程式設計 發佈於2024-11-08
  • 掌握 NestJS 中的資料驗證:類別驗證器和類別轉換器的完整指南
    掌握 NestJS 中的資料驗證:類別驗證器和類別轉換器的完整指南
    Introduction In the fast-paced world of development, data integrity and reliability are paramount. Robust data validation and efficient handl...
    程式設計 發佈於2024-11-08
  • 有多少 Python 套件的版本控制正確?
    有多少 Python 套件的版本控制正確?
    前幾天,當我研究Python套件中的漏洞資料庫時,我意識到其中的一些套件版本無法輕鬆解析並與其他版本字串進行比較,因為它們不遵守Python 版本控制- 舊的PEP 440或取代它的版本說明符規範。所以我開始想知道這種情況有多普遍。 Python 套件索引上有多少套件實際上有有效版本? 顯而易見的...
    程式設計 發佈於2024-11-08
  • 如何在 Web 應用程式中有效地對 Ajax 請求進行排序?
    如何在 Web 應用程式中有效地對 Ajax 請求進行排序?
    排序 Ajax 請求在許多 Web 應用程式中,通常會遇到需要迭代集合並對每個元素發出 Ajax 請求的情況。雖然利用非同步請求來避免瀏覽器凍結很誘人,但有效管理這些請求可以防止伺服器過載和其他潛在問題。 jQuery 1.5 對於 jQuery 1.5 及更高版本,$. ajaxQueue() 插...
    程式設計 發佈於2024-11-08
  • JavaScript 中「%」運算子的作用是什麼?
    JavaScript 中「%」運算子的作用是什麼?
    揭開 JavaScript 中 % 運算子的本質JavaScript 中神秘的 % 符號稱為模運算子。它在數學運算中發揮關鍵作用,它會傳回一個運算元除以另一個運算元後的餘數。 模運算子通常表示如下:var1 % var2其中var1 和 var2 代表操作數。 例如,如果我們有表達式 12 % 5,...
    程式設計 發佈於2024-11-08
  • 檢測過時的描述
    檢測過時的描述
    開發人員文件通常在每個文件中包含說明。這些描述可能會過時,導致混亂和不正確的資訊。為了防止這種情況,您可以使用一些 AI 和 GenAIScript 來自動偵測文件中過時的描述。 Markdown 和 frontmatter 許多文檔系統使用 markdown 格式來編寫文檔,並使...
    程式設計 發佈於2024-11-08
  • Java效能優化技術
    Java效能優化技術
    你好 ? 您可以找到有關 Java 效能優化技術 的完整文章 1. 概述 優化您的程式碼效能對於您的個人資料的成功至關重要。您是否知道 Akamai 的研究發現,如果頁面載入時間超過 3 秒,57% 的線上消費者就會放棄網站?在這篇文章中,您將學習如何優化 Java 程式碼並提高程...
    程式設計 發佈於2024-11-08
  • 糟糕的 CSS-爸爸笑話
    糟糕的 CSS-爸爸笑話
    身為一個使用 CSS 的爸爸,我開始講有關 Web 開發和 CSS 的壞爸爸笑話只是時間問題(這不是我一直在做的事情嗎?) 所以,給你:一些非常糟糕的 CSS 爸爸笑話的集合。有幾個已經進入 comiCSS 網站。其他一些可能遲早會成為動畫片。有些是原創的,很多是現有爸爸笑話的改編。它們都不是人工智...
    程式設計 發佈於2024-11-08

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3