service-worker

 https://kailian.github.io/2017/03/01/service-workerjavascript

 http://imweb.io/topic/56592b8a823633e31839fc01java

 

1、Service Worker的身份git

  Service的意思是服務,Worker的意思是工人,那麼Service Worker的意思就是服務員。這個員工是2014年6月HTML5新招的實習生,目前在試用中。在此以前,已經有一位老員工,它叫Web Worker。那麼問題來了,Boss是誰?Boss就是瀏覽器。準確來講,每一個頁面的javascript運行主線程都是一個Boss。github

  這裏先談一下大的背景。Boss很厲害,在頁面上指點江山,呼風喚雨。但他有個侷限:同一時刻只作一件事(單線程)。當一些很耗時的瑣事讓Boss去處理時,在處理的過程當中他就無暇顧及其它重要的事了。在用戶看來,頁面沒人管了,Boss不幹事了!這時Boss就很鬱悶。爲了保證Boss能處理更重要的事情,董事會(W3C)終於招聘了一個新員工:Web worker。這下,Boss終於能夠從耗時的瑣事中解放出來了,他只須要把Web worker叫過來講:「這些事情拿去作,沒作完不要來找我」。Web worker領到任務後默默地到本身的工位(線程)去幹活,完成以後給Boss發了個郵件(postMessage)。Boss收到郵件(onmessage)後欣慰地點了點頭。web

  扯了半天好像還沒談到新員工啊。。。不急,下面就講到了。瀏覽器

  Boss下班了(頁面關閉),Web worker也收拾東西回家了。這樣執行了好久,直至2014年6月,董事會發現一個問題:「竟然沒有人在老闆下班後加班?」。因而,又招了一個專職加班的:Service Worker。它被賦予的績效目標以下:緩存

  1. 入職(install)後永不下班,而能更新。
  2. 能處理Boss須要的資源(HTTPS請求),以便離線時也能讓BOSS取到數據(從cache中)。
  3. 能向客戶推送消息(push notifications)
  4. 不容許越權管理Boss的事(DOM ACCESS)

  總地來講,Service worker是獨立於頁面的一個運行環境,它在頁面關閉後仍能夠運行。同時,也能對它負責的頁面的網絡請求進行截取和返回請求(相似於Fiddler)。服務器

 

二、webWorker和serviceWorker的區別?網絡

  serviceworker是在webworker基礎上實現的,它可認爲是使用了webworker技術來處理網絡請求、響應等方面的事務。 serviceWorker能夠認爲是一種改進後的webWorker。webworker作的是多線程,serviceworker則是用webworker作了個與網絡請求相關封裝,來監聽一些網絡事件。固然serviceworker也能夠來作不少事情,例如離線緩存應用,甚至替代fiddler做爲調試工具。 多線程

  Service Worker是繼web Worker後又一個新的線程,這個線程比web worker獨立得更完全,能夠在頁面沒有打開的時候就運行。做爲一個頁面與服務器之間中間層,Service Worker能夠捕獲它所負責的頁面的請求,並返回相應資源,這使離線web應用成爲了可能。這也是Service Worker被提出的一個重要目的。

相關文章
相關標籤/搜索