刷新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 相关文章推荐
笑谈配置,使用Smarty技术
Jan 04 PHP
封装一个PDO数据库操作类代码
Sep 09 PHP
PHP 类商品秒杀计时实现代码
May 05 PHP
PHP的autoload自动加载机制使用说明
Dec 28 PHP
PHP中使用cURL实现Get和Post请求的方法
Mar 13 PHP
教你如何用php实现LOL数据远程获取
Jun 10 PHP
php格式化时间戳显示友好的时间实现思路及代码
Oct 23 PHP
php中使用session_set_save_handler()函数把session保存到MySQL数据库实例
Nov 06 PHP
PHP使用redis实现统计缓存mysql压力的方法
Nov 14 PHP
php编译安装php-amq扩展简明教程
Jun 25 PHP
PHP jQuery+Ajax结合写批量删除功能
May 19 PHP
浅析PHP类的反射来实现依赖注入过程
Feb 06 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即时捕捉PHP中的错误并发送email通知的实现代码
2013/01/19 PHP
Eclipse中php插件安装及Xdebug配置的使用详解
2013/04/25 PHP
CodeIgniter上传图片成功的全部过程分享
2013/08/12 PHP
php对文件夹进行相关操作(遍历、计算大小)
2015/11/04 PHP
PHP流Streams、包装器wrapper概念与用法实例详解
2017/11/17 PHP
基于JQuery的一句话搞定手风琴菜单
2012/09/14 Javascript
提交表单时执行func方法实现代码
2013/03/17 Javascript
jQuery中bind,live,delegate与one方法的用法及区别解析
2013/12/30 Javascript
JS中的log对象获取以及debug的写法介绍
2014/03/03 Javascript
基于Jquery实现键盘按键监听
2014/05/11 Javascript
js读取json的两种常用方法示例介绍
2014/10/19 Javascript
javascript父子页面通讯实例详解
2015/07/17 Javascript
实现React单页应用的方法详解
2016/08/02 Javascript
深入理解JS实现快速排序和去重
2016/10/17 Javascript
JS实现全屏的四种写法
2016/12/30 Javascript
angularjs中回车键触发某一事件的方法
2017/04/24 Javascript
AngularJS读取JSON及XML文件的方法示例
2017/05/25 Javascript
使用Node.js写一个代码生成器的方法步骤
2019/05/10 Javascript
中级前端工程师必须要掌握的27个JavaScript 技巧(干货总结)
2019/09/23 Javascript
Vue实现剪贴板复制功能
2019/12/31 Javascript
python实现监控windows服务并自动启动服务示例
2014/04/17 Python
python-itchat 统计微信群、好友数量,及原始消息数据的实例
2019/02/21 Python
pandas DataFrame 行列索引及值的获取的方法
2019/07/02 Python
Python统计分析模块statistics用法示例
2019/09/06 Python
Python中url标签使用知识点总结
2020/01/16 Python
Free People中国官网:波西米亚风格女装服饰
2016/08/30 全球购物
电气专业应届生求职信
2013/11/01 职场文书
户外亲子活动策划方案
2014/02/07 职场文书
怎么写自荐书范文
2014/02/12 职场文书
小学生中国梦演讲稿
2014/04/23 职场文书
结对共建工作方案
2014/06/02 职场文书
公司行政专员岗位职责
2014/08/24 职场文书
教师专业技术工作总结2015
2015/05/13 职场文书
2015年中学体育教师工作总结
2015/10/23 职场文书
奖学金发言稿(范文)
2019/08/21 职场文书
在js中修改html body的样式
2021/11/11 Javascript