Service Worker, 你到底是個什么東西?
我 : “Service Worker,你到底是個什東西”
Service Worker : “我是一個可編程的網絡代理”
我 : “你說啥?”
Service Worker 聽起來非常酷炫,但是我一直弄不懂它個是什么東西。
2015年7月,我坐在 Austin Texas 的一個劇院里參加 JavaScript 會議。那時候我還把站在臺上的 Jake Archibald 當成一個在討論浴室與 :toilet: 緊密聯系有趣的英國小伙子,直到后來我才發現他是設計 Service Worker 細則的大人物?。
在舞臺上,他在說關于公共浴室用戶體驗的奇聞軼事間隙里,介紹了這個新事物叫做 Service Worker,它可以使得你的網站像 native app 一樣使用(至少我是這么理解的)。
這聽起來非常有趣,使得我想要在我的 web 項目里使用。一開始這個概念很難去理解...它不是一個圖書館,不是一個新的 HTML 元素,也不是一個新的 JavaScript 語法。當我在讀一些“介紹 Service Worker ”類的文章時,我總是會對像 “proxy” 和 “cache” 這些單詞感到困惑。當我試圖去理解 Service Worker 是干什么的,我在紙上亂涂亂畫,并且最終幸運地弄懂了它,它就像一個你可以邀請住到用戶瀏覽器里的外星人。聽起來很奇怪?好吧,讓我來解釋給你聽。
Service Worker 是一個在 web 瀏覽器宇宙里的外星人
想象你的 web 瀏覽器是一個星球(就像地球),是計算機星系里的一部分。在這個星球上,人們說著如 HTML、CSS 和 JavaScript 來創建 web 頁面的社會。如果你是 web 開發者,你應該對這個社會中不同種類的元素到回收機制(垃圾回收)都有著非常深的認識。
這個星球開發出一種可以與外界聯系,叫做 超文本傳輸協議 的方法。這是一種從其他星系(服務器)請求數據的方法。這就是瀏覽器星球如何變成了貓貓動態圖和推特聚集地的,也是使得瀏覽器星球這么的有趣以及數百萬用戶使用它的原因。
HTTP 聽起來像是非常酷炫的魔術,但事實上,你需要在一個叫做 因特網 的管道里使用 HTTP 聯系外部星系。管道的大小和長度取決于你支付給了因特網架構者(ISP)多少錢以及你所在區域的基礎設施。對比非常短和寬的管道,非常窄或者長的管道會花費更多時間從其他星系獲取資源。
事情是這樣的,對于我們的星球瀏覽器,這個因特網基礎設施并不總是有效的。當瀏覽器無法連接上管道,它會把自己扔回到一個沒有任何現代事物存在的時代,并且讓恐龍來使我們回憶起過去美好的日子。
但是等一等!Service Worker 就是來幫助我們的!
Service Worker 是坐落于瀏覽器星球和因特網管道間的一個東西。與直接發送請求到其他星系不同,你可以發送請求到 Service Worker,并且讓它們為你工作。它就像一個在 UFO 里的外星人(至少對于我來說是這樣的)。
這里有你必需知道的,關于新朋友 Service Worker 的三個事情
-
Service Worker 是由你調用起的。如果你不調用它,那就不會有 Service Worker。但是一旦使用了 Service Worker 來幫助你,它們就必須做完了所有事情才會結束。它沒有像 Web Worker 的 .terminate() 方法。
-
Service Worker 駐扎在網頁外。當你關閉了瀏覽器窗口,一般來說所有東西都會失效。你無法繼續下載有趣的視頻或者閱讀書中的下一個章節。瀏覽器將會 :100: 休息。然而 即使你已經把瀏覽器窗口關閉 ,通過一些瀏覽器的奇妙事情,在需要 Service Worker 的時候,它可以一直在喚醒狀態,并且可以在不需要的時候結束!你(作為一個對瀏覽器星球感興趣的 Web 開發者)無需控制 Service Worker 的生命周期(這就為什么我認為它有點像外星人)。
-
正如前面所述,Service Worker 駐扎在頁面外,也就意味著它無法碰觸到瀏覽器星球里的元素。你無法在 Service Worker 代碼里使用 window 或者 document ,也無法修改 DOM 元素。
那么你可以要求 Service Worker 干什么呢?
1. 與緩存交互
你可以讓 Service Worker 成為監聽 fetch 事件的中間人。你也可以讓 Service Worker 保存某些資源在緩存里。當緩存項被請求,Service Worker 無需發出額外的請求就可以返回緩存數據。只要資源被緩存,瀏覽器無需網絡連接就可以展示內容。
2. 發送推送通知
在“當瀏覽器窗口被關閉,Service Worker 仍然是活著的”這樣奇跡下,你可以實現諸如推送通知的事情。
3. 后臺同步運行
活躍的意思是指瀏覽器沒有打開的情況下,Service Worker 可以在用戶不知情下后臺工作。也就是說當你在瀏覽器離線時發送一些文件,Service Worker 會在網絡連接有效時再把它們上傳到外部服務器。
來自:http://www.zcfy.cc/article/service-worker-what-are-you-mariko-kosaka-1927.html