老熟女激烈的高潮_日韩一级黄色录像_亚洲1区2区3区视频_精品少妇一区二区三区在线播放_国产欧美日产久久_午夜福利精品导航凹凸

重慶分公司,新征程啟航

為企業(yè)提供網(wǎng)站建設(shè)、域名注冊、服務(wù)器等服務(wù)

javascript中ServiceWorkers是什么-創(chuàng)新互聯(lián)

這篇文章主要介紹javascript中Service Workers是什么,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!

成都創(chuàng)新互聯(lián)公司為企業(yè)級客戶提高一站式互聯(lián)網(wǎng)+設(shè)計(jì)服務(wù),主要包括網(wǎng)站設(shè)計(jì)制作、成都網(wǎng)站建設(shè)、成都app軟件開發(fā)重慶小程序開發(fā)公司、宣傳片制作、LOGO設(shè)計(jì)等,幫助客戶快速提升營銷能力和企業(yè)形象,創(chuàng)新互聯(lián)各部門都有經(jīng)驗(yàn)豐富的經(jīng)驗(yàn),可以確保每一個(gè)作品的質(zhì)量和創(chuàng)作周期,同時(shí)每年都有很多新員工加入,為我們帶來大量新的創(chuàng)意。 

service worker 是什么

Service Worker 是 Chrome 團(tuán)隊(duì)提出和力推的一個(gè) WEB API,用于給 web 應(yīng)用提供高級的可持續(xù)的后臺處理能力。該 WEB API 標(biāo)準(zhǔn)起草于 2013 年,于 2014 年納入 W3C WEB 標(biāo)準(zhǔn)草案,當(dāng)前還在草案階段。

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

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

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

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

Service Worker 特點(diǎn)

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

如何注冊 Service Worker

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

// 首先檢查瀏覽器是否支持 Service Worker
if ('serviceWorker' in navigator) {
  navigator.serviceWorker
    .register('/sw/service-worker.js')
    .then(function(registration) {
      console.log(registration);
    })
    .catch(function(err) {
      console.log(err);
    });
}

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

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

注意:

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

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

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

Service Worker 可以啟用哪些功能?

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

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

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

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

我們可以從中得出兩個(gè)步驟:

  • 預(yù)緩存
  • 從緩存中處理請求

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

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

預(yù)緩存

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

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

self.addEventListener('install', function(event) {
  event.waitUntil(
    caches.open(currentCache.offline).then(function(cache) {
      return cache.addAll([
        '/static/images/offline.svg',
        '/static/html/offline.html',
      ]);
    });
  );
});

從緩存中處理請求

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

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

self.addEventListener('fetch', function(event) {
  event.respondWith(
    caches.match(event.request).then(function(response) {
      return response || fetch(event.request);
    })
  );
});

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

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

定期后臺同步

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

后臺同步

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

例如,在手機(jī)上編輯文檔后,我們寫完會(huì)點(diǎn)擊“保存”并離開頁面。 如果在編輯文檔期間連接斷開,我們必須等待連接恢復(fù)才能保存文檔。

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

來看一個(gè)示例:

app.js

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

service-worker.js

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

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

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

定期后臺同步

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

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

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

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

推送通知

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

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

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

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

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

瀏覽器支持情況

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

以上是“javascript中Service Workers是什么”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!


網(wǎng)頁題目:javascript中ServiceWorkers是什么-創(chuàng)新互聯(lián)
分享鏈接:http://www.xueling.net.cn/article/djgdpd.html

其他資訊

在線咨詢
服務(wù)熱線
服務(wù)熱線:028-86922220
TOP
主站蜘蛛池模板: 中文字幕高清免费日韩视频在线 | 91大片在线观看 | 国产人妻人伦精品1国产盗摄 | 亚洲国产成人A片乱码 | 亚洲AV无码潮喷在线观看 | 丁香五月网久久综合 | 久久草在线视频播放 | 午夜国产小视频 | 91看片资源 | 亚洲精品在线第一页 | 日韩AV片无码一区二区三区不卡 | 少妇极品熟妇人妻 | 成人午夜大片免费看爽爽爽 | 97一区二区三区 | 亚洲综合精品视频 | 2020亚洲午夜无码天堂 | 男人操女人的视频网站 | 99精品欧美一区二区 | 中文字幕乱码在线播放 | 老司机狠狠干 | 国语自产精品视频在线区 | 免费无人区男男码卡二卡 | 亚洲精品欧美二区三区中文字幕 | 中文字幕一区在线播放 | 久久久精品人妻一区二区三区蜜桃 | 日韩二区精品 | 国产露脸饥渴孕妇在线播放 | 一级女性生活片 | 欧美疯狂xxxxbbbb喷潮 | 国产精品88久久久久久妇女厕 | 国产日韩精品一区二区在线观看播放 | 国产性生活毛片 | 亚洲精品无码成人网站 | аⅴ资源中文在线天堂 | 国产精品美女久久久浪潮av | a视频免费观看 | 极品尤物一区二区三区 | 久久久亚洲精品视频 | 精品伊人久久久久7777人 | 浮生影视在线观看免费高清 | 久久精品国产亚州Av果冻传媒 |