如何为PHP网站实现HTML缓存?
为PHP网站实现缓存的最佳方法是什么?显然,有些东西不应该缓存(例如搜索查询),但是我想找到一个好的解决方案,以确保避免出现"挖掘效应"。
我知道有适用于WordPress的WP-Cache,但是我正在写一个不基于WP的自定义解决方案。我对编写自己的缓存(如果足够简单)感兴趣,或者我们可以将我引向一个不错的轻量级框架。我对Apache的了解并不多,所以如果它是一个PHP框架,那将是一个更好的选择。
谢谢。
解决方案
回答
最好的方法是使用代理缓存(Squid,Varnish)并提供适当的Cache-Control / Expires标头以及ETag:有关缓存如何工作以及如何获得最大收益的完整说明,请参见Mark Nottingham的缓存教程。缓存代理的性能。
另外,请检查出memcached,并尝试在其中缓存数据库查询(或者更好的是,预渲染的页面片段)。
回答
我们可以使用输出缓冲来有选择地保存部分输出(要缓存的部分),如果还不够长,则将其显示给下一个用户。这样,我们仍可以实时呈现页面的其他部分(例如,可自定义的框,个人信息)。
回答
我们似乎正在寻找一个PHP缓存框架。
我建议我们使用一个很好的CacheSystem插件附带的模板系统TinyButStrong。
它简单,轻便,可自定义(我们可以缓存所需的html文件的任何部分),功能非常强大^^
回答
PHP Smarty模板引擎(http://www.smarty.net)包括一个相当高级的缓存系统。
我们可以在Smarty手册的缓存部分中找到详细信息:http://www.smarty.net/manual/en/caching.php
回答
我建议使用Memcached或者APC。两者都是具有简单的API和大量库的内存中缓存解决方案。
这2的问题是我们需要将它们安装在Web服务器上,或者如果是Memcached,则需要将其安装在其他服务器上。
装甲运兵车
优点:
- 简单的
- 快速地
- 加快PHP执行速度
缺点
- 对于分布式系统不起作用,每台机器都在本地存储其缓存
记忆快取
优点:
- 快速(ish)
- 可以安装在单独的服务器上以供所有Web服务器使用
- 经过高度测试,由LiveJournal开发
- 所有大人物(Facebook,Yahoo,Mozilla)使用的缺点:
- 比APC慢
- 可能的网络延迟
- 略多的配置
我不建议自己写书,那里有很多书。如果无法在网络服务器上安装软件,则可以使用基于磁盘的缓存,但是可能会出现种族问题。一个请求可能正在写入文件,而另一个正在读取。
实际上,我们甚至可以缓存搜索查询几秒钟到一分钟。除非数据库每秒更新多次,否则不会有任何延迟。
回答
Pear :: CacheLite类的页面或者页面部分的简单缓存。我还将APC和内存缓存用于不同的事情,但是到目前为止,我看到的其他答案更多是针对更完整,更复杂的系统。如果我们只需要省力,使用文件支持的存储来重建页面Cache_lite的一部分就足够了,并且实现起来非常简单。
回答
Project Gazelle(一个开放源代码的洪流站点)提供了有关在该站点上设置Memcached的分步指南,我们可以在可能要设置的任何其他站点上轻松使用它来处理大量流量。
获取源代码并阅读文档。
回答
如果没有必要使用代理缓存,并且我们正在提供完整的HTML文件,则可以完全绕过PHP,以获得最佳性能。研究WP Super Cache如何工作。
未缓存的页面将复制到具有与站点类似的URL结构的缓存文件夹。在以后的请求中,mod_rewrite会记录高速缓存文件的存在并代之以服务。其他RewriteCond指令用于确保评论者/登录用户可以看到实时PHP请求,但是大多数访问者将直接由Apache提供服务。