原文 Service Worker, what are you ?
我:「Service Worker,你是什麼?」
Service Worker:「我是一個可編程網絡代理。」
我:「嚇?」編程
2015年七月,我在德州奧斯丁出席了一個JavaScript大會。臺上的是Jake Archibald,我當時只知道他是一個講了一些 bathroom matter 的有趣英國人(18.07.20 更新!!感謝這個視頻讓我意識到這個 bathroom matter 應該是指口音問題)。可是後來我才知道,他但是定製Service Worker規範的大人物。演講地址
臺上他圍繞着他對用戶體驗的感悟,介紹了一個叫作Service Worker的新東西,它可讓你的網站用起來和原生手機醫用同樣(這是個人理解)。
這聽起來很贊,我很但願能夠把這個技術用在個人項目上,雖然剛接觸它理解起來不容易...這不是一個庫,不是一個新的HTML元素,又不是Javascript語法。閱讀關於介紹Service Worker的文章老是被一些名詞迷惑——例如「代理」和「緩存」。經過邊理解邊畫圖的方法,我終於對此有所理解,Service Worker是一個外星人,你能夠邀請他住在你的瀏覽器裏。聽起來很奇怪?請聽我解釋。瀏覽器
試想一下你的瀏覽器是計算機星系裏的一個星球(像是地球)。這個星球裏,人們用HTML, CSS, 和JavaScript等語言構成「網頁社會」。若是你是網站開發者,從不一樣類型的元素到垃圾回收機制你都懂了,那你多是這個星球的社會學家了。緩存
這個星球發明了一種連接外部世界的方法,那就是超文本傳輸協議。這是從其餘星系(服務器)請求資源的方法。有了這個方法咱們的星球(瀏覽器)才能收集各類貓gif和發推。也是這個方法讓這個星球變得有趣,並保持數百萬住戶。服務器
把超文本傳輸協議(HTTP)說得很神奇,但實際上你要用HTTP鏈接其餘星系須要爲此鋪設名爲因特網的管道。尺寸和長度要看你給了網絡供應商多少錢,以及你所在地區的基礎設施。若是這條管道又窄又長,那獲取資源的速度就相對慢些了。網絡
問題來了,供應商不必定能保持咱們星球的網絡暢通,當瀏覽器不能鏈接這個管道,咱們的星球就要回到過去了,回到那個恐龍橫行的時代。網站
Service Worker存在於管道和星球之間。你發送的請求交給了Service Worker,請求他幫忙,而不是直接傳到其餘星系。這(對我來講)感受就像是UFO裏面的外星人。spa
1. 與緩存互動
你能夠請求Service Worker做爲中間人檢查事件收發,請求Service Worker在緩存裏保存完整的資源。當緩存的項目被請求,Service Worker能夠在緩存中請求這些數據而不用經過HTTP。這些資源被緩存了,瀏覽器就能夠在網絡不通的狀況下展現內容。3d
2. 推送提醒
得益於「Service Worker能夠在瀏覽器窗口關閉時保持活動狀態」這一奇蹟,你能夠實現相似推送提醒的功能。代理
3. 運行後臺同步
能夠在瀏覽器窗口關閉時保持活動狀態也意味着Service Worker能夠在後臺運做(如用戶切換到其餘標籤時)。假如當瀏覽器離線時,你要發送一些文件,Service Worker 能夠幫你在網絡接通時上傳。視頻
若是你對Service Worker 是什麼感到迷惑的話,但願這篇文章能夠幫到你,想要開始寫代碼了?我推薦你看看Jake Archibald的offline-cookbook。
某譯者的胡說八道到底bathroom matter是什麼鬼啦((