每个 URL 都可以链接到一个缓存清单。但我想要几个链接到同一个 URL 的缓存清单。原因如下:
我想要缓存的一些文件很少更新且很大。因此,每次缓存更新时,这些大文件都会重新下载,即使它们可能没有更改。所以我想拆分缓存。一个缓存用于这些很少更新的大文件,另一个缓存用于经常更新的轻文件。
你们知道如何拆分 HTML5 缓存吗?
每个 URL 都可以链接到一个缓存清单。但我想要几个链接到同一个 URL 的缓存清单。原因如下:
我想要缓存的一些文件很少更新且很大。因此,每次缓存更新时,这些大文件都会重新下载,即使它们可能没有更改。所以我想拆分缓存。一个缓存用于这些很少更新的大文件,另一个缓存用于经常更新的轻文件。
你们知道如何拆分 HTML5 缓存吗?
最有效的方法是:
a) 对清单 CACHE 部分中提到的所有资源使用远期到期日期(max-age),并为 CACHE 部分中的每个文件添加时间戳后缀,例如:
缓存: menu_1355817388000.js 工具栏_1355817389100.js
b) 当服务器上的任何上述文件发生更改时,重新生成/更新清单以更改时间戳。下次只会下载修改过时间戳的文件。任务完成。
注意:在浏览器中重新加载页面两次,因为在第一次刷新时浏览器只下载清单并使用旧的缓存资源来绘制页面。这样做是为了加快页面的显示速度(有一些技巧可以处理这个双重刷新问题,但它们超出了您的问题范围)
在我在 appcache 上看到的这篇长但最好的文章中查看更多信息。
使用 iframe
您页面的缓存清单将包含轻文件,并且此页面加载的 iframe 的缓存清单将包含大文件
在 chrome 上,iframe 的应用程序缓存也将用于页面。我还没有在其他浏览器上测试过这个方法。
在http://www.timer-tab.com上查看一个实时示例,如果您使用的是 chrome,请在 chrome://appcache-internals/ 上查看其拆分缓存
当 manifest 文件发生变化,再次下载应用缓存的文件时,正常的 HTTP 缓存规则仍然适用。这意味着如果您为这些大文件设置正确的 HTTP 缓存标头,您将获得 304,因此不会再次下载这些文件。因此没有必要拆分应用程序缓存。
也许是一个答案,但在我对自己的 web 应用程序进行故障排除时,我更想阐明我的发现。
我发现我可以使用 2 个 iframe (manifest_framework) 和 (manifest_media) 来加载清单,但我仍然不清楚它们是如何定位的,但我的成功有限。
清单框架:
CACHE MANIFEST
CACHE:
appdata.ini
dialog.png
jquery.min.js
login.htm
login.js
manifest.appcache.js
NETWORK:
*
FALLBACK:
清单媒体:
CACHE MANIFEST
CACHE:
manifest_fwk.php
od/audio_track_1_1.m4a
od/audio_track_1_2.m4a
od/audio_track_1_3.m4a
od/audio_track_1_4.m4a
od/video_1.mp4
od/video_2.mp4
od/video_3.mp4
NETWORK:
*
FALLBACK:
./ webapp.php
./index.php 是“登陆页面”的页面,它本身没有被缓存,但在离线时会退回到 webapp.php。
我不明白的是这些链接到 webapp.php 页面的方式。我发现我只能访问一个或另一个清单缓存。以上工作在移动Safari中,媒体将被缓存,图像但不一定是框架清单中的JS或图像。
任何人都有更多从一个 URL/页面引用多个清单的示例?
CACHE MANIFEST
# This is a comment.
# Cache manifest version 0.0.1
# If you change the version number in this comment,
# the cache manifest is no longer byte-for-byte
# identical.
demoimages/mypic.jpg
demoimages/yourpic.jpg
demoimages/ourpic.jpg
sr/scroll.js
NETWORK:
# All URLs that start with the following lines
# are whitelisted.
# whitelisted items are needed to help the site function, you could put regularly
# changing items here
http://example.com/examplepath/
http://www.example.org/otherexamplepath/
CACHE:
# Additional items to cache.
demoimages/allpics.jpg
FALLBACK:
demoimages/currentImg.jpg images/stockImage.jpg`
如果 iframe 技巧不起作用,请使用 HTML5 FileSystem API
请参阅http://updates.html5rocks.com/2012/04/Taking-an-Entire-Page-Offline-using-the-HTML5-FileSystem-API