刷新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新手上路(四)
Oct 09 PHP
php 缓存函数代码
Aug 27 PHP
PHP运行模式的深入理解
Jun 03 PHP
PHP文件大小格式化函数合集
Mar 10 PHP
php获取文件类型和文件信息的方法
Jul 10 PHP
PHP动态地创建属性和方法, 对象的复制, 对象的比较,加载指定的文件,自动加载类文件,命名空间
May 06 PHP
php+MySQL实现登录时验证登录名和密码是否正确
May 10 PHP
PHP 匿名函数与注意事项详细介绍
Nov 26 PHP
thinkPHP实现多字段模糊匹配查询的方法
Dec 01 PHP
PHP中rename()函数的妙用讲解
Feb 28 PHP
Laravel解决nesting level错误和隐藏index.php的问题
Oct 12 PHP
Laravel ORM 数据model操作教程
Oct 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生成的html meta和link标记在body标签里 顶部有个空行
2010/05/18 PHP
一组PHP加密解密函数分享
2014/06/05 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(四)
2014/06/23 PHP
php用ini_get获取php.ini里变量值的方法
2015/03/04 PHP
Yii rules常用规则示例
2016/03/15 PHP
一个用js实现的页内搜索代码
2007/05/23 Javascript
php+js实现倒计时功能
2014/06/02 Javascript
json传值以及ajax接收详解
2016/05/24 Javascript
angular ngClick阻止冒泡使用默认行为的方法
2016/11/03 Javascript
微信小程序  checkbox组件详解及简单实例
2017/01/10 Javascript
JS继承与闭包及JS实现继承的三种方式
2017/10/15 Javascript
Vue-cli项目获取本地json文件数据的实例
2018/03/07 Javascript
mint-ui在vue中的使用示例
2018/04/05 Javascript
详解如何构建Promise队列实现异步函数顺序执行
2018/10/23 Javascript
vue 右键菜单插件 简单、可扩展、样式自定义的右键菜单
2018/11/29 Javascript
通过说明与示例了解js五种设计模式
2019/06/17 Javascript
Vue自定义指令结合阿里云OSS优化图片的实现方法
2019/11/12 Javascript
JS实现压缩上传图片base64长度功能
2019/12/03 Javascript
微信小程序实现轨迹回放的示例代码
2019/12/13 Javascript
Vue 嵌套路由使用总结(推荐)
2020/01/13 Javascript
[51:27]LGD vs Liquid 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/19 DOTA
python使用wxPython打开并播放wav文件的方法
2015/04/24 Python
python使用in操作符时元组和数组的区别分析
2015/05/19 Python
Python使用cookielib模块操作cookie的实例教程
2016/07/12 Python
Python利用字典将两个通讯录文本合并为一个文本实例
2018/01/16 Python
numpy中的meshgrid函数的使用
2019/07/31 Python
给Python学习者的文件读写指南(含基础与进阶)
2020/01/29 Python
python飞机大战游戏实例讲解
2020/12/04 Python
html5定制表单_动力节点Java学院整理
2017/07/11 HTML / CSS
美国领先的宠物用品和宠物食品零售商:Petco
2020/10/28 全球购物
通信工程专业毕业生推荐信
2013/12/25 职场文书
中华魂放飞梦想演讲稿
2014/08/26 职场文书
优秀团支部申报材料
2014/12/26 职场文书
中小学生安全教育观后感
2015/06/17 职场文书
解决Nginx 配置 proxy_pass 后 返回404问题
2021/03/31 Servers
Python中OpenCV实现简单车牌字符切割
2021/06/11 Python