国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

Service Workers - JavaScript API 簡介

開發(fā) 前端
Service Worker 是 Chrome 團隊提出和力推的一個 WEB API,用于給 web 應用提供高級的可持續(xù)的后臺處理能力。該 WEB API 標準起草于 2013 年,于 2014 年納入 W3C WEB 標準草案,當前還在草案階段。

[[355135]]

本文已經(jīng)原作者 Felix Gerschau 授權(quán)翻譯

service worker 是什么

Service Worker 是 Chrome 團隊提出和力推的一個 WEB API,用于給 web 應用提供高級的可持續(xù)的后臺處理能力。該 WEB API 標準起草于 2013 年,于 2014 年納入 W3C WEB 標準草案,當前還在草案階段。

Service Worker 最主要的特點是:在頁面中注冊并安裝成功后,運行于瀏覽器后臺,不受頁面刷新的影響,可以監(jiān)聽和截攔作用域范圍內(nèi)所有頁面的 HTTP 請求。

類似一個服務器與瀏覽器之間的中間人角色,如果網(wǎng)站中注冊了service worker 那么它可以攔截當前網(wǎng)站所有的請求,進行判斷(需要編寫相應的判斷程序),如果需要向服務器發(fā)起請求的就轉(zhuǎn)給服務器,如果可以直接使用緩存的就直接返回緩存不再轉(zhuǎn)給服務器。從而大大提高瀏覽體驗。

Service Worker 可以啟用以前原生應用程序?qū)S械囊唤M功能。Service Worker 的初稿已于2014年發(fā)布,現(xiàn)在所有主流瀏覽器都支持它們。

就像已經(jīng)指出的定義一樣,Service Worker 是網(wǎng)絡代理。這意味著它們可以控制頁面中的所有網(wǎng)絡請求,并且可以對其進行編程,使用緩存的進行響應。

Service Worker 特點

  • 網(wǎng)站必須使用 HTTPS。除了使用本地開發(fā)環(huán)境調(diào)試時(如域名使用 localhost)
  • 運行于瀏覽器后臺,可以控制打開的作用域范圍下所有的頁面請求
  • 單獨的作用域范圍,單獨的運行環(huán)境和執(zhí)行線程
  • 不能操作頁面 DOM。但可以通過事件機制來處理

如何注冊 Service Worker

注冊 Service Worker 不需要太多代碼,只需要一個用于Service Worker 代碼的 JS 文件,一般取名為 service-worker.js

  1. // 首先檢查瀏覽器是否支持 Service Worker 
  2. if ('serviceWorker' in navigator) { 
  3.   navigator.serviceWorker 
  4.     .register('/sw/service-worker.js'
  5.     .then(function(registration) { 
  6.       console.log(registration); 
  7.     }) 
  8.     .catch(function(err) { 
  9.       console.log(err); 
  10.     }); 

其實關(guān)鍵代碼只有一行:

  1. navigator.serviceWorker.register('/sw/service-worker.js'

注意:

Service Worker 的注冊路徑?jīng)Q定了其 scope 默認作用范圍。示例中 service-worker.js 是在 /sw 路徑下,這使得該 Service Worker 默認只會收到 /sw 路徑下的 fetch事件。如果存放在網(wǎng)站的根路徑下,則將會收到該網(wǎng)站的所有 fetcg事件。

如果希望改變它的作用域,可在第二個參數(shù)設(shè)置 scope范圍。示例中將其改為了根目錄,即對整個站點生效。

另外應意識到這一點:Service Worker 沒有頁面作用域的概念,作用域范圍內(nèi)的所有頁面請求都會被當前激活的 Service Worker 所監(jiān)控。

Service Worker 可以啟用哪些功能?

在本節(jié)中,我將進一步詳細介紹Service Worker的功能,包括一些小代碼示例。

服務工作者啟用以下功能,這些功能也是 PWA的核心:

  • 離線功能
  • 定期后臺同步
  • 推送通知

離線功能

Service Worke 通過緩存資源和攔截網(wǎng)絡請求來提供離線功能,這些請求可以與先前緩存的資源一起使用,而不是重新請求服務器。

我們可以從中得出兩個步驟:

  • 預緩存
  • 從緩存中處理請求

這兩個步驟都利用了Cache API,它由 Web Workers 和瀏覽器使用,并且為我們提供了用于網(wǎng)絡請求的存儲機制。

對 Web 和服務工作人員上下文的 localStorage 訪問被阻止,以防止并發(fā)性問題。作為一種替代方案,IndexedDB 可以用于存儲大量數(shù)據(jù)。

預緩存

預緩存是一個術(shù)語,描述了在 Service Worker 處于激活狀態(tài)之前下載和緩存文件。它是在 Service Worker 生命周期的“install ”步驟中完成的。一旦 Service Worker 處于激活狀態(tài),它將準備為緩存中的文件提供服務。

通常,我們要緩存 Application Shell,這是運行網(wǎng)站所需的最少代碼量。如果開發(fā)了本機應用程序,那么這就是您將上傳到應用程序商店的代碼包。這包括所有必需的基本JavaScript,HTML和圖片。

  1. self.addEventListener('install'function(event) { 
  2.   event.waitUntil( 
  3.     caches.open(currentCache.offline).then(function(cache) { 
  4.       return cache.addAll([ 
  5.         '/static/images/offline.svg'
  6.         '/static/html/offline.html'
  7.       ]); 
  8.     }); 
  9.   ); 
  10. }); 

從緩存中處理請求

在此階段,我們已經(jīng)將所有應用程序代碼存儲在緩存中,并且Service Worker 已處于激活即運行于瀏覽器后臺。

現(xiàn)在唯一缺少的是監(jiān)聽 fetch 事件并從緩存中返回結(jié)果。可以通過 fetch 事件可以攔截到當前作用域范圍內(nèi)的 http/https 請求,并且給出自己的響應。結(jié)合 Fetch API ,可以簡單方便地處理請求響應,實現(xiàn)對網(wǎng)絡請求的控制。

  1. self.addEventListener('fetch'function(event) { 
  2.   event.respondWith( 
  3.     caches.match(event.request).then(function(response) { 
  4.       return response || fetch(event.request); 
  5.     }) 
  6.   ); 
  7. }); 

在本例中,我們盡可能使用緩存的內(nèi)容進行響應。作為回退,我們發(fā)出一個網(wǎng)絡請求。

這里實現(xiàn)了一個緩存優(yōu)先、降級處理的策略邏輯:監(jiān)控所有 http 請求,當請求資源已經(jīng)在緩存里了,直接返回緩存里的內(nèi)容;否則使用 fetch API 繼續(xù)請求,如果是 圖片或 css、js 資源,請求成功后將他們加入緩存中;如果是離線狀態(tài)或請求出錯,則降級返回預緩存的離線內(nèi)容。

定期后臺同步

正如在引言中已經(jīng)提到的那樣,Service Worker 與其他服務工作者在一個單獨的線程上運行,所以即使關(guān)閉頁面,它們也可以執(zhí)行其代碼。此功能對于執(zhí)行后臺同步和提供推送通知很重要。

后臺同步

用戶離開頁面后,后臺同步通常用于同步數(shù)據(jù)。

例如,在手機上編輯文檔后,我們寫完會點擊“保存”并離開頁面。如果在編輯文檔期間連接斷開,我們必須等待連接恢復才能保存文檔。

后臺同步的目的是解決這個問題,一旦連接重新建立,自動發(fā)送數(shù)據(jù)。

來看一個示例:

app.js

  1. navigator.serviceWorker.ready.then((registration) => { 
  2.   return registration.sync.register('sync-save-document'); 
  3. }); 

service-worker.js

  1. self.addEventListener('sync', (event) => { 
  2.   if (event.tag === 'sync-save-document') { 
  3.     event.waitUntil(saveDocument()); 
  4.   } 
  5. }); 

saveDocument是一個返回 Promise,如果被拒絕(例如由于網(wǎng)絡問題),同步將自動重試。

要注意的一件事是,同步標記必須是唯一的。例如,如果我要安排5個“message”類型的后臺同步,則只有最后一個會通過。因此,在這種情況下,每個標簽都應具有唯一的標識符。

定期后臺同步

定期后臺同步解決與正常后臺同步不同的問題。該API可用于在后臺更新數(shù)據(jù),而不必等待用戶。

這對很多應用程序都很有用。有了這項技術(shù),用戶可以在沒有互聯(lián)網(wǎng)連接的情況下閱讀最新的新聞文章。

為了防止濫用這一功能,同步的頻率取決于瀏覽器為每個網(wǎng)站設(shè)置的站點參與度分數(shù)。如果你經(jīng)常打開一個網(wǎng)頁應用,這個頻率最多可以達到12個小時。

要實現(xiàn)此目的一個要求是,該網(wǎng)站已作為移動設(shè)備上的 PWA 安裝并添加到主屏幕。

推送通知

Service Worker另一個類似本機的特性是推送通知。我們通常通過手機短信或社交媒體通知的形式知道它們,但它們也可以在臺式電腦上使用。

除Safari之外,所有主流瀏覽器都支持它們,而Safari對桌面應用程序有自己的實現(xiàn)。

要使用推送通知,需要設(shè)置一臺服務器,該服務器會將通知推送給所有客戶端。由于Service Worker在后臺在另一個線程上運行,因此即使頁面當前未打開,用戶也可以看到推送通知。

推送的實現(xiàn)有兩步:

不同瀏覽器需要用不同的推送消息服務器。以 Chrome 上使用 Google Cloud Messaging 作為推送服務為例,第一步是注冊 applicationServerKey(通過 GCM 注冊獲取),并在頁面上進行訂閱或發(fā)起訂閱。每一個會話會有一個獨立的端點(endpoint),訂閱對象的屬性(PushSubscription.endpoint) 即為端點值。將端點發(fā)送給服務器后,服務器用這一值來發(fā)送消息給會話的激活的 Service Worker (通過 GCM 與瀏覽器客戶端溝通)。

瀏覽器支持情況

除了 Safari 和 IE/Edge,大部分現(xiàn)代瀏覽器都已經(jīng)得到了支持。

總結(jié)

希望通過本文介紹基本概念和特性,可以讓你更好地理解Service Worker。

作者:Felix Gerschau 譯者:前端小智 來源:Felix Gerschau 原文:https://felixgerschau.com/service-workers-explained-introduction-javascript-api/

本文轉(zhuǎn)載自微信公眾號「大遷世界」,可以通過以下二維碼關(guān)注。轉(zhuǎn)載本文請聯(lián)系大遷世界公眾號。

 

責任編輯:武曉燕 來源: 大遷世界
相關(guān)推薦

2018-04-03 10:28:53

AmazonElasticsearAWS

2011-04-01 15:29:16

BlackBerry

2024-01-23 16:48:32

2020-07-20 07:56:28

JavaScript開發(fā)技術(shù)

2011-04-25 17:17:55

Gesture APIWindows Mob

2009-06-12 14:40:38

Hibernate AHibernate接口

2010-09-17 09:19:08

Java API

2016-03-29 09:59:11

JavaScriptAPI設(shè)計

2010-09-08 17:26:46

JavaScript

2020-12-25 10:28:41

JavaScript模塊module

2009-11-23 19:50:33

ibmdwWebService

2020-06-18 09:16:20

JavaScript緩存API

2017-06-19 14:21:01

JavaScriptAPI設(shè)計原則

2020-07-29 09:13:28

JavaScript開發(fā)技術(shù)

2011-07-29 10:02:59

Master DataAPIModel

2022-10-28 13:38:40

ServiceLinkerd服務網(wǎng)格

2022-12-02 08:00:00

JavaScriptAstro前端

2023-05-12 07:40:01

Java8API工具

2009-08-11 14:16:00

Winform調(diào)用WEC#

2021-11-17 18:38:32

avaScriptSDK調(diào)試
點贊
收藏

51CTO技術(shù)棧公眾號

国产精品日韩三级| 天堂av中文在线资源库| 999久久久精品国产| 日韩在线视频国产| 3d玉蒲团在线观看| 色综合久久久久网| 丁香资源影视免费观看| 久久综合狠狠综合| 男的插女的下面视频| 国精品**一区二区三区在线蜜桃| 蜜桃网站成人| 亚洲精品视频啊美女在线直播| 成人国产亚洲精品a区天堂华泰| 亚洲国产欧美日韩在线观看第一区 | 一区二区三区四区在线观看国产日韩| 91国内揄拍国内精品对白| 日本一区二区三区电影免费观看 | 国产福利一区二区| 久久国产精品免费观看| 国产成人综合网| 岛国大片在线播放| www欧美成人18+| 五月婷婷狠狠操| 国产精品美女久久久久久久久| 国产视频一区二区视频| 国产精品嫩草影院com| 超污网站在线观看| 精品久久久精品| 午夜激情在线观看| 日韩成人av网址| 四虎精品永久免费| 91av福利视频| 91精品国产成人观看| 国外成人免费视频| 另类调教123区| 一区二区免费电影| 国产成a人亚洲精| 情侣黄网站免费看| 亚洲综合激情另类小说区| 波多野吉衣av| 欧美日韩视频在线| av网址在线| 中文字幕国内精品| 亚洲精品推荐| 国产精品国产亚洲精品看不卡15 | 日韩av免费在线看| 99久久99久久精品国产片果冰| av一区二区三区在线观看| 国产精品免费看| 黄黄视频在线观看| 国产精品久久久久aaaa樱花| 在线影视一区| 欧美成人一区二区三区在线观看| 国产亚洲一区二区手机在线观看| 国语自产精品视频在线看| 亚洲精品网址| 大片在线观看网站免费收看| 欧美国产综合色视频| 国产一级免费在线观看| 亚洲天堂成人在线| 青青操综合网| 日韩电影大全在线观看| 国产精品美女久久久久aⅴ| 成人全视频高清免费观看| 日韩在线观看视频免费| 91精品精品| 成人网站免费观看入口| 黑人狂躁日本妞一区二区三区 | 欧美日韩一区二区在线观看视频 | 91精品国产福利| 试看120秒一区二区三区| 成人综合色站| 成人a免费在线看| 毛片在线免费| 欧美大胆在线视频| 国产亚洲一级| 182午夜在线观看| 欧美一区二区三区日韩视频| 日韩中文一区二区| 日韩欧美精品一区二区| 亚洲欧美日韩国产综合| 成人免费看黄| 国产色综合一区二区三区| 国产日本亚洲高清| 大香伊人中文字幕精品| 国产精品久在线观看| 高清在线不卡av| 麻豆视频在线观看免费| 日韩av大片在线| 成人h精品动漫一区二区三区| 日本三级在线播放完整版| 青草热久免费精品视频| 成人白浆超碰人人人人| 日本三级韩国三级欧美三级| 国产精品吴梦梦| 久久久一区二区三区捆绑**| 国产黄色大片在线观看| 成人黄动漫网站免费| 日本一区二区三区国色天香| 深夜成人影院| 日韩精品久久一区| 欧美在线一二三四区| 久久不见久久见中文字幕免费| 亚洲美免无码中文字幕在线| 亚洲精品按摩视频| 国产精品视区| 亚洲人成电影| 国产精品第1页| 中文字幕欧美国产| 男人亚洲天堂| 国产成人永久免费视频| 精品久久人人做人人爽| 国产精品theporn| 污黄视频在线看| 国产999在线观看| 国产精品国产三级国产普通话蜜臀 | 夜夜嗨av一区二区三区网页| 精品国产不卡一区二区| 免费日韩在线观看| 精品国产露脸精彩对白| 亚洲日本黄色| 最新电影电视剧在线观看免费观看| 国产精品无av码在线观看| 亚洲激情六月丁香| 伊人久久综合影院| 在线播放evaelfie极品| 国产精品高清免费在线观看| 伊人开心综合网| 国产一区二区三区四区大秀| 理论片在线观看理伦片| 成人精品一区二区三区电影免费 | 色综合天天色综合| 久久成人综合视频| 久久亚区不卡日本| 日本高清精品| 久久婷五月综合| 国产91热爆ts人妖在线| 国产精品视频免费| 国产一区二区三区探花| 一级片在线免费看| 国产欧美一区二区在线播放| 欧美日本视频在线| 日一区二区三区| 丁香花在线影院| 狠狠干视频网站| xxxxx91麻豆| 国产精品网站导航| 欧美日韩亚洲在线观看| 蜜桃视频在线观看视频| 欧美日韩精品一区| 亚洲欧美日韩网| 久久精品网站免费观看| 日韩久久精品网| h视频在线免费观看| 精品国产无码在线| 久久6免费高清热精品| 亚洲一区二区精品久久av| 欧美日韩午夜| 免费观看一级欧美片| 欧美伦理片在线观看| 国产精品久久一| 51精品视频一区二区三区| 国产成人三级在线观看| 六月丁香久久丫| 日产精品久久久久久久性色| 水蜜桃亚洲精品| 爱福利视频一区| 香蕉加勒比综合久久| 日韩成人免费电影| 精品999日本久久久影院| 国产青青视频| 国产伦精品一区二区三区免| 亚洲图片在线综合| 一区二区在线观看视频| 国产精品日韩精品欧美精品| 99国内精品久久久久| 在线免费视频你懂得| 米仓穗香在线观看| 欧美亚洲国产日本| 精品国产一区二区三区不卡 | 色婷婷综合久久久中文一区二区| 久久精品首页| 高清不卡一区| 国产大学生校花援交在线播放| 少妇高潮大叫好爽喷水| 欧美在线一区二区三区四| 日韩写真欧美这视频| 久久综合久久综合久久综合| 真实国产乱子伦精品一区二区三区| 在线观看电影av| 天天干天天操天天做| 欧美精品与人动性物交免费看| www国产精品视频| 欧美美女一区二区| 国产片一区二区| 久久久久久久高潮| 亚州av日韩av| 中老年在线免费视频| 日韩精品福利| 欧美色图另类小说|