跳至内容

AppCache

applicationCache(此包依赖的)已弃用且在最新浏览器中不可用以来,此包已弃用。请考虑使用 Service Worker 作为替代。

appcache 包将 Meteor 应用程序的静态部分(客户端 Javascript、HTML、CSS 和图像)存储在浏览器的 应用程序缓存 中。要启用缓存,只需将 appcache 包添加到您的项目中。

  • 一旦用户第一次访问 Meteor 应用程序并且应用程序已被缓存,在后续访问中,网页加载速度更快,因为浏览器可以从缓存中加载应用程序,而无需先联系服务器。

  • 热代码推送由浏览器在后台加载,同时应用程序继续运行。一旦新代码完全加载,浏览器就可以快速切换到新代码。

  • 应用程序缓存允许即使在浏览器没有互联网连接的情况下加载应用程序,从而能够离线使用该应用程序。

(但是请注意,appcache 包本身不会使数据离线可用:在离线加载的应用程序中,Meteor 集合在客户端中将显示为空,直到互联网可用并且浏览器能够建立 DDP 连接。)

要关闭特定浏览器的 AppCache,请使用

js
Meteor.AppCache.config({
  chrome: false,
  firefox: false
});

支持的可以启用或禁用的浏览器包括但不限于 androidchromechromiumchromeMobileIOSfirefoxiemobileSafarisafari

浏览器限制了他们将放入应用程序缓存中的数据量,这可能因磁盘空间可用量等因素而异。不幸的是,如果您的应用程序超过了限制,浏览器不会完全禁用应用程序缓存并在线运行应用程序,而是会失败特定缓存的更新,导致您的用户运行旧代码。

因此,最好将缓存大小保持在 5MB 以下。如果要缓存的资源的总大小超过 5MB,appcache 包将在 Meteor 服务器控制台中打印警告。

[email protected] 开始,如果您需要更高级的逻辑来启用/禁用缓存,则可以使用在每个请求的基础上评估的 enableCallback 选项。例如

js
// Enable offline mode using a value from database and certificate validation
Meteor.AppCache.config({
  // This option is available starting from [email protected]
  enableCallback: () => {
    if (!getSettingsFromDb("public.appcache_enabled")) {
      return false;
    }

    const validation = validateClientCert({
      clientCertPayload: req.headers["x-client-cert"],
      url: req.url.href,
    });

    return validation.passed;
  },
});

如果您有文件太大而无法放入缓存中,您可以通过 URL 前缀禁用缓存。例如,

js
Meteor.AppCache.config({ onlineOnly: ['/online/'] });

导致 public/online 目录中的文件不会被缓存,因此它们只能在线访问。然后,您可以将大型文件移动到该目录并参考新 URL

html
<img src="/online/bigimage.jpg">

如果您不想移动文件,可以使用文件名本身作为 URL 前缀

js
Meteor.AppCache.config({
  onlineOnly: [
    '/bigimage.jpg',
    '/largedata.json'
  ]
});

但请记住,由于排除是按前缀进行的(这是应用程序缓存清单的限制),因此排除 /largedata.json 也会排除诸如 /largedata.json.orig/largedata.json/file1 之类的 URL。

有关 Meteor 如何与应用程序缓存交互的更多信息,请参阅 Meteor wiki 中的 AppCache 页面