刷新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导出oracle库的php代码
Apr 20 PHP
php strlen mb_strlen计算中英文混排字符串长度
Jul 10 PHP
Apache环境下PHP利用HTTP缓存协议原理解析及应用分析
Feb 16 PHP
比较全面的PHP数组的使用方法小结
Sep 23 PHP
php 大数据量及海量数据处理算法总结
May 07 PHP
PHP 通过Socket收发十六进制数据的实现代码
Aug 16 PHP
初识通用数据库操作类――前端easyui-datagrid,form(php)
Jul 31 PHP
PHP 根据key 给二维数组分组
Dec 09 PHP
PHP第三方登录―QQ登录实现方法
Feb 06 PHP
PHP常用操作类之通信数据封装类的实现
Jul 16 PHP
PHP+JS实现的实时搜索提示功能
Mar 13 PHP
open_basedir restriction in effect. 原因与解决方法
Mar 14 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 preg_match_all结合str_replace替换内容中所有img
2008/10/11 PHP
深入解析PHP中逗号与点号的区别
2013/08/05 PHP
CodeIgniter与PHP5.6的兼容问题
2015/07/16 PHP
laravel5.5安装jwt-auth 生成token令牌的示例
2019/10/24 PHP
THINKPHP5分页数据对象处理过程解析
2020/10/28 PHP
jQuery each()小议
2010/03/18 Javascript
用js实现判断当前网址的来路如果不是指定的来路就跳转到指定页面
2011/05/02 Javascript
js获取当前月的第一天和最后一天的小例子
2013/11/18 Javascript
ExtJS4给Combobox设置列表中的默认值示例
2014/05/02 Javascript
js在指定位置增加节点函数insertBefore()用法实例
2015/01/12 Javascript
JavaScript中指定函数名称的相关方法
2015/06/04 Javascript
ES6中非常实用的新特性介绍
2016/03/10 Javascript
AngularJs Understanding the Controller Component
2016/09/02 Javascript
jQuery-mobile事件监听与用法详解
2016/11/23 Javascript
jquery实现弹窗功能(窗口居中显示)
2017/02/27 Javascript
详解angularjs跨页面传参遇到的一些问题
2018/11/01 Javascript
快速了解Node中的Stream流是什么
2019/02/13 Javascript
浅谈Vue3 Composition API如何替换Vue Mixins
2020/04/29 Javascript
小程序富文本提取图片可放大缩小
2020/05/26 Javascript
Python Web框架Flask下网站开发入门实例
2015/02/08 Python
Python中使用多进程来实现并行处理的方法小结
2017/08/09 Python
python进程管理工具supervisor的安装与使用教程
2017/09/05 Python
一个简单的python爬虫程序 爬取豆瓣热度Top100以内的电影信息
2018/04/17 Python
对TensorFlow中的variables_to_restore函数详解
2018/07/30 Python
用Python实现将一张图片分成9宫格的示例
2019/07/05 Python
40行Python代码实现天气预报和每日鸡汤推送功能
2020/02/27 Python
解决canvas转base64/jpeg时透明区域变成黑色背景的方法
2016/10/23 HTML / CSS
美国知名女性服饰品牌:New York & Company
2017/03/23 全球购物
电大自我鉴定
2013/10/27 职场文书
代办委托书怎样写
2014/04/08 职场文书
《歌唱二小放牛郎》教学反思
2014/04/19 职场文书
优秀本科毕业生自荐信
2014/07/04 职场文书
2014年党员个人剖析材料
2014/10/08 职场文书
谢师宴学生答谢词
2015/09/30 职场文书
如何使用Tkinter进行窗口的管理与设置
2021/06/30 Python
Python爬虫入门案例之爬取去哪儿旅游景点攻略以及可视化分析
2021/10/16 Python