Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 是否有可能以可以从多个URI请求的方式缓存HTML页面?_Javascript_Html_Http_Caching_Single Page Application - Fatal编程技术网

Javascript 是否有可能以可以从多个URI请求的方式缓存HTML页面?

Javascript 是否有可能以可以从多个URI请求的方式缓存HTML页面?,javascript,html,http,caching,single-page-application,Javascript,Html,Http,Caching,Single Page Application,我正在构建一个带有友好URL的单页web应用程序。例如,对于聊天,您可以请求/chat/roomname或/chat/roomname2连接到其他聊天室。但是,由于这是一个SPA,因此这两种方法都会产生相同的HTML内容 是否可以告诉浏览器将两个页面缓存为一个页面(例如,转到/chat/roomname也会在浏览器中缓存/chat/roomname2),或者执行类似的操作?这样,HTML内容可能很大,只需加载一次 或者,我也可以做/#/chat/roomname或类似的事情,但如果上述情况可行,

我正在构建一个带有友好URL的单页web应用程序。例如,对于聊天,您可以请求
/chat/roomname
/chat/roomname2
连接到其他聊天室。但是,由于这是一个SPA,因此这两种方法都会产生相同的HTML内容

是否可以告诉浏览器将两个页面缓存为一个页面(例如,转到/chat/roomname也会在浏览器中缓存/chat/roomname2),或者执行类似的操作?这样,HTML内容可能很大,只需加载一次


或者,我也可以做/#/chat/roomname或类似的事情,但如果上述情况可行,我不希望这样做。

对于浏览器来说,单独的路径是单独的。即使是具有不同查询参数的相同页面也会被视为不同的页面(因此,“缓存破坏”技术)。然而

你可以:

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

最终,您的页面将缺少所有可以使用JS导入和组装的JS、CSS和标记。这将使页面比平常更轻。您可以进一步缩小脚本和样式、压缩图像、压缩HTML等内容。

这通常由服务器端代码来处理,它不是缓存您要的内容,只是url重定向。将url结构更改为
/chat?roomname=1
怎么样。这将缓存
/chat
,然后您就可以灵活地使用更衣室了names@zzzzBov,那不是我想要的。如果/chat/roomname2重定向到/chat/roomname,即使它们不是同一个东西,看起来也会很奇怪。@jibsales,我非常确定它们不会缓存为同一个页面。你有消息来源吗?@KMorrow,我不应该说重定向,我应该说url重写。对于类似LAMP堆栈的东西,您可以使用
.htaccess
文件更改请求,使每个请求指向
index.php
之类的内容,并让php处理页面。我应该澄清一下。HTML本身是完全静态的——所有要加载的内容都是通过XHR、WebSocket、localStorage等完成的。