|
3 | 3 |
|
4 | 4 | 'use strict'; |
5 | 5 |
|
6 | | -// наименование для нашего хранилища кэша |
7 | | -var CACHE_NAME = 'app_serviceworker_v_1', |
8 | | -// ссылки на кэшируемые файлы |
9 | | - cacheUrls = [ |
10 | | - '/sample/', |
11 | | - '/sample/js/app.js', |
12 | | - '/sample/index.html' |
13 | | -]; |
| 6 | +// Задаем имя |
| 7 | +var CACHE = 'mahoweek-cache-and-update'; |
14 | 8 |
|
| 9 | +// Устанавливаем |
15 | 10 | self.addEventListener('install', function(event) { |
16 | | - // задержим обработку события |
17 | | - // если произойдёт ошибка, serviceWorker не установится |
18 | | - event.waitUntil( |
19 | | - // находим в глобальном хранилище Cache-объект с нашим именем |
20 | | - // если такого не существует, то он будет создан |
21 | | - caches.open(CACHE_NAME).then(function(cache) { |
22 | | - // загружаем в наш cache необходимые файлы |
23 | | - return cache.addAll(cacheUrls); |
24 | | - }) |
25 | | - ); |
| 11 | + // Кэшируем файлы |
| 12 | + event.waitUntil(precache()); |
26 | 13 | }); |
27 | 14 |
|
28 | | -self.addEventListener('activate', function(event) { |
29 | | - // активация |
30 | | - console.log('activate', event); |
31 | | -}); |
32 | | - |
33 | | -// период обновления кэша - одни сутки |
34 | | -var MAX_AGE = 86400000; |
35 | | - |
| 15 | +// Настраиваем ответы на запросы |
36 | 16 | self.addEventListener('fetch', function(event) { |
| 17 | + // Показываем файлы из кэша |
| 18 | + event.respondWith(fromCache(event.request)); |
37 | 19 |
|
38 | | - event.respondWith( |
39 | | - // ищем запрошенный ресурс среди закэшированных |
40 | | - caches.match(event.request).then(function(cachedResponse) { |
41 | | - var lastModified, fetchRequest; |
42 | | - |
43 | | - // если ресурс есть в кэше |
44 | | - if (cachedResponse) { |
45 | | - // получаем дату последнего обновления |
46 | | - lastModified = new Date(cachedResponse.headers.get('last-modified')); |
47 | | - // и если мы считаем ресурс устаревшим |
48 | | - if (lastModified && (Date.now() - lastModified.getTime()) > MAX_AGE) { |
49 | | - |
50 | | - fetchRequest = event.request.clone(); |
51 | | - // создаём новый запрос |
52 | | - return fetch(fetchRequest).then(function(response) { |
53 | | - // при неудаче всегда можно выдать ресурс из кэша |
54 | | - if (!response || response.status !== 200) { |
55 | | - return cachedResponse; |
56 | | - } |
57 | | - // обновляем кэш |
58 | | - caches.open(CACHE_NAME).then(function(cache) { |
59 | | - cache.put(event.request, response.clone()); |
60 | | - }); |
61 | | - // возвращаем свежий ресурс |
62 | | - return response; |
63 | | - }).catch(function() { |
64 | | - return cachedResponse; |
65 | | - }); |
66 | | - } |
67 | | - return cachedResponse; |
68 | | - } |
69 | | - |
70 | | - // запрашиваем из сети как обычно |
71 | | - return fetch(event.request); |
72 | | - }) |
73 | | - ); |
| 20 | + // Обновляем файлы в кэше |
| 21 | + event.waitUntil(update(event.request)); |
74 | 22 | }); |
75 | 23 |
|
76 | | -// // Задаем имя |
77 | | -// var CACHE = 'mahoweek-cache-and-update'; |
78 | | - |
79 | | -// // Устанавливаем |
80 | | -// self.addEventListener('install', function(event) { |
81 | | -// // Кэшируем файлы |
82 | | -// event.waitUntil(precache()); |
83 | | -// }); |
84 | | - |
85 | | -// // Настраиваем ответы на запросы |
86 | | -// self.addEventListener('fetch', function(event) { |
87 | | -// // Показываем файлы из кэша |
88 | | -// event.respondWith(fromCache(event.request)); |
89 | | - |
90 | | -// // Обновляем файлы в кэше |
91 | | -// // event.waitUntil(update(event.request)); |
92 | | -// }); |
93 | | - |
94 | | -// // Выбираем файлы для кэширования |
95 | | -// function precache() { |
96 | | -// return caches.open(CACHE).then(function(cache) { |
97 | | -// return cache.addAll([ |
98 | | -// '/css/libs.min.css?v=1.13.0', |
99 | | -// '/css/main.min.css?v=1.13.0', |
100 | | -// '/js/libs.min.js?v=1.13.0', |
101 | | -// '/js/app.min.js?v=1.13.0', |
102 | | -// '/index.html' |
103 | | -// ]); |
104 | | -// }); |
105 | | -// } |
106 | | - |
107 | | -// // Выбираем файлы из кэша |
108 | | -// function fromCache(request) { |
109 | | -// return caches.open(CACHE).then(function(cache) { |
110 | | -// return cache.match(request).then(function(matching) { |
111 | | -// // return matching || Promise.reject('no-match'); |
112 | | -// if (matching) { |
113 | | -// return matching; |
114 | | -// } |
115 | | - |
116 | | -// // return fetch(request); |
117 | | -// }); |
118 | | -// }); |
119 | | -// } |
120 | | - |
121 | | -// // Обновляем файлы в кэше |
122 | | -// function update(request) { |
123 | | -// return caches.open(CACHE).then(function(cache) { |
124 | | -// return fetch(request).then(function(response) { |
125 | | -// return cache.put(request, response); |
126 | | -// }); |
127 | | -// }); |
128 | | -// } |
| 24 | +// Выбираем файлы для кэширования |
| 25 | +function precache() { |
| 26 | + return caches.open(CACHE).then(function(cache) { |
| 27 | + return cache.addAll([ |
| 28 | + '/sample/', |
| 29 | + '/sample/js/app.js', |
| 30 | + '/sample/index.html' |
| 31 | + ]); |
| 32 | + }); |
| 33 | +} |
| 34 | + |
| 35 | +// Выбираем файлы из кэша |
| 36 | +function fromCache(request) { |
| 37 | + return caches.open(CACHE).then(function(cache) { |
| 38 | + return cache.match(request).then(function(matching) { |
| 39 | + return matching || Promise.reject('no-match'); |
| 40 | + }); |
| 41 | + }); |
| 42 | +} |
| 43 | + |
| 44 | +// Обновляем файлы в кэше |
| 45 | +function update(request) { |
| 46 | + return caches.open(CACHE).then(function(cache) { |
| 47 | + return fetch(request).then(function(response) { |
| 48 | + return cache.put(request, response); |
| 49 | + }); |
| 50 | + }); |
| 51 | +} |
0 commit comments