1.当一个动态网页请求被服务器所接收,一些中间处理必须完成,如执行脚本的PHP引擎。这些处理了一段时间后, Web服务器开始提供到浏览器输出。在简单PHP脚本中这未必是一个很大的拖延,但对于更复杂的应用中,在该网页的最后准备提交时,PHP引擎可能有很多工作要做。这种额外的工作成果显示在浏览器时间间隔用户的要求和实际显示的网页中。
2.一个典型的Web服务器,如Apache ,使用时间文件的修改通知网络浏览器请求的网页时间,让浏览器来采取适当的缓存行动。与动态网页相比,实际PHP脚本可能会只是偶尔改变;同时,它显示的内容往往是从数据库提取,将会经常变更。 Web服务器无差别的更新到数据库,因此它不发送最后修改日期。如果用户端(即用户的浏览器)已没有任何迹象表明多久数据将仍然有效,但将采取猜测。这时浏览器是否决定利用本地缓存版本的页面,现在已经过时,或者如果决定将浏览器从服务器请求一个新的网页的副本,这实际上并没有新内容,提出要求是多余的。 Web服务器将始终响应建造一个新版本的页面,无论是否在数据库中的数据实际上已经改变了。
为了避免一个网站访问者查看过时的内容,大多数Web开发用META标记或HTTP头,告诉浏览器没有使用缓存版本的页面。然而,这否定了网页浏览器的自净能力,高速缓存的网页,并引起一些严重的缺点。例如,在内容提供的动态网页可能每天只改变一次,所以肯定有好处如果有一个网页浏览器的缓存-即使只有24小时。
如果你创建小型的PHP应用程序,它通常能够出现这两个问题。但是,正如您的网站增加的复杂性-并吸引更多的流量- 你将开始考虑运行时的性能问题。这两个问题都是可以解决的,但是:第一与服务器端建立缓存;第二,从您的应用程序通过采取控制客户端缓存。确切的使用方式,以解决这些问题将取决于您的应用程序,但在本章中,我们会考虑这两个PHP和一些类库尽可能找到解决你 的网页困境的灵丹妙药尽。
请注意,在这一章讨论缓存,我们在研究解决方案,只限那些可以执行PHP程序中。为更广泛的介绍,最终讨论Web缓存的代表作是马克诺丁汉的教程
此外,该解决方案在这一章不应该与一些脚本缓存解决方案混淆的基础上开展工作的优化和缓存编译PHP脚本,如Zend的加速器和ionCube PHP的加速器。