我应该使用什么类型的缓存?

时间:2009-11-27 04:17:20

标签: php html caching

我有一个分类广告网站,它使用PHP和MYSQL。

我有几个页面也使用javascript。

我需要知道用什么类型的缓存来提高我网站的性能... 有很多“常量”图像,如menues,sidebars,background-images,可能会以某种方式缓存。

您是否知道网络浏览器是自动缓存这些图像还是我必须编写一段代码才能执行此操作?

我需要正确的指导......

另外,有没有办法以某种方式缓存大型PHP功能? (比如当你在Windows中打开一个应用程序时,应用程序会以某种方式进行缓存,下次打开它时会打开很多,如果你还没有开始计算机那么快。)

由于

3 个答案:

答案 0 :(得分:3)

您可以使用mod_expire(如果您使用apache作为webserver)在静态内容(js,images,favicon,纯HTML)上设置过期HTTP标头,因此浏览器在过期之前不会请求此对象。根据您的托管和您的受众,使用服务作为akamai来托管您的静态内容(图像,CSS,JavaScript)可能是个好主意。

为了开始提高服务器端(PHP)的性能,您必须识别瓶颈。这样做的一个好方法是在您的网站上实现一些日志记录(SQL查询和获取结果的秒数,查看次数最多的页面,花费最多时间的函数)。你会让这个运行几周/几天。分析一下,你会知道要缓存哪些SQL查询,重构什么函数。

如果您赶时间,快速而肮脏的方法是获得前10个查看次数最多的页面并将其缓存在磁盘上。它会工作,但如果你的网站真的很动态,几乎实时需要信息,你会经常使这个缓存失效。如果您的网站中有一些登录/注销过程,它也会产生问题。另一种方法是缓存那些页面的某些部分,通常生成成本更高(DB /访问,复杂处理)。

根据您可以使用PHP进行此类缓存处理的工具:

答案 1 :(得分:1)

对于我最近推出的网站,我使用ob_start()编写了一些代码来将我的PHP文件缓存到平面HTML。这是一个例子:

$cacheFile = 'cache/home.html';
$cacheTime = 600;

if (file_exists($cacheFile) && time() - $cacheTime < filemtime($cacheFile)) {
    require $cacheFile;
} else {
    ob_start();

    // Your dynamic code

    $fp = fopen($indexCacheFile, 'w');
    fwrite($fp, ob_get_contents());
    fclose($fp);
    ob_end_flush();
}

该网站已经存在了近一个月,并且已经做了大量的流量。上面的代码多次保存了我的服务器。

答案 2 :(得分:0)

您可以使用Squid等缓存代理或某种PHP accelerator。此外,如果您查询的数据没有太大变化,缓存MySQL查询结果可能是一个好主意。

正如另一个答案所指出的,如果文件的时间戳没有改变,静态内容通常会被用户的浏览器缓存。