【问题标题】:Is it possible to cache an HTML page in a way that it can be requested from multiple URIs?是否可以以可以从多个 URI 请求的方式缓存 HTML 页面?
【发布时间】:2013-12-31 01:26:30
【问题描述】:

我正在构建一个带有友好 URL 的单页 Web 应用程序。例如,对于聊天,您可以请求 /chat/roomname/chat/roomname2 连接到不同的聊天室。然而,由于这是一个 SPA,这两者都会导致相同的 HTML 内容。

是否可以告诉浏览器将两个页面缓存为一个页面(例如,转到 /chat/roomname 也会在浏览器中缓存 /chat/roomname2),或者会产生类似效果的东西?这样 HTML 内容可能会很大,并且只需要加载一次。

或者我可以做 /#/chat/roomname 或类似的,但如果上述可能的话,我不希望这样做。

【问题讨论】:

  • 这通常由服务器端代码处理,它不是你所追求的缓存,它只是 url 重定向。
  • 如何将您的 URL 结构更改为 /chat?roomname=1。这将缓存/chat,然后您可以灵活地更改房间名称
  • @zzzzBov,但这不是我想要的。如果 /chat/roomname2 重定向到 /chat/roomname 看起来会很奇怪,即使它们不是同一个东西。
  • @jibsales,我实际上很确定它不会被缓存为同一页面。你有那个来源吗?
  • @KMorrow,我不应该说重定向,我应该说 url 重写。对于 LAMP 堆栈之类的东西,您可以使用 .htaccess 文件将请求更改为针对每个请求指向 index.php 之类的东西,然后让 php 处理页面。

标签: javascript html http caching single-page-application


【解决方案1】:

单独的路径对于浏览器来说是不同的东西。即使是具有不同查询参数的相同页面也会被区别对待(因此,“缓存破坏”技术)。不过……

你可以:

  • 将所有脚本卸载到外部脚本,以便浏览器将它们与页面分开缓存。
  • 对 CSS 也做同样的事情。
  • 将页面保持在最低限度。
  • 如果资源(脚本、样式、图片)长时间不被修改,您可以为它们设置更长的有效期。
  • 您可以使用 AJAX 飞入模板,而不是使用 HTML 加载整个布局。这样,这些布局请求也会被缓存。让 JS 在需要时组装它们。

最终,您的页面将没有所有可以使用 JS 插入和组装的 JS、CSS 和标记。这将使页面比平时更轻。您可以通过缩小脚本和样式、压缩图像、压缩 HTML 和其他内容来更进一步。

【讨论】:

  • 我应该澄清一下。 HTML 本身是完全静态的——要加载的所有内容都是通过 XHR、WebSocket、localStorage 等完成的。
猜你喜欢
  • 2011-07-08
  • 2015-12-22
  • 1970-01-01
  • 2020-05-16
  • 1970-01-01
  • 2010-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多