刷新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 相关文章推荐
回答PHPCHINA上的几个问题:URL映射
Feb 14 PHP
PHP5.2中date()函数显示时间与北京时间相差8小时的解决办法
May 28 PHP
Ajax+PHP 边学边练之四 表单
Nov 27 PHP
php 文件上传实例代码
Apr 19 PHP
PHP实现把MySQL数据库导出为.sql文件实例(仿PHPMyadmin导出功能)
May 10 PHP
微信公众平台接口开发入门示例
Dec 24 PHP
php+mysqli批量查询多张表数据的方法
Jan 29 PHP
PHP+Javascript实现在线拍照功能实例
Jul 18 PHP
PHP多线程模拟实现秒杀抢单
Feb 07 PHP
php递归函数怎么用才有效
Feb 24 PHP
PHP+MySQL实现消息队列的方法分析
May 09 PHP
php 将json格式数据转换成数组的方法
Aug 21 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查看请求头信息获取远程图片大小的方法分享
2013/12/25 PHP
php遍历解析xml字符串的方法
2016/05/05 PHP
PHP输出图像imagegif、imagejpeg与imagepng函数用法分析
2016/11/14 PHP
PHP mongodb操作类定义与用法示例【适合mongodb2.x和mongodb3.x】
2018/06/16 PHP
laravel7学习之无限级分类的最新实现方法
2020/09/30 PHP
javascript+xml实现简单图片轮换(只支持IE)
2012/12/23 Javascript
js实现省市联动效果的简单实例
2014/02/10 Javascript
JS、jquery实现几分钟前、几小时前、几天前等时间差显示效果的代码实例分享
2014/04/11 Javascript
JavaScript实现找出数组中最长的连续数字序列
2014/09/03 Javascript
node.js中的socket.io的广播消息
2014/12/15 Javascript
JavaScript显示当前文档最后修改日期的方法
2015/03/19 Javascript
javascript实现状态栏文字首尾相接循环滚动的方法
2015/07/22 Javascript
JavaScript实现添加及删除事件的方法小结
2015/08/04 Javascript
基于Jquery插件实现跨域异步上传文件功能
2016/04/26 Javascript
Javascript点击其他任意地方隐藏关闭DIV实例
2016/06/21 Javascript
JSONP跨域请求
2017/03/02 Javascript
ionic环境配置及问题详解
2017/06/27 Javascript
vue单页面实现当前页面刷新或跳转时提示保存
2018/11/02 Javascript
react MPA 多页配置详解
2019/10/18 Javascript
Vue动态加载图片在跨域时无法显示的问题及解决方法
2020/03/10 Javascript
vue切换菜单取消未完成接口请求的案例
2020/11/13 Javascript
python中dir函数用法分析
2015/04/17 Python
django用户登录和注销的实现方法
2018/07/16 Python
详解Python学习之安装pandas
2019/04/16 Python
学习python分支结构
2019/05/17 Python
Python的条件锁与事件共享详解
2019/09/12 Python
flask框架渲染Jinja模板与传入模板变量操作详解
2020/01/25 Python
python 实现的IP 存活扫描脚本
2020/12/10 Python
英国电器零售商:PRC Direct
2018/06/21 全球购物
乌克兰电子和家用电器商店:Foxtrot
2019/07/23 全球购物
如何向接受结构参数的函数传入常数值
2016/02/17 面试题
网络管理专业求职信
2014/03/15 职场文书
授权委托书格式模板
2014/04/03 职场文书
船舶工程技术专业求职信
2014/08/07 职场文书
2014年消防工作总结
2014/11/21 职场文书
工作简历的自我评价
2019/05/16 职场文书