刷新PHP缓冲区为你的站点加速


Posted in PHP onOctober 10, 2015

在当前 PHP 版本的默认配置下,“输出缓冲(Output Buffering)”是被打开的。旧版本则不是这样,在旧版本的 PHP 中,字符串在每次被输出的时候(通过 echo 或 print 函数),都会触发一次发送到客户端浏览器的动作。
“输出缓冲”的引入,使得这一过程更加快速、更加高效。缓冲区实际上是在内存中开辟了一块区域,可以认为是内存中的一个大的字符串。当程序中有字符要输出的时候,会把要输出的内容附加到该缓冲区中,用来替代旧版本 PHP 中每次都直接输出到浏览器的方式。当缓冲区被“刷新”的时候,再统一输入到用户浏览器。以下几种情况下,会引起缓冲区的“刷新”操作:
1、PHP 程序执行完毕;
2、缓存区的大小超过了 php.ini 配置文件中设置的 output_buffering 值;
3、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> 
...

接下来来解释上述代码的作用:
当浏览器接收到页面 head 部分的代码的时候,就可以开始下载 head 段中的包括的资源了,类似 CSS 文件、站点收藏图标(Favicon)等。这些内容的下载可以与浏览器接受 body 段的内容时的时间同步进行。
具体能加速多少,需要因地制宜。这取决于很多客观条件,包括服务端的响应速度、你的页面大小、你的 CSS 文件大小和数量、浏览器是否有本地缓存等等。因素固然有很多,不过这样一个小小的优化,就可以显而易见的为你的站点加速,何乐而不为呢?

我很希望各位把这个小技巧运用在自己网站上,并跟踪所产生的实际效果。期待大家的反馈。

PHP 相关文章推荐
PHP在特殊字符前加斜杠的实现代码
Jul 17 PHP
php数组函数序列之array_splice() - 在数组任意位置插入元素
Nov 07 PHP
windows环境下php配置memcache的具体操作步骤
Jun 09 PHP
thinkphp控制器调度使用示例
Feb 24 PHP
php使用codebase生成随机数
Mar 25 PHP
php采用curl访问域名返回405 method not allowed提示的解决方法
Jun 26 PHP
Yii使用CLinkPager分页实例详解
Jul 23 PHP
php读取der格式证书乱码解决方法
Jun 22 PHP
PHP 获取ip地址代码汇总
Jul 05 PHP
利用Homestead快速运行一个Laravel项目的方法详解
Nov 14 PHP
PHP排序算法之归并排序(Merging Sort)实例详解
Apr 21 PHP
tp5.1 框架数据库-数据集操作实例分析
May 26 PHP
PHP和Mysql中转UTF8编码问题汇总
Oct 10 #PHP
[原创]ThinkPHP中SHOW_RUN_TIME不能正常显示运行时间的解决方法
Oct 10 #PHP
PHP内存使用情况如何获取
Oct 10 #PHP
PHP中Session和Cookie是如何操作的
Oct 10 #PHP
PHP中JSON的应用技巧
Oct 10 #PHP
PHP的serialize序列化数据以及JSON格式化数据分析
Oct 10 #PHP
解决PHP里大量数据循环时内存耗尽的方法
Oct 10 #PHP
You might like
PHP生成月历代码
2007/06/14 PHP
php 如何获取数组第一个值
2013/08/06 PHP
php获取数组长度的方法(有实例)
2013/10/27 PHP
CodeIgniter读写分离实现方法详解
2016/01/20 PHP
Colortip基于jquery的信息提示框插件在IE6下面的显示问题修正方法
2010/12/06 Javascript
Javascript中定义方法的另类写法(批量定义js对象的方法)
2011/02/25 Javascript
onclick与listeners的执行先后问题详细解剖
2013/01/07 Javascript
JavaScript中省略元素对数组长度的影响
2016/10/26 Javascript
基于$.ajax()方法从服务器获取json数据的几种方式总结
2018/01/31 Javascript
Vue.js组件使用props传递数据的方法
2019/10/19 Javascript
highcharts.js数据绑定方式代码实例
2019/11/13 Javascript
如何优雅地取消 JavaScript 异步任务
2020/03/22 Javascript
JavaScript字符串转数字的简单实现方法
2020/11/27 Javascript
python定时采集摄像头图像上传ftp服务器功能实现
2013/12/23 Python
python打开文件并获取文件相关属性的方法
2015/04/23 Python
浅谈python 四种数值类型(int,long,float,complex)
2016/06/08 Python
Python爬虫通过替换http request header来欺骗浏览器实现登录功能
2018/01/07 Python
Python编写一个优美的下载器
2018/04/15 Python
python爬虫之xpath的基本使用详解
2018/04/18 Python
Python批处理删除和重命名文件夹的实例
2018/07/11 Python
详解配置Django的Celery异步之路踩坑
2018/11/25 Python
Python实现制度转换(货币,温度,长度)
2019/07/14 Python
Python sep参数使用方法详解
2020/02/12 Python
Python如何在main中调用函数内的函数方式
2020/06/01 Python
python实现网页录音效果
2020/10/26 Python
python+selenium自动化实战携带cookies模拟登陆微博
2021/01/19 Python
CSS3制作文字半透明倒影效果的两种实现方式
2014/08/08 HTML / CSS
HTML5 Convas APIs方法详解
2015/04/24 HTML / CSS
HomeAway澳大利亚:预订你的度假屋,公寓、度假村、别墅等
2019/02/20 全球购物
企业人事任命书
2014/06/05 职场文书
应届毕业生自荐书
2014/06/18 职场文书
唐山大地震的观后感
2015/06/05 职场文书
关于元旦的广播稿2016
2015/12/17 职场文书
大学毕业生自我鉴定范文
2019/06/21 职场文书
golang中的空slice案例
2021/04/27 Golang
nginx七层负载均衡配置详解
2022/07/15 Servers