如何使用codeigniter正确启用浏览器缓存?

时间:2012-12-10 15:20:41

标签: codeigniter caching browser

每次我搜索此内容时,都会获得有关如何禁用浏览器缓存的信息。 从来没有任何关于启用它。

如何让后退按钮使用缓存而不重新生成页面?

2 个答案:

答案 0 :(得分:2)

据我所知,您可以控制强制浏览器通过这些元标记重新加载数据:

<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Cache-control" content="no-cache">
<meta http-equiv="Expires" content="0">

无法强制它从缓存中读取。如果您没有明确指定忽略缓存,则浏览器本身会为您执行此操作,并且页面数据实际上已缓存且未过期。

这不依赖于CodeIgniter,因为它是客户端,但您可能希望使用CI html helper中包含的meta()函数,它只会输出相应的元标记。 e.g:

echo meta('Cache-control', 'no-cache', 'http-equiv');

将生成上面的第二个代码行。

注意:

  1. 为http / 1.0指定了第一个元标记,而第二个元标记用于http / 1.1,但两者都用于向后兼容。

  2. 如果您使用的是xhtml而不是html,请记得使用/>关闭元标记

答案 1 :(得分:2)

浏览器缓存与codeigniter无关。您可以使用html元标记指示浏览器专门不缓存页面,或者您可以为单个页面设置缓存过期,如下所示:

<meta http-equiv="expires" content="Mon, 10 Dec 2001 00:00:00 GMT" />

您可以使用一些PHP来删除那里的明天日期。浏览器(取决于设置)通常会自动从缓存中提取尽可能多的内容,包括单击后退按钮时 - 后退按钮的缓存将与从任何其他链接进入时一样。

您可以在apache服务器上使用类似下面的内容通过htaccess设置expires头文件(您必须询问如何在其他服务器类型上执行此操作)告诉浏览器应该缓存某些类型的内容给定时间段:

ExpiresByType text/html "access plus 60 seconds"

这将告诉浏览器将mime type text / html的任何内容存储60秒(这包括codeigniter输出)但不要这样做如果您处理动态内容它将停止任何动态页面内容正在加载并将停止对返回访问者加载的内容的任何更改(显然,第二部分不是60秒缓存的问题)。

要实现的关键是你的页面不是一件事,它是由很多部分组成的,其中一些部分应该从缓存中调用(js,css,images等),有些则不应该(通常是html)将属于这一类)。 浏览器将自动从缓存尚未过期的缓存中调用页面的所有部分。

通常你会使用.htaccess(或类似的方法)来缓存你的css,图像等(使用文件名中的版本控制来强制重新加载)。

您还应该利用服务器端缓存 - codeigniter为整个页面执行此操作,但我不倾向于发现这对任何类型的动态站点非常有帮助所以我会看一下使用phil sturgeons部分缓存库的ci如果你对ss缓存感兴趣:

https://github.com/philsturgeon/codeigniter-cache

这不会停止向服务器发送请求,但意味着请求需要较少的处理,并且可以作为一个或多个静态内容提供。