刷新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版(4)
Oct 09 PHP
ionCube 一款类似zend的PHP加密/解密工具
Jul 25 PHP
php中判断文件存在是用file_exists还是is_file的整理
Sep 12 PHP
PHP正则表达式之定界符和原子介绍
Oct 05 PHP
php后门URL的防范
Nov 12 PHP
smarty表格换行实例
Dec 15 PHP
php创建、获取cookie及基础要点分析
Jan 26 PHP
CodeIgniter针对lighttpd服务器URL重写的方法
Jun 10 PHP
PHP批量去除BOM头代码分享
Jun 26 PHP
PHP使用mkdir创建多级目录的方法
Dec 22 PHP
php观察者模式应用场景实例详解
Feb 03 PHP
php swoole多进程/多线程用法示例【基于php7nts版】
Aug 12 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/06/23 PHP
PHP中echo,print_r与var_dump区别分析
2014/09/29 PHP
PHP中header函数的用法及其注意事项详解
2016/06/13 PHP
Laravel 5.3 学习笔记之 安装
2016/08/28 PHP
php异步:在php中使用fsockopen curl实现类似异步处理的功能方法
2016/12/10 PHP
Thinkphp5+Redis实现商品秒杀代码实例讲解
2020/12/29 PHP
javascript数组输出的两种方式
2015/01/13 Javascript
JavaScript实现Flash炫光波动特效
2015/05/14 Javascript
JavaScript程序设计之JS调试
2015/12/09 Javascript
jQuery+formdata实现上传进度特效遇到的问题
2016/02/24 Javascript
jQuery中deferred对象使用方法详解
2016/07/14 Javascript
javascript中闭包概念与用法深入理解
2016/12/15 Javascript
jquery实现拖动效果(代码分享)
2017/01/25 Javascript
微信小程序中实现一对多发消息详解及实例代码
2017/02/14 Javascript
详解vue.js的devtools安装
2017/05/26 Javascript
新手必须知的Node.js 4个JavaScript基本概念
2018/09/16 Javascript
vue实现点击隐藏与显示实例分享
2019/02/13 Javascript
gearman的安装启动及python API使用实例
2014/07/08 Python
Python基于twisted实现简单的web服务器
2014/09/29 Python
用Python制作在地图上模拟瘟疫扩散的Gif图
2015/03/31 Python
python模块之paramiko实例代码
2018/01/31 Python
Python实现的HMacMD5加密算法示例
2018/04/03 Python
NumPy 数组使用大全
2019/04/25 Python
Python 类的私有属性和私有方法实例分析
2019/09/29 Python
python中加背景音乐如何操作
2020/07/19 Python
英国户外玩具儿童游乐设备网站:TP Toys(蹦床、攀爬框架、秋千、滑梯和游戏屋)
2018/04/09 全球购物
新西兰床上用品和家居用品购物网站:Adairs
2018/04/27 全球购物
Champs Sports加拿大:北美最大的以商场为基础的专业运动鞋和服装零售商之一
2018/05/01 全球购物
SmartBuyGlasses荷兰:购买太阳镜和眼镜
2020/03/16 全球购物
数据库什么时候应该被重组
2012/11/02 面试题
企业新年寄语
2014/04/04 职场文书
责任书格式范文
2014/07/28 职场文书
2014年销售内勤工作总结
2014/12/01 职场文书
2016年大学生社区服务活动总结
2016/04/06 职场文书
Lakehouse数据湖并发控制陷阱分析
2022/03/31 Oracle
python三子棋游戏
2022/05/04 Python