缓存查询量大的页面(PHP/MySQL)


Caching a query heavy page (PHP/MySQL)

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

  1. 我可以使用什么工具来确定PHP中的瓶颈在哪里
  2. 尽管页面是动态的,但它只会每隔几个小时更改一次。什么是最好的简单工具(我确实有一个VPS,但它上面有多个站点),可以加快这个过程

我所遵循的规则有些;

  1. 如果您有大量的java脚本,请将它们合并为一个大脚本。减轻了服务器的压力,并免除了客户端为实际负载提供图像等的空闲请求
  2. 如果您有大量的样式表,请合并非嗅探依赖项(media="all",而不是"If lte IE7"等)。与上述福利相同。这种技术还降低了gzip的开销
  3. 当您有密集的mysql查询时,生成HTML-将.HTML文件堆叠在服务器目录中。通过include 'cache/pageid.html';或类似方式使用它们。将输出缓冲区放入内存是对ram的巨大消耗
  4. 减少图像的数量——以及所有可能合并到工作表中的内容(通常在CSS中),这样做
  5. 详细地说,尝试创建一个"static.mydomain.tld"。这应该是一个没有cookie的域,带有一个简单的http缓存指令;过期。这可能会在<120字节,而可能大于1k

我的第四项真的不需要太多的工具来实现这个目标。。我只是创建了一个类似的包装器函数

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

因此,制作一个压缩的头,包括所有可缓存的脚本和样式表,从"cdn"中提供它们。将所有图元放在右下-关闭页眉,然后关闭flush()

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

您可以使用memcache进行基于时间的内存存储
使用Explain语句来确定mysql查询的效率
如果页面上有大量图像,您可以使用惰性加载技术和
sprite技术
在body标记的末尾包含您的javascript文件
有关详细信息,请查看此链接
http://developer.yahoo.com/performance/rules.html
感谢