悟夕导航

HTML5 应用程序缓存(AppCache)——“离线先用后弃”的简史教程

58 0 0
一句话现状:manifest 语法已废弃,现代项目请直接上 Service Worker;但老项目维护、考古面试还得认得它。下面带你 10 分钟看懂“怎么用 + 怎么崩 + 怎么迁”。

1. 为什么会出现 AppCache?

早年网页一断网就全屏“无法连接”,HTML5 为了给 Web 应用“离线可用”能力,推出 Application Cache —— 通过 manifest 清单告诉浏览器:
“把这些文件统统囤硬盘,没网也能用。”


2. 三步启用(考古代码,复制即跑)

① 写 manifest 文件(demo.appcache)

CACHE MANIFEST
# v1.0.2 改版本号即强制更新

CACHE:
index.html
css/style.css
js/app.js
images/logo.png

NETWORK:
*          # 其他资源走网络

FALLBACK:
/ 404.html # 离线时找不到路径就回落
  • 文件必须以 CACHE MANIFEST 开头
  • 建议扩展名 .appcache,服务器 MIME 设为 text/cache-manifest

② HTML 加挂清单

<!DOCTYPE html>
<html lang="zh" manifest="demo.appcache">
<head>
  <meta charset="UTF-8">
  <title>离线演示</title>
</head>
<body>
  <h1>断网也能看</h1>
</body>
</html>

③ JS 监听更新(可选)

window.applicationCache.addEventListener('updateready', () => {
  if (window.applicationCache.status === window.applicationCache.UPDATEREADY) {
    window.applicationCache.swapCache(); // 换新缓存
    location.reload();                   // 重载页面
  }
});
window.applicationCache.update(); // 手动触发检查
第一次访问:浏览器后台下载 全部 CACHE 段资源;以后进页面先读本地,0 请求秒开。

3. 优点 & 适用场景(曾经真香)

优点说明
离线浏览没 Wi-Fi、飞行模式都能打开页面
秒开速度资源本地拿,HTTP 0 请求
减服务器压力只下载 manifest 变更的资源
2013 前后适合做 展示型离线 WebApp地铁宣传页电子书

4. 缺陷 & 翻车现场(被弃用的元凶)

坑点现场描述
更新机制玄学只改资源不改 manifest → 用户永远拿不到新版本
全量失败只要 CACHE 里一个文件 404,整锅缓存报废
调试困难浏览器默默在后台下资源,控制台看不到
无法精细控制无法“只缓存图片,HTML 实时”——非黑即白
HTTPS 强依赖现代浏览器要求清单页必须 https

→ W3C 于 2021 起正式标注 AppCache 为过时,主流浏览器逐步移除支持。


5. 迁移路线:manifest → Service Worker(官方推荐)

① 注册 SW

// main.js
if ('serviceWorker' in navigator) {
  navigator.serviceWorker.register('/sw.js').then(reg => {
    console.log('SW 注册成功', reg);
  }).catch(err => console.log('SW 注册失败', err));
}

② 写缓存策略(sw.js)

const CACHE = 'offline-v1';

self.addEventListener('install', e => {
  e.waitUntil(
    caches.open(CACHE).then(cache => cache.addAll([
      '/',
      '/css/style.css',
      '/js/app.js',
      '/images/logo.png'
    ]))
  );
});

self.addEventListener('fetch', e => {
  e.respondWith(
    caches.match(e.request).then(res => res || fetch(e.request))
  );
});

对比 AppCache:

  • 更新粒度到单个文件
  • 可网络回退、可策略组合(缓存优先→网络→兜底)
  • DevTools 可视化调试

6. 什么情况下还维护 AppCache?

  1. 政府/银行内网老项目——IE11 机器无法升级 SW。
  2. 考古型面试——问“manifest 三段分别是什么”。
  3. 历史代码交接——先能跑,再渐进迁。

7. 口诀总结(背完走天下)

“manifest 分三段 CACHE/NETWORK/FALLBACK;
更新靠版本号,一文件 404 就全崩;
离线可用是优点,调试困难被弃用;
新项直接上 Service Worker,缓存策略任我行。”

看完这篇,下次再遇到 manifest="xxx.appcache"——你就知道:
“能跑,但别再用;能迁,就快跑!”

0
快来点个赞吧

发表评论

隐私评论

评论列表

来写一个评论吧