如何caching我的网站?

我有几个关于caching网站的问题,因为我之前没有尝试caching网站。

首先是如何caching一个网站,以便客户端浏览网站时加载速度更快。 例如,我有许多图像在我的CSS风格,我该如何caching?

从我之前读过的PHPcaching是通过<head>标签完成的,也可以在.htaccess完成caching(很高兴我正在使用htaccess ^ _ ^)。

我在我的标题中添加了这个标签

 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" /> <meta http-equiv="expires" content="-1"> <meta http-equiv="pragma" content="no-cache">//or content="cache"??? 

这也是我的htaccess里面:

 <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteCond %{REQUEST_URI} ^system.* RewriteRule ^(.*)$ /index.php?/$1 [L] RewriteCond %{REQUEST_URI} ^application.* RewriteRule ^(.*)$ /index.php?/$1 [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php?/$1 [L] </IfModule> <IfModule !mod_rewrite.c> ErrorDocument 404 /index.php </IfModule> 

caching很less是一个“下降”的解决scheme,但如果正确实施,可能会导致网站显着提高速度。

您提到的“大量CSS图像”的第一项 – 本身不是服务器问题。 为了获取这些图像,浏览器必须为每个图像发出一个请求,每个图像都有自己的开销。 将图像组合成一个CSS精灵,这样就可以最大限度地减less请求的数量,并最大化所选图像格式所应用的压缩。 类似的想法适用于CSS和JS文件 – 尽可能地结合和缩小。 有关网站的具体build议,请试用Google的Pagespeed或Yahoo的YSlow。

在服务器端,有一些用于PHP的caching,它将存储已翻译脚本的中间forms – 操作码caching。 最常用的是APC,但是也经常使用xcache和eaccelerator(仅使用其中之一)。

从PHP的angular度来看,caching通常包括生成内容的静态副本。 这可以通过使用输出缓冲(ob_ *函数(例如ob_start()))来实现,在发送任何内容之前开始缓冲,在页面完全构build之后结束缓冲,并将结果内容保存到文件中。在尝试PHP脚本之前存在这样的文件(即,如果caching存在,则提供该文件,否则加载该脚本)。

此外,您可以添加一个额外的图层到您的networking堆栈 – 清漆是一个stream行的select。 这是一个反向代理和caching服务器。 本质上,Varnish接收到您的后端服务器的请求,如果它已经有一个页面的副本,它将直接服务它 – 绕过后端。 如果它没有请求的副本,它将把它传递给后端。 清漆可以configuration为将其caching直接存储在内存中,或者可以使用磁盘备份存储,并且其function相当高效。

与任何caching方法一样,您也面临着泄漏敏感信息的潜在问题 – 如果您caching的页面只能在login用户时可见,并最终向未经身份validation的用户提供,则会出现问题。 因此,像Varnish这样的服务器往往不会caching任何包含cookie的请求 – 这是在尝试实现高命中率时需要考虑的重要因素。

另一个可能的考虑是使用内容分发networking – 这是一项服务,networking边缘位置在地理位置上更贴近用户,这样多个请求可以更快地得到服务 – 通常,这对于大型文件来说更是一个考虑因素 – 如果您正在服务许多小文件(如图片),你可以改善你的网站devise。

正如大卫所言,你的问题非常广泛。

但是,在尝试阅读您的想法之后,我认为您想要使用HTTPcachingfunction。 我相信你希望用户的浏览器访问你的网站caching它的图像以及它的.css文件,这样他们就可以避免每访问一次你的网站就获取所有这些内容,从而加快速度。

那么,HTTP的function,让你做到这一点。

从基础开始,HTTP是一个请求 – 响应协议。 浏览器发送资源请求,服务器响应。 请求和响应都包含标题,这些标题分别描述浏览器和服务器在接收到响应和请求时的行为。

您可以通过在.htaccess文件中设置响应标头来告诉用户的浏览器caching图像和.css。

为了实现这一目标,您需要在响应中使用的标题如下所示:

HTTP / 1.1提供了以下caching响应头文件:Expires和Cache-Control:max-age。 这些指定资源的“新鲜度生命周期”,也就是浏览器可以使用caching资源的时间段,而不检查是否可以从Web服务器获得新版本。 它们是无条件应用的“强大的caching标题” 也就是说,一旦它们被设置并且资源被下载,浏览器将不会发布对该资源的任何GET请求,直到达到有效date或最大年龄。

Last-Modified和ETag。 这些指定了浏览器检查以确定文件是否相同的资源的一些特征。 在Last-Modified标题中,这总是一个date。 在ETag标头中,这可以是唯一标识资源的任何值(文件版本或内容散列是典型的)。 Last-Modified是一个“弱”caching头,因为浏览器应用启发式来确定是否从caching中获取项目。 (启发式在不同的浏览器中是不同的)。但是,这些头允许浏览器通过在用户显式重新加载页面时发出条件GET请求来有效地更新其caching的资源。 条件GET不会返回完整的响应,除非资源在服务器上发生了变化,因此延迟低于完整的GET。

为所有可caching资源指定Expires或Cache-Control max-age之一,以及Last-Modified或ETag之一。 指定Expires和Cache-Control:max-age,或指定Last-Modified和ETag都是多余的。

取自: http : //code.google.com/speed/page-speed/docs/caching.html 。

当你明白了这一点后,select你认为最适合你需求的标题,你可以使用apache mod_headers和FilesMatch指令来完成。

这里有一个例子,你可以把你的.htaccess(它可能正是你想要的):

 <FilesMatch "\.(css|swf|png|jpg|jpeg|gif)$"> Header unset Pragma Header unset Expires Header set Cache-Control "max-age=604800" </FilesMatch> 

在你做这些之前,我build议你下载Chrome的Page Speed插件( http://code.google.com/speed/page-speed/download.html )并安装它。 然后,运行页面速度testing并查看其结果,特别是“利用浏览器caching”一节,以查看是否真的需要采取措施。

至less在我看来,用meta标签控制静态HTML文件的caching并不是很稳定。 你应该看看mod_expires(使用HTTP头进行caching控制): http : //httpd.apache.org/docs/2.0/mod/mod_expires.html

如果要cachingdynamic网站,则可以caching整个页面或仅caching数据库请求(取决于您的数据库/网站devise)。 也许这个链接是有帮助的: http : //blog.digitalstruct.com/2008/02/27/php-performance-series-caching-techniques/

你的问题非常广泛。 “caching”是在几个不同的层面上完成的,所以问“我如何caching我的网站”有点像问我“如何做晚餐”。 有很多方法可以做到这一点。

如果你有一个dynamic的网站,如MySQL的数据库,你可以caching在数据库层。 您可以使用memcache或APCcachingPHP层。 您可以使用反向代理(如Varnish)在服务器层上进行caching。

而这些甚至不会触及客户端caching(即每个客户端的Web浏览器caching该特定人员的内容),这就是您正在讨论的.htaccess和头信息 。

你最好专注于服务器端caching,而不是客户端caching。

构buildcaching体系结构在很大程度上取决于您的应用程序构build的内容,内容更改的频率以及最新信息的需求。

如果你有一个dynamic的网站,我首先会build议学习如何用自己的内置caching机制来提高MySQL的性能。

如果你有一个非常繁忙的网站,那么我会build议学习Varnish或其他反向代理caching服务器的工作原理。

无论哪种方式,看看这些话题,学习,并随时回来,当你有更具体的问题。