我今天在PHPit上看到一篇关于“如何使用PHP构建一个简单的缓存系统”的文章。总的来说,这是一篇相当不错的文章,并且使用了一些很好的原则(使用输出缓冲区捕获内容,使用回调来抓取捕获的内容)。不过,我会做一些小的改进。
我会更改一些确定的区域。首先,die()
对我来说没有意义,因为它是一种在找到内容时中止执行的方法。exit(0)
更有意义—它表示执行成功。
此外,清除给定页面缓存的功能通常很有用。添加对$_GET
或$SERVER['PATH_INFO']
元素的检查可以满足这一要求。
文章说要在每个页面上包含具有缓存功能的文件。我对此有几个问题:
- 很容易忘记包含它。
- 命名空间——在全局区域中使用函数可能会与其他用户定义的函数发生冲突。
要解决(1),请使用auto_prepend_file
指令。您可以在a.htaccess文件(php_value"auto_prepend_file""/path/to/cache.php"
)、httpd.conf
或直接在您的php.ini;在任何一种情况下,它只需要被定义一次,你永远不必在你的脚本中担心它。如果有您不想缓存的脚本,您可以覆盖单个.htaccess
指令中的值,或在缓存例程中设置哈希查找以跳过此类脚本。
要解决(2),请将函数包装到一个类中。您仍然可以静态调用项目(Cache::get_url()
等)。这也将允许您定义如上所述的哈希查找—只需将其放在静态属性中即可。
最后,这一切之前都已经完成了。PEAR::Cache_Lite提供了所有这些功能(减去为每页创建唯一标识符的例程),甚至更高效。我在实践中看到的唯一区别是,当使用PEAR::Cache_Lite
时,我还必须执行auto_append_file
以停止输出缓冲。
总的来说,这是一篇不错的文章和页面缓存介绍。