PHP通过缓存页面加速动态内容生成(原理)

    很多网站都是PHP构建的,PHP可以很方便的从文件或数据库中读取内容,然而,响应时间长是它一个缺点,来自用户的每一次请求都可能触发多次对数据库的查询,然后PHP处理查询结果,以某种形式呈现出来,对于复杂的应用或者普通的服务器来说是相当慢的。
 
    有意思的是,这些所谓的“动态”网站可能很少变更内容,有的页面上的文章在发布后可能永远也不会再修改,然而每次用户请求该页面时,php脚本都会去查找这些内容(可能从数据库中查找,也可能从xml文件中查找etc。取决于你的应用),经过很多函数处理之后才将内容输出到你的浏览器上。
 

使用缓存Caching

 
    我们可以使用缓存来解决上面描述的问题,而不需要每次都重新生成页面,只有第一次请求页面的时候才让PHP脚本帮我们生成页面,然后,存储一个PHP脚本输出到浏览器中的内容的备份。下一次,当一个访问者请求一个相同的页面,PHP脚本就会知道它已经生成了这个页面,于是可以不再查询数据库就输出用户请求的内容。
 

原理
 

    下图展示了,请求一个”新闻“页面的过程,因为新闻每天都不一样,所以很有必要将它存储在数据库中而不是存储在一个静态文件中,这样我们可以很方便的更新和搜索新闻。这个新闻页面是一个PHP脚本,它有以下行为:
 
(1)连接到mysql数据库
(2)请求5条最近的新闻
(3)将新闻按时间先后进行排序
(4)读取一个模板文件并替换模板中的变量
(5)输出处理完成的页面给用户

PHP请求页面不使用缓存

    这个过程需要大量的时间,如果每小时只有几个访问者,请求花费的时间和资源是可以忽略的,但是如果每个小时有上千个访问者,情况就会大不一样。

    考虑通过PHP脚本访问新闻和直接请求一个普通的html文件之间的差异。对于web服务器而言,提供一个html文件是很容易的事情,它只需要找到这个文件并将内容输出到浏览器。使用缓存,你可以获得快速响应的体验。

    继续说这个”新闻“的例子,不同的是,这里我们使用缓存(caching),第一个来自用户的请求会让PHP脚本做和上面例子中一样的事情,另外,PHP脚本还会将请求响应的结果(也就是输出在浏览器中的内容)写入一个文件(比如HTML文件)。随后的请求会像下面这样工作:
 

    你会发现,MySQL数据库和模板直接没有建立联系,web服务器只是将一个纯文本格式的html文件返回给了用户浏览器。请求在很短的时间就完成了,用户可以更快的得到他们访问的页面,你的服务器也会减少负载---这样大家都很happy:)

 

    后续将会发布:如何使用PHP实现缓存(这里指文件的缓存)

posted on 2012-03-02 22:47  IT技术畅销书  阅读(747)  评论(0编辑  收藏  举报

导航