2017-02-07 52 views
1

我的網站有6個不同的內容元素,我想通過服務人員特定的緩存方法進行控制。ServiceWorker ifs爲特定內容定義特定緩存

  1. [預緩存]靜態內容(CSS,JS,字體)
  2. [緩存回退到互聯] CDN(從CloudFront的S3圖像)
  3. [網絡後備緩存] INDEX (主頁)
  4. [緩存回退到互聯] PAGES(domain.com/sth - > HTML)
  5. [通] API(AJAX調用)
  6. [通]其他的東西(分析,標籤管理器)

我製成內部ServiceWorker 6個IFS取事件。

我的問題是...這是一個好方法嗎?不是方法...因爲它是特定於我的網站/博客。但是,你如何看待這些ifs?過濾特定內容並使用適當的緩存是否正確?

var domain = location.host.split('.')[0] 

regexStatic = new RegExp('https://' + location.host + '/build/(.*)') 
regexCdn = new RegExp('https://cdn.' + domain + '(.*)') 
regexIndex = new RegExp('https://' + location.host + '/') 
regexApi = new RegExp('https://' + location.host + '/api/(.*)') 
regexPages = new RegExp('https://' + location.host + '/(.*)') 

self.addEventListener('fetch', function (event) { 
    // STATIC 
    if (regexStatic.test(event.request.url)) { 
    event.respondWith(
     // 
    ) 
    return 
    } 

    // CDN 
    if (regexCdn.test(event.request.url)) { 
    event.respondWith(
     // 
    ) 
    return 
    } 

    // INDEX 
    if (regexIndex.test(event.request.url)) { 
    event.respondWith(
     // 
    ) 
    return 
    } 

    // API 
    if (regexApi.test(event.request.url)) { 
    return 
    } 

    // PAGES 
    if (regexPages.test(event.request.url)) { 
    event.respondWith(
     // 
    ) 
    return 
    } 

    // OTHER 
    console.log('NOT INCLUDED IN CACHE: ', event.request.url) 
}) 

回答

0

你爲什麼要劃分內容。

如果在緩存中找不到內容,它將自動轉發到網絡進行提取,否則將提供本地緩存副本。

只需在製作API調用時檢查content-type並且不要緩存這些響應。

只是將內容分成兩類。Cache-able/Non Cache-able

獲得更多點擊這裏: https://github.com/GoogleChrome/samples/tree/gh-pages/service-worker