刷新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 相关文章推荐
一个用php3编写的简单计数器
Oct 09 PHP
PHP学习笔记之一
Jan 17 PHP
PHP及Zend Engine的线程安全模型分析
Nov 10 PHP
php object转数组示例
Jan 15 PHP
php中字符集转换iconv函数使用总结
Oct 11 PHP
PHP微信红包API接口
Dec 05 PHP
Zend Framework教程之动作的基类Zend_Controller_Action详解
Mar 07 PHP
ThinkPHP中Common/common.php文件常用函数功能分析
May 20 PHP
PHP仿微信发红包领红包效果
Oct 30 PHP
php简单构造json多维数组的方法示例
Jun 08 PHP
php利用云片网实现短信验证码功能的示例代码
Nov 18 PHP
laravel 解决路由除了根目录其他都404的问题
Oct 18 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常用ODBC函数集(详细)
2013/06/24 PHP
解决phpcms更换javascript的幻灯片代码调用图片问题
2014/12/26 PHP
php获取用户浏览器版本的方法
2015/01/03 PHP
javascript实现面向对象类的功能书写技巧
2010/03/07 Javascript
Js 获取Gridview选中行的内容操作步骤
2013/02/05 Javascript
js二级地域选择的实现方法
2013/06/17 Javascript
关闭页面时window.location事件未执行的原因分析及解决方案
2014/09/01 Javascript
JavaScript下的时间格式处理函数Date.prototype.format
2016/01/27 Javascript
Angularjs实现多个页面共享数据的方式
2016/03/29 Javascript
详解用Node.js实现Restful风格webservice
2017/09/29 Javascript
webpack 插件html-webpack-plugin的具体使用
2018/04/09 Javascript
Vue 按键修饰符处理事件的方法
2018/05/04 Javascript
微信小程序rich-text富文本用法实例分析
2019/05/20 Javascript
vue项目使用高德地图的定位及关键字搜索功能的实例代码(踩坑经验)
2020/03/07 Javascript
JS数据类型分类及常用判断方法
2020/11/19 Javascript
[03:48]2014DOTA2 TI专访71DK夺冠不靠小组赛高排名
2014/07/11 DOTA
[55:44]完美世界DOTA2联赛决赛 FTD vs Phoenix 第二场 11.08
2020/11/11 DOTA
在Linux系统上安装Python的Scrapy框架的教程
2015/06/11 Python
Django Admin 实现外键过滤的方法
2017/09/29 Python
python2.7+selenium2实现淘宝滑块自动认证功能
2018/02/24 Python
关于不懂Chromedriver如何配置环境变量问题解决方法
2019/06/12 Python
python 使用pygame工具包实现贪吃蛇游戏(多彩版)
2019/10/30 Python
使用python实现时间序列白噪声检验方式
2020/06/03 Python
Python过滤序列元素的方法
2020/07/31 Python
记一次django内存异常排查及解决方法
2020/08/07 Python
html5 分层屏幕适配的方法
2018/03/16 HTML / CSS
Mountain Warehouse波兰官方网站:英国户外品牌
2019/08/29 全球购物
白俄罗斯女装和针织品网上商店:Presli.by
2019/10/13 全球购物
函数只定义了一次, 调用了一次, 但编译器提示非法重定义了-什么问题?
2014/10/03 面试题
将一个数的从第5位开始的7个数取出,其余位置0
2016/05/26 面试题
const和static readonly区别
2013/05/20 面试题
副厂长岗位职责
2014/02/02 职场文书
cf战队收人广告词
2014/03/14 职场文书
保健品市场营销方案
2014/03/31 职场文书
拆迁委托协议书
2014/09/15 职场文书
学习党章的体会
2014/11/07 职场文书