1// Service Worker - ì´ë¯¸ì§ ìºì± ìµì í 2const CACHE_NAME = 'juiceon-cache-v1'; 3const IMAGE_CACHE_TIME = 30 * 24 * 60 * 60 * 1000; // 30ì¼ 4 5self.addEventListener('install', (event) => { 6 self.skipWaiting(); 7}); 8 9self.addEventListener('activate', (event) => { 10 event.waitUntil(clients.claim()); 11}); 12 13self.addEventListener('fetch', (event) => { 14 const url = new URL(event.request.url); 15 16 // cafe24 ì´ë¯¸ì§ë§ ìºì± 17 if (url.hostname.includes('cafe24img.com') || url.hostname.includes('echosting.cafe24.com')) { 18 event.respondWith( 19 caches.open(CACHE_NAME).then((cache) => { 20 return cache.match(event.request).then((cachedResponse) => { 21 // ìºìê° ìì¼ë©´ ë°í 22 if (cachedResponse) { 23 const cachedDate = cachedResponse.headers.get('sw-cache-date'); 24 if (cachedDate) { 25 const cacheAge = Date.now() - parseInt(cachedDate); 26 if (cacheAge < IMAGE_CACHE_TIME) { 27 return cachedResponse; 28 } 29 } 30 } 31 32 // ë¤í¸ìí¬ìì ê°ì ¸ìì ìºì 33 return fetch(event.request).then((response) => { 34 if (response.status === 200) { 35 const responseToCache = response.clone(); 36 const headers = new Headers(responseToCache.headers); 37 headers.append('sw-cache-date', Date.now().toString()); 38 39 const cachedResponse = new Response(responseToCache.body, { 40 status: responseToCache.status, 41 statusText: responseToCache.statusText, 42 headers: headers 43 }); 44 45 cache.put(event.request, cachedResponse); 46 } 47 return response; 48 }); 49 }); 50 }) 51 ); 52 } 53});
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.