在开发动态网站时可以实施哪些缓存技术?

时间:2011-10-31 07:22:44

标签: php zend-framework

我需要知道可以在网站中实现的所有缓存技术,以便我可以加快性能。我以前从不需要缓存,所以我完全不知道如何做,甚至做什么,以及任何有关它的事情。

我正在寻找一些教程,文章或任何有用的东西。

5 个答案:

答案 0 :(得分:0)

我会从这开始:http://www.mnot.net/cache_docs/

这是非常深入的,当你读完它时,你将立即缓存。但是,在深入研究缓存深渊之前,您可能需要考虑几件事情。诸如将所有标签放在页面底部的事情。压缩CSS和JS文件也很好。

无论如何,如果你真的想开始使用缓存,那么我建议先设置HTTP头。

这是一种方式:

$ cd /path/to/webroot
$ vi .htaccess

然后在.htaccess文件中,放置以下行:

<IfModule mod_expires.c>
    Header set Cache-Control "max-age=7200, public"
</IfModule>

这只是一个快速而肮脏的例子,也可以使用PHP中的header()来完成。但是,这是针对浏览器缓存的,请记住。如果你想进行页面缓存(比如将页面输出存储在服务器的内存中),我建议你查看这个页面:

http://php.net/manual/en/function.ob-start.php

祝你好运!

答案 1 :(得分:0)

您可以使用php Header()函数来缓存单个文件。

$expire_time = 3600 * 24 * 30; //30 days
header('Expires: ' . gmdate('D, d M Y H:i:s ', time() + $expire_time) . 'GMT');

或者在某些情况下,最好使用.htaccess文件中的指令。

<IfModule mod_headers.c>
     # 3 month
     <FilesMatch "\.(ico|pdf|flv|jpg|jpeg|png|gif|js|css|swf)$">
         Header set Cache-Control "max-age=7257600, public"
     </FilesMatch>

     # 2 DAYS
     <FilesMatch "\.(xml|txt)$">
         Header set Cache-Control "max-age=172800, public, must-revalidate"
     </FilesMatch>

     # 45 MIN
     <FilesMatch "\.(html|htm)$">
         Header set Cache-Control "max-age=2700, public, must-revalidate"
     </FilesMatch>

     # No cache
     <FilesMatch "\.(pl|php|cgi|spl)$">
         Header unset Cache-Control
         Header unset Expires
         Header unset Last-Modified
         FileETag None
         Header unset Pragma
     </FilesMatch>
</IfModule>

要进行深入检查,您可以阅读Speed Up Sites with htaccess Caching。     

答案 2 :(得分:0)

如果您有多个服务器,可以查看memcached,它基于键值对从分布式内存中快速访问数据(某种程度)。

您还可以将频率较低的已更改页面存储在磁盘上并提供服务,而无需每次都创建它们。这是最简单的缓存系统,但有效。

有许多缓存解决方案可供选择,例如:ZendAPC等。

另请参阅,如果您可以先调整dbms。作为其主要的瓶颈。

答案 3 :(得分:0)

对于缓存技术INSIDE您的网站代码,您可以查看Symfony项目HTTP缓存组件。它们还在其文档中提供了大量章节,解释了为什么选择HTTP缓存,并详细解释了所有缓存选项。你可以在这里找到这一章:http://symfony.com/doc/current/book/http_cache.html这绝对是一本很好的读物。

另一个简单的选择是安装操作码缓存/ PHP加速器,但这需要访问您的网络服务器。

答案 4 :(得分:0)

一种提供概述的简单答案。有两种类型的缓存:

  1. 服务器侧
  2. 客户端
  3. 服务器端缓存涉及在服务器端的某个位置保存昂贵或耗时的操作(如对数据库或外部Web服务的调用)的结果。典型存储包括基于内存的缓存,如Memcached或简单的文件系统存储。

    我通常会创建一个存储库或服务对象来组成我的数据访问和缓存机制。例如,可以使用Zend_Cache创建Zend_Cache::factory($frontend, $backend)实例,其中$frontend$backend是描述缓存机制的关联数组,其中大部分通常在{{1}中指定}}。然后,存储库/服务类在启动昂贵的操作之前检查缓存。如果高速缓存不包含存储的数据,则执行昂贵的操作并将结果存储在高速缓存中。有关缓存本身的详细信息,请参阅Zend_Cache section of the manual

    客户端缓存涉及告知浏览器 - 以及代理等中介 - 在客户端存储某些资源,如图像,javascripts和样式表。这通常涉及发送描述所需行为的正确缓存头。这可以使用.htaccess指令在每个文件夹上实现,也可以在每个请求的基础上通过将正确的标头放入config/application.ini对象来实现。

    使用服务器端和客户端都可以为您的应用程序带来显着的性能提升。

    像我说的那样,有点温和的回答。很高兴根据要求增加细节。