经过刷新 PHP 缓冲区来加速你的站点

在当前 PHP 版本的默认配置下,“输出缓冲(Output Buffering)”是被打开的。旧版本则不是这样,在旧版本的 PHP 中,字符串在每次被输出的时候(经过 echo 或 print 函数),都会触发一次发送到客户端浏览器的动做。php

“输出缓冲”的引入,使得这一过程更加快速、更加高效。缓冲区其实是在内存中开辟了一块区域,能够认为是内存中的一个大的字符串。当程序中有字符要输出的时候,会把要输出的内容附加到该缓冲区中,用来替代旧版本 PHP 中每次都直接输出到浏览器的方式。当缓冲区被“刷新”的时候,再统一输入到用户浏览器。如下几种状况下,会引发缓冲区的“刷新”操做:css

一、PHP 程序执行完毕;html

二、缓存区的大小超过了 php.ini 配置文件中设置的 output_buffering 值;web

三、flush() 或者 ob_flush() 函数被调用的时候。浏览器

在实际的产品环境下,咱们能够经过在 head 标签后立刻刷新 PHP 的缓冲区,来达到加速你的站点的目的,示例代码以下:缓存

<!DOCTYPE html> 
<html lang="en"> 
<head> 
<meta charset="UTF-8" /> 
<title>Buffer flushing in action</title> 
<link rel="stylesheet" type="text/css" href="styles.css" /> 
<link rel="shortcut icon" href="favicon.ico" /> 
</head> 
<?php 
// 这里强制刷新缓冲区 
flush(); 
?> 
<body> 
...

(若是你的站点在使用 WordPress,你应该把相似的代码放在你的 WordPress 模板的 header.php 文件中。)函数

接下来来解释上述代码的做用:优化

当浏览器接收到页面 head 部分的代码的时候,就能够开始下载 head 段中的包括的资源了,相似 CSS 文件、站点收藏图标(Favicon)等。这些内容的下载能够与浏览器接受 body 段的内容时的时间同步进行。网站

具体能加速多少,须要因地制宜。这取决于不少客观条件,包括服务端的响应速度、你的页面大小、你的 CSS 文件大小和数量、浏览器是否有本地缓存等等。因素当然有不少,不过这样一个小小的优化,就能够显而易见的为你的站点加速,何乐而不为呢?spa

我很但愿各位把这个小技巧运用在本身网站上,并跟踪所产生的实际效果。期待你们的反馈。

原文做者:Craig Buckler ,原文地址:http://blogs.sitepoint.com/2010/10/29/faster-web-pages-php-buffer-flush/

相关文章
相关标签/搜索