刷新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 相关文章推荐
?繁体转换的class
Oct 09 PHP
php中处理模拟rewrite 效果
Dec 09 PHP
PHP面向对象分析设计的经验原则
Sep 20 PHP
PHP中几个可以提高运行效率的代码写法、技巧分享
Aug 21 PHP
Laravel 5框架学习之子视图和表单复用
Apr 09 PHP
php自动识别文字编码并转换为目标编码的方法
Aug 08 PHP
教你php如何实现验证码
Jan 20 PHP
Yii2中如何使用modal弹窗(基本使用)
May 30 PHP
Yii2 ActiveRecord多表关联及多表关联搜索的实现
Jun 30 PHP
PHP数组相加操作及与array_merge的区别浅析
Nov 26 PHP
PHP实现限制IP访问的方法
Apr 20 PHP
PHP封装的完整分页类示例
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简单获取及判断提交来源的方法
2016/04/22 PHP
PHP+redis实现微博的推模型案例分析
2019/07/10 PHP
一个符号插入器 中用到的js代码
2007/09/04 Javascript
页面只有一个text的时候,回车自动submit的解决方法
2010/08/12 Javascript
JavaScript高级程序设计(第3版)学习笔记7 js函数(上)
2012/10/11 Javascript
extjs表格文本启用选择复制功能具体实现
2013/10/11 Javascript
表单序列化与jq中的serialize使用示例
2014/02/21 Javascript
javascript通过元素id和name直接取得元素的方法
2015/04/28 Javascript
简介JavaScript中的setTime()方法的使用
2015/06/11 Javascript
带有定位当前位置的百度地图前端web api实例代码
2016/06/21 Javascript
JavaScript随机打乱数组顺序之随机洗牌算法
2016/08/02 Javascript
JavaScript分步实现一个出生日期的正则表达式
2018/03/22 Javascript
微信小程序6位或多位验证码密码输入框功能的实现代码
2018/05/29 Javascript
vue项目中定义全局变量、函数的几种方法
2019/11/08 Javascript
Vue实现base64编码图片间的切换功能
2019/12/04 Javascript
使用Python内置的模块与函数进行不同进制的数的转换
2016/03/12 Python
详解Python使用simplejson模块解析JSON的方法
2016/03/24 Python
用matplotlib画等高线图详解
2017/12/14 Python
快速查询Python文档方法分享
2017/12/27 Python
python实现机器学习之元线性回归
2018/09/06 Python
Python3.5运算符操作实例详解
2019/04/25 Python
Python3 A*寻路算法实现方式
2019/12/24 Python
python  ceiling divide 除法向上取整(或小数向上取整)的实例
2019/12/27 Python
ansible动态Inventory主机清单配置遇到的坑
2020/01/19 Python
代码总结Python2 和 Python3 字符串的区别
2020/01/28 Python
Python实现自动打开电脑应用的示例代码
2020/04/17 Python
解决Opencv+Python cv2.imshow闪退问题
2020/04/24 Python
结合CSS3的布局新特征谈谈常见布局方法
2016/01/22 HTML / CSS
Koral官方网站:女性时尚运动服
2019/04/10 全球购物
小学毕业典礼演讲稿
2014/09/09 职场文书
2014基建处领导班子“四风”对照检查材料思想汇报
2014/10/04 职场文书
科长个人四风问题整改措施思想汇报
2014/10/13 职场文书
晚会开幕词
2015/01/28 职场文书
订货会邀请函
2015/01/31 职场文书
2016年中学法制宣传日活动总结
2016/04/01 职场文书
Mysql数据库事务的脏读幻读及不可重复读详解
2022/05/30 MySQL