【问题标题】:What type of caching should I use?我应该使用什么类型的缓存?
【发布时间】:2009-11-28 03:22:53
【问题描述】:

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

我有几个页面也使用了 javascript。

我需要知道使用什么类型的缓存来提高我网站的性能... 有很多“恒定”图像,例如菜单、侧边栏、背景图像,它们可能可以以某种方式缓存。

您知道网络浏览器是否会自动缓存这些图像,还是我必须编写一段代码才能做到这一点?

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

另外,有没有办法以某种方式缓存大型 php 函数? (例如,当您在 Windows 中打开应用程序时,该应用程序会以某种方式被缓存,如果您还没有重新启动计算机,下次打开它时它会打开得更快。)

谢谢

【问题讨论】:

    标签: php html caching


    【解决方案1】:

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

    要开始提高服务器端 (PHP) 的性能,您必须找出瓶颈。这样做的一个好方法是在您的网站上实现一些日志记录(SQL 查询以及获得结果的秒数、浏览次数最多的页面、最耗时的功能)。您将让它运行几周/几天。分析一下,你就会知道要缓存哪些 SQL 查询,要重构哪些函数。

    如果您赶时间,一种快速而肮脏的方法是获取前 10 个浏览次数最多的页面并将它们缓存在磁盘上。它会起作用,但如果您的网站真的是动态的并且几乎实时需要信息,那么您将经常使该缓存无效。如果您的网站中有一些登录/注销过程,它也可能会产生问题。另一种方法是缓存这些页面的某些部分,通常生成成本更高(数据库/访问,复杂的处理)。

    就您可以在 PHP 上进行此类缓存处理的工具而言:

    【讨论】:

    • -1 用于客户端缓存和性能建议。需要为文件明确设置客户端缓存规则,并且需要权衡取舍(未来的缓存需要更改资源 URL 以进行刷新)。使用 CDN(例如 CloudFront)与 S3 等存储。要真正加快速度,请阅读developer.yahoo.com/performance/rules.html
    • @Orip:感谢您的建议,我已经编辑了我的答案以反映这些
    【解决方案2】:

    对于我最近启动的一个站点,我使用 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();
    }
    

    该网站已经建立了将近一个月,并且获得了很多流量。上面的代码已经多次保存了我的服务器。

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 2013-06-02
        • 1970-01-01
        • 2022-01-18
        • 2017-01-28
        • 1970-01-01
        • 1970-01-01
        • 2010-12-23
        • 2015-03-05
        相关资源
        最近更新 更多