问题标签 [cache-manifest]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
742 浏览

performance - 使用 HTML5 缓存清单来提高性能?

当我有一个想法时,我正在阅读Dive into HTML5: Offline web apps: Cache manifests 。我可以使用它(HTML5 缓存清单)来缓存文件(例如 CSS/JS/图像/等)以实现离线功能。也是为了性能。用户再次访问您的网站时不需要加载这些文件?还是它(缓存清单缓存的文件)仅在离线模式下工作?

0 投票
2 回答
14927 浏览

html - HTML5 缓存清单:后备部分和网络 *

Dive into HTML5: Cache Manifest: Fallback section

鉴于此代码块的确切作用,我无法从 URL 中理解。后备部分是否意味着找不到任何内容时,显示offline.html页面

那么network: *所有资源都会被缓存?它还说

它在每个页面上使用常见的 CSS、JavaScript 和图像。这些资源中的每一个都需要在CACHE

这似乎与network: *似乎说缓存所有内容的地方相冲突?

0 投票
2 回答
1277 浏览

html - 在 HTML5 离线缓存中延迟加载非 HTML 页面

HTML5 Offline Web 应用程序规范提供了一个如何将 HTML 页面延迟加载到缓存中的示例:

这在Dive Into HTML5中以 Wikipedia 为例进行了解释:您当然不想在网站加载时缓存整个 Wikipedia,但您希望用户访问的任何页面都被缓存。用户在离线时访问的任何页面都应显示自定义错误页面。

这种方法的诀窍是每个 HTML 页面都明确地包含清单。任何包含清单的页面都会自动包含在缓存中,无需明确提及。所以这个例子会从网络加载HTML页面,并插入到缓存中,如果离线,缓存中的任何页面都可以工作,任何未缓存的页面都会默认为offline.html页面。

问题在于非 HTML 文件,它们无法包含清单。具体来说,我正在用 JavaScript 编写一个游戏,它有很多音乐曲目。我有以下要求:

  • 我不希望用户在游戏加载时必须下载所有音乐,
  • 如果用户在线时遇到新的音乐曲目,则应下载并缓存该曲目,
  • 如果用户在离线时遇到新的音乐曲目,他们是否听到静音并不重要。
  • 如果用户在离线时遇到他们已经听过的音乐曲目,则应从缓存中播放。

如果音乐文件是 HTML,我可以使用上述技术,并给它们一个manifest=...属性,以便在它们第一次加载时将它们放入缓存中。但它们不是 HTML,所以我不能这样做。有没有办法让非 HTML 资源在加载时保存到缓存中,但不是提前?

注意:我对传统的 HTTP 缓存机制不是很熟悉。有可能可以改用它,但根据我的经验,即使文件被浏览器缓存,如果浏览器离线,它们也不起作用。如果可以这样做,我应该如何配置缓存头?

0 投票
3 回答
572 浏览

html - HTML5 离线存储 - 缓存清单网络

我正在尝试编写清单文件,但我在 FF5 中遇到了奇怪的问题,尽管我说不要这样做,但它的缓存仍然存在。我的清单文件如下所示:

有任何想法吗?

0 投票
1 回答
163 浏览

html - HTML5 更新离线缓存

如何更新离线缓存?我在服务器 html、css、js、图像(文件夹)和清单文件上有五个文件。我对 css 文件进行了一些更改,并将其替换为较旧的 css,但在页面加载时它没有影响。它显示了第一次缓存的旧数据,因为我将 URL 嵌入到 iPad 应用程序中。

0 投票
1 回答
2938 浏览

html - 如何逐个用户支持多个自定义缓存清单以供离线使用?

可能重复:
HTML5 缓存 — 单个 URL 是否可以有多个不同的缓存?

我的应用程序使用项目的概念,每个项目都有多个需要离线提供的支持文件(主要是图像文件和 pdf)。我想使用 HTML5 缓存清单来完成此操作。

如果我在缓存清单中包含所有项目的所有支持文件,那将是庞大且不可行的。(即移动设备上没有足够的空间,这完全是矫枉过正,用户只需要他们被分配到的项目的支持文件)

用户被分配给项目,所以理想情况下,我可以为每个用户拥有一个自定义缓存清单文件,其中包含用户被分配到的项目所需的支持文件。

我怎样才能做到这一点?有没有办法在浏览器加载初始页面后分配不同的缓存清单?

如果没有,实现此功能的另一种方法是什么?

0 投票
2 回答
1840 浏览

ruby-on-rails-3 - 使用资产管道缓存清单

使用 rails 资产管道拥有 html5 缓存清单的最佳方式是什么?我正在考虑向 app/assets 添加一个 erb 文件,其中包含所有资产的路径。这可行,但马上就有几个问题:

  • 我怎样才能增加版本号?
  • 如何确保正确设置了 http 内容类型?
0 投票
7 回答
3825 浏览

html - HTML5 缓存——单个 URL 是否可以有多个不同的缓存?

每个 URL 都可以链接到一个缓存清单。但我想要几个链接到同一个 URL 的缓存清单。原因如下:

我想要缓存的一些文件很少更新且很大。因此,每次缓存更新时,这些大文件都会重新下载,即使它们可能没有更改。所以我想拆分缓存。一个缓存用于这些很少更新的大文件,另一个缓存用于经常更新的轻文件。

你们知道如何拆分 HTML5 缓存吗?

0 投票
1 回答
4761 浏览

ios - 移动 Safari:音频 + 缓存清单

我有一个小型网络应用程序,只需单击几个按钮即可播放非常短的声音片段。它明确针对 iOS (iPad) 上的移动 Safari。

在此处和其他地方阅读了有关移动 Safari 在此上下文中 HTML5 音频的几个“缺点”并尝试了一些“黑客”和技巧之后,我陷入了 Safari 看起来很简单的情况(因为没有更好的词)破碎的:

我可以通过单击按钮 A 播放声音 A(它需要很长时间才能开始 - 我假设它正在下载 [再次]?)。然后,单击按钮 B 将立即再次播放声音 A。按钮 C 也是如此。在某些情况下,它会播放不同的声音,有时甚至是正确的声音。但主要是声音 A。使用的格式是 .aiff,现在是 .m4a 。

在自己编写了几个小版本之后,我决定使用Buzz库来处理声音加载/播放/等。

有趣的是,他们的演示包括一个游戏,它几乎完全符合我的需要触发了相同的错误行为。我什至遇到了这样一种情况,即移动 Safari 中任何选项卡中的任何音频播放器都会在 Buzz 演示游戏中播放某种声音(!)。

我希望缓存清单可能有助于克服 Apple 的预加载限制,并强制应用在离线模式下按下按钮后立即播放声音。但是在确认整个应用程序已被缓存后,我无法在离线模式下播放/听到任何声音。

有没有人设法让这样的事情以某种方式工作?(——虽然看过 Apple 如何处理某些事情,但我不希望得到太多回应……)


更新1:

此答案中的示例会产生相同的效果:How to synthesize audio using HTML5/Javascript on iPad


更新 2:

更新 iOS(以及 Safari)似乎可以解决音频错误。不过,缓存清单似乎不会影响音频文件。这些文件根本不可用。

删除缓存清单后,应用程序可以正常工作,但将其添加到“主屏幕”并重新加载它也会阻止音频播放。

0 投票
1 回答
792 浏览

iphone - 缓存清单没有在 iPhone 中立即刷新

我正在尝试使用 iPhone 上的缓存清单的站点。我已将以下内容添加到我的 .htaccess 文件中,以防止浏览器缓存清单文件:

如果我更改了其中一个页面并向清单文件添加了注释,我仍然需要多次刷新页面才能看到任何更改。

如果我将站点添加到我的 iPhone 桌面,对服务器上的站点进行更改,然后从快捷方式加载站点,我需要手动刷新一次才能看到更改。

真实站点如何解决此类问题?假设我创建了一个单页网站,其功能类似于本机应用程序,但我希望它在互联网连接可用时在后台自行更新,我该怎么做?我需要让我的用户手动刷新页面吗?谢谢