选择PHP缓存技术:将缓存输出到文件与操作码缓存

PHP*_*guy 8 php performance caching eaccelerator apc

我听说过PHP代码的两种缓存技术:

  1. 当PHP脚本生成输出时,它会将其存储到本地文件中.再次调用脚本时,它会检查具有先前输出的文件是否存在,如果为true则返回此文件的内容.它主要是通过播放"输出缓冲区"来完成的.这篇文章描述了这样的事情.

  2. 使用一种操作码缓存插件,其中编译的PHP代码存储在内存中.最受欢迎的是APC,也是eAccelerator.

现在的问题是,使用这两种技术还是只使用其中一种技术是否合理.我认为第一种方法在实现中有点复杂和耗时,当第二种方法似乎是一个简单的方法,你只需要安装模块.

我在Ubuntu/Debian上使用PHP 5.3(PHP-FPM).

顺便说一句,有没有其他方法来缓存PHP代码或输出,我在这里没有提到?他们值得考虑吗?

Dan*_*man 7

你应该总是有一个像APC一样的操作码缓存.它的目的是加速代码的解析,并将在未来的版本中捆绑到PHP中.目前,它是在任何服务器上的简单安装,不需要您编写或更改任何代码.

但是,缓存操作码对加速代码的实际执行没有任何作用.您的瓶颈通常是与数据库通信或从磁盘读取数据所花费的时间.缓存程序的输出可避免不必要的资源使用,并可以按数量级加快响应速度.

您可以在堆栈的许多不同位置以多种不同的方式进行输出缓存.首先,您可以使用自己的代码,如您所建议的那样,通过缓冲输出,将其写入文件,以及在后续请求中从该文件中读取.

但仍然需要在每个请求上执行PHP代码.您可以在Web服务器级别缓存输出以跳过该输出.制定一组mod_rewrite规则将允许Apache在存在时提供静态文件而不是PHP代码,但是您必须手动或使用计划任务重新生成缓存版本,因为您的PHP代码将无法运行每个要求都这样做.

您还可以在Web服务器前面添加代理,并使用它来缓存输出.如今,Varnish是一种流行的选择,并且每秒可以提供数百倍的缓存请求,而不是Apache在同一台服务器上运行PHP脚本.缓存是在代理级别创建和配置的,因此当它到期时,请求将传递到您的脚本,该脚本通常会生成新版本的页面.