刷新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防注
Jan 15 PHP
php中文字符截取防乱码
Mar 28 PHP
php5新改动之短标记启用方法
Sep 11 PHP
php通过文件头检测文件类型通用代码类(zip,rar等)
Oct 19 PHP
PHP 第二节 数据类型之转换
Apr 28 PHP
PHP CURL获取返回值的方法
May 04 PHP
php上传大文件失败的原因及应对策略
Oct 20 PHP
php倒计时出现-0情况的解决方法
Jul 28 PHP
php基于单例模式封装mysql类完整实例
Oct 18 PHP
php中引用&amp;的用法分析【变量引用,函数引用,对象引用】
Dec 12 PHP
PHP实现多图上传和单图上传功能
May 17 PHP
Laravel 微信小程序后端搭建步骤详解
Nov 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
Yii快速入门经典教程
2015/12/28 PHP
thinkPHP简单导入和使用阿里云OSSsdk的方法
2017/03/15 PHP
PHP获取ttf格式文件字体名的方法示例
2019/03/06 PHP
prototype 学习笔记整理
2009/07/17 Javascript
JavaScript判断窗口是否最小化的代码(跨浏览器)
2010/08/01 Javascript
jQuery 幻灯片插件(带缩略图功能)
2011/01/24 Javascript
原生javascript实现获取指定元素下所有后代元素的方法
2014/10/28 Javascript
AngularJS HTML编译器介绍
2014/12/06 Javascript
JavaScript设计模式之单件模式介绍
2014/12/28 Javascript
javascript获取网页宽高方法汇总
2015/07/19 Javascript
gulp-htmlmin压缩html的gulp插件实例代码
2016/06/06 Javascript
Bootstrap零基础入门教程(三)
2016/07/18 Javascript
微信+angularJS的SPA应用中用router进行页面跳转,jssdk校验失败问题解决
2016/09/09 Javascript
form+iframe解决跨域上传文件的方法
2016/11/18 Javascript
NodeJS实现客户端js加密
2017/01/09 NodeJs
详解使用Visual Studio Code对Node.js进行断点调试
2017/09/14 Javascript
mui上拉加载更多下拉刷新数据的封装过程
2017/11/03 Javascript
JS实现用特殊符号替换字符串的中间部分区域的实例代码
2018/07/24 Javascript
bootstrap动态调用select下拉框的实例代码
2018/08/09 Javascript
js代码规范之Eslint安装与配置详解
2018/09/08 Javascript
在Vue中使用axios请求拦截的实现方法
2018/10/25 Javascript
Vue插件从封装到发布的完整步骤记录
2019/02/28 Javascript
JS实现简单省市二级联动
2019/11/27 Javascript
Python随机生成数模块random使用实例
2015/04/13 Python
使用70行Python代码实现一个递归下降解析器的教程
2015/04/17 Python
python添加模块搜索路径和包的导入方法
2019/01/19 Python
pandas 层次化索引的实现方法
2019/07/06 Python
Python matplotlib修改默认字体的操作
2020/03/05 Python
深入分析python 排序
2020/08/24 Python
汇源肾宝广告词
2014/03/20 职场文书
购房意向书
2014/04/01 职场文书
护士求职信范文
2014/05/24 职场文书
2014年大学生党员评议表自我评价
2014/09/20 职场文书
银行竞聘报告范文
2014/11/06 职场文书
谁动了我的奶酪读书笔记
2015/06/30 职场文书
Windows Server 2008配置防火墙策略详解
2022/06/28 Servers