From f342b08179e851dbd8a0a1f8345b9dc23dbd72a6 Mon Sep 17 00:00:00 2001 From: PKC278 <52959804+PKC278@users.noreply.github.com> Date: Sat, 3 Jan 2026 21:53:04 +0800 Subject: [PATCH] =?UTF-8?q?fix(service-worker):=20=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E7=BC=93=E5=AD=98=E7=89=88=E6=9C=AC=E6=8E=A7=E5=88=B6=E5=92=8C?= =?UTF-8?q?=E7=9B=91=E6=8E=A7=E7=BC=93=E5=AD=98=E5=A4=A7=E5=B0=8F=E9=80=BB?= =?UTF-8?q?=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/composables/useVersionChecker.ts | 9 ------- src/service-worker.ts | 37 +++++++++++++++------------- 2 files changed, 20 insertions(+), 26 deletions(-) diff --git a/src/composables/useVersionChecker.ts b/src/composables/useVersionChecker.ts index 6407744b..b4574492 100644 --- a/src/composables/useVersionChecker.ts +++ b/src/composables/useVersionChecker.ts @@ -132,14 +132,6 @@ export function useVersionChecker() { } } - /** - * 重置版本检查状态(用于测试或特殊场景) - */ - const resetVersionCheck = (): void => { - versionChecked.value = false - serverVersion.value = null - } - // 监听 Service Worker 版本更新消息 if (!isListenerAdded && 'serviceWorker' in navigator) { navigator.serviceWorker.addEventListener('message', event => { @@ -180,6 +172,5 @@ export function useVersionChecker() { versionChecked: computed(() => versionChecked.value), // 方法 checkVersion, - resetVersionCheck, } } diff --git a/src/service-worker.ts b/src/service-worker.ts index d893411e..22b87d1f 100644 --- a/src/service-worker.ts +++ b/src/service-worker.ts @@ -12,8 +12,7 @@ declare let self: ServiceWorkerGlobalScope & { // 缓存版本控制 const RESOURCE_VERSION = 'V2' -// 开发环境CACHE_VERSION回退到RESOURCE_VERSION -const CACHE_VERSION = typeof __APP_VERSION__ !== 'undefined' ? `${__APP_VERSION__}-${__BUILD_TIME__}` : RESOURCE_VERSION +const CACHE_VERSION = `${__APP_VERSION__}-${__BUILD_TIME__}` // 开发环境下无法使用此环境变量,生产环境正常 // 启用导航预载 navigationPreload.enable() @@ -321,35 +320,35 @@ async function clearBadge() { // 监控缓存大小 async function monitorCacheSize() { const cacheSizes: Record = {} - let totalSize = 0 + let calculatedTotalSize = 0 try { const cacheNames = await caches.keys() - // 并行处理所有缓存以提高性能 + // 并行处理所有缓存 await Promise.all( cacheNames.map(async cacheName => { const cache = await caches.open(cacheName) - // 使用 matchAll 一次性获取所有响应,避免循环中多次 match - const responses = await cache.matchAll() + const requests = await cache.keys() let cacheSize = 0 - for (const response of responses) { - // 仅通过 Content-Length 获取大小 - const contentLength = response.headers.get('content-length') - if (contentLength) { - cacheSize += parseInt(contentLength, 10) + // 遍历请求以获取响应头部,避免 matchAll 一次性加载大量响应对象到内存 + for (const request of requests) { + const response = await cache.match(request) + if (response) { + const contentLength = response.headers.get('content-length') + if (contentLength) { + cacheSize += parseInt(contentLength, 10) + } } } - cacheSizes[cacheName] = cacheSize }), ) - // 计算总大小 - totalSize = Object.values(cacheSizes).reduce((acc, size) => acc + size, 0) + calculatedTotalSize = Object.values(cacheSizes).reduce((acc, size) => acc + size, 0) - // 获取存储估算 + // 获取系统级存储估算 let quota = 0 let usage = 0 if (self.navigator.storage && self.navigator.storage.estimate) { @@ -358,14 +357,18 @@ async function monitorCacheSize() { usage = estimate.usage || 0 } + // 构造结果:满足 useCacheManager.ts 的需求 const result = { cacheSizes, - totalSize, - totalSizeMB: (totalSize / 1024 / 1024).toFixed(2), + // 优先使用准确的 usage (真实磁盘占用),如果不可用则退回到计算值 + totalSize: usage || calculatedTotalSize, + totalSizeMB: ((usage || calculatedTotalSize) / 1024 / 1024).toFixed(2), + // 额外信息保留,供未来扩展 quota, usage, quotaMB: (quota / 1024 / 1024).toFixed(2), usageMB: (usage / 1024 / 1024).toFixed(2), + calculatedTotalSize, } // 发送缓存统计信息给客户端