Files
FURK4NGG.github.io/service-worker.js
T
2024-09-11 16:22:55 +03:00

118 lines
3.3 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
const FILE_VERSIONS = {
'/index.html': '1',
'/home_en.html': '2',
'/home_tr.html': '1',
'/not_found_page.html': '1',
'/CSS/1.css': '1',
'/CSS/2.css': '1',
'/CSS/tr/1.css': '1',
'/CSS/tr/2.css': '1',
'/JAVASCRIPT/1.js': '1',
'/JAVASCRIPT/tr/1.js': '1',
'/service-worker.js': '1',
'/img/ai.webp': '1',
'/img/app.webp': '1',
'/img/cyber.webp': '1',
'/img/game.webp': '1',
'/img/web.webp': '1',
'/img/profile_photo1.webp': '1',
'/img/robotic.webp': '1',
'/img/up.webp': '1',
'/img/icon.ico': '1',
'/sitemap.xml': '1',
'/manifest.json': '1',
'/robots.txt': '1',
'/.htaccess.txt': '1'
};
const CACHE_NAME = 'my-site-cache-v1';
// Dosyaları önbelleğe al
const addResourcesToCache = async (resources) => {
const cache = await caches.open(CACHE_NAME);
await cache.addAll(resources);
};
// Cache'de dosyaları güncelle
const putInCache = async (request, response) => {
const cache = await caches.open(CACHE_NAME);
await cache.put(request, response);
};
// Versiyon kontrolü ile fetch
const cacheFirst = async ({ request, preloadResponsePromise, fallbackUrl }) => {
const newVersion = FILE_VERSIONS[request.url] || '0';
const cache = await caches.open(CACHE_NAME);
const cachedResponse = await caches.match(request);
if (cachedResponse) {
const cachedVersion = new URL(cachedResponse.url).searchParams.get('v') || '0';
if (newVersion === cachedVersion) {
return cachedResponse;
} else if (parseInt(newVersion, 10) > parseInt(cachedVersion, 10)) {
// Yeni versiyon mevcut, cache'e kaydet ve döndür
return fetch(request).then(response => {
if (response.ok) {
const responseClone = response.clone();
cache.put(request, responseClone);
}
return response;
});
} else {
// Yeni versiyon daha eski, yeni versiyonu döndür ama cache'e kaydetme
return fetch(request);
}
} else {
// Önceki versiyon yoksa preload yanıtını kullan
const preloadResponse = await preloadResponsePromise;
if (preloadResponse) {
putInCache(request, preloadResponse.clone());
return preloadResponse;
}
try {
const response = await fetch(request);
if (response.ok) {
const responseClone = response.clone();
cache.put(request, responseClone);
}
return response;
} catch (error) {
const fallbackResponse = await caches.match(fallbackUrl);
return fallbackResponse || new Response('Network error happened', {
status: 408,
headers: { 'Content-Type': 'text/plain' },
});
}
}
};
// Service Worker olayları
self.addEventListener('activate', (event) => {
event.waitUntil(
caches.keys().then(keys => {
return Promise.all(keys.map(key => {
if (key !== CACHE_NAME) {
return caches.delete(key);
}
}));
})
);
});
self.addEventListener('install', (event) => {
event.waitUntil(
addResourcesToCache(Object.keys(FILE_VERSIONS))
);
});
self.addEventListener('fetch', (event) => {
event.respondWith(
cacheFirst({
request: event.request,
preloadResponsePromise: event.preloadResponse || Promise.resolve(null),
fallbackUrl: '/gallery/myLittleVader.jpg'
})
);
});