用于半静态网站的PHP Apc缓存或文件缓存?

时间:2013-05-24 15:08:51

标签: php caching apc

我是PHP的新手,想要尝试缓存(第一次),所以我创建了网站,它有:

  • 动态主页
  • 动态投资组合页面
  • 动态联系页面
  • 静态关于页面
  • 静态管理页面

所以我阅读了有关缓存的教程,并尝试创建自己的缓存系统:

使用基于请求页面的文件缓存,当请求页面时,缓存系统将检查cache directory中是否有缓存,如果没有缓存文件,则从php写入所有输出(html)脚本(在这种情况下是output buffer的输出),如果有与特定id(基于URI)对应的缓存文件,那么只需include_once() html文件。

然后我在CodeIgniter中读到(我使用CI制作这个网站)说有APC用于缓存,然后我再次阅读有关APC的内容,我读到的有关APC的内容是它缓存了DB结果,但现在我很困惑哪个应该我用

到目前为止我得到了什么:

  • 如果有很多请求,文件缓存可能会慢一点(我不知道这是不是真的,但我从搜索引擎的某个地方读到它)
  • APC很快

但我仍然感到困惑,我应该使用,我在共享主机

1 个答案:

答案 0 :(得分:1)

PHP应用程序中最相关的缓存级别:

  • 文件/脚本缓存 - 操作系统实际上会在很大程度上执行此操作。打开文件时,它会添加到操作系统级缓存中。它会一直存在,直到触摸文件或操作系统需要为其他进程释放内存。 本土的PHP解决方案不是一个很好的替代品。

  • 操作码缓存 - 为了运行,PHP需要解析脚本并将其编译为操作码。像APC这样的机制将缓存Apache执行的每个PHP脚本的操作码,前提是缓存不会溢出。 构建在APC之上的本土PHP解决方案可以部分执行此操作,但APC已经这样做了......所以不要打扰。

  • 查询缓存 - 如果您的脚本访问大量不经常更改的数据,或者更新之间的某些延迟和这些更新的可见性是可接受的,请缓存结果来自复杂的查询是有益的。 基于APC构建的本土PHP解决方案在此级别上是可接受且有益的。但是数据库级解决方案在这里也是合适的,并且通常更多是合适的。

  • 输出缓存 - 如果您的网页在很大程度上具有确定性和/或可以接受适用于查询缓存的相同类型的延迟,则可以缓存整个输出使用输出缓冲和APC的脚本。 建立在APC上的本土PHP解决方案在这里是可以接受的,但通常不是必需的。如果页面是静态的,那么你可能不会自己保存任何重新计算。如果它是动态的,那么通常可能只是重新渲染页面。

在专用或虚拟专用环境中,您需要自己安装APC(或类似的东西)。但是,在共享托管环境中,很可能安装了APC。如果不是,你无论如何都无法安装它。

并且,由于我自己的不确定性,我建议在共享环境中使用APC执行任何查询或输出缓存 - 我不确定APC是否通过虚拟主机隔离缓存。即便如此,我也不会认为我的网站真的是一个独立的虚拟主机。