缓存查询繁重的页面(PHP / MySQL)

时间:2012-09-02 10:56:52

标签: php mysql performance caching

多年前,我从头开始创建了我的第一个PHP页面(新闻网站)。我正在重做它并开始重新设计,但我的页面速度出现了问题,所以有几个问题:

  1. 我可以用什么工具来确定瓶颈在PHP中的位置?
  2. 虽然页面是动态的,但它每隔几小时才会更改一次。什么是最好的简单工具(我有一个VPS,但确实有多个网站)可能会加快这个过程?

2 个答案:

答案 0 :(得分:0)

您可以将memcache用于基于时间的内存存储 使用Explain语句确定mysql查询的效率 如果页面上有大量图像,您可以使用延迟加载技术和
精灵技术。
在body标记的末尾添加javascript文件 有关更多信息,请查看此链接
http://developer.yahoo.com/performance/rules.html
感谢

答案 1 :(得分:0)

我所遵守的规则有点;

  1. 如果您有大量的javascripts,请将它们合并为一个大的。减少对服务器的压力,并释放客户端为实际负载提供图像等的空闲请求。
  2. 如果你有大量的样式表,请合并非嗅觉依赖(media =“all”而不是'if lte IE7'等)。与上述相同。这种技术也降低了gzipping的开销
  3. 当您拥有密集的mysql查询时,生成HTML - 将.html文件堆叠在服务器目录中。只需include 'cache/pageid.html';或类似地使用它们即可。将输出缓冲区放入内存是一种巨大的内存消耗。
  4. 降低图像数量 - 以及可能合并到工作表中的所有内容(通常在CSS中),这样做。
  5. 详细信息,请尝试创建“static.mydomain.tld”。这应该是一个没有cookie的域,只有一个简单的http-cache-directive;到期。这可能会让你在<中使用pr-request-header。 120个字节,而不是> 1K。
  6. 我的第4项真的不需要太多的工具来实现这个目标..我只是创建一个类似于

    的包装函数
      function writePageContents($cachefile) {
        $maxage = time() - 60*60; // one hour
        if($maxage < filemtime($cachefile)) return file_get_contents($cachefile);
        else return createPageFromDb();
      }
    

    因此,制作一个精简标题,包括所有可缓存的脚本和样式表,从'cdn'提供它们。将所有metas向下放置 - 关闭标题,然后flush()

    然后考虑是否需要重新创建缓存 - 如果不需要,只需在磁盘中包含本地存储