刷新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代码
Jul 14 PHP
Windows下部署Apache+PHP+MySQL运行环境实战
Aug 31 PHP
PHP-Java-Bridge使用笔记
Sep 22 PHP
thinkphp模板输出技巧汇总
Nov 24 PHP
PHP遍历XML文档所有节点的方法
Mar 12 PHP
详解WordPress中提醒安装插件以及隐藏插件的功能实现
Dec 25 PHP
php简单解析mysqli查询结果的方法(2种方法)
Jun 29 PHP
php实现学生管理系统
Mar 21 PHP
PHP微信公众号开发之微信红包实现方法分析
Jul 14 PHP
Windows平台实现PHP连接SQL Server2008的方法
Jul 26 PHP
laravel框架实现去掉URL中index.php的方法
Oct 12 PHP
让whoops帮我们告别ThinkPHP6的异常页面
Mar 02 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常用开发函数解析之数组篇[未完结]
2012/07/30 PHP
PHP Oauth授权和本地加密实现方法
2016/08/12 PHP
PHP使用反向Ajax技术实现在线客服系统详解
2019/07/01 PHP
javascript 广告后加载,加载完页面再加载广告
2010/11/25 Javascript
火狐textarea输入法的bug的触发及解决
2013/07/24 Javascript
JavaScript的Ext JS框架中的GridPanel组件使用指南
2016/05/21 Javascript
JavaScript简单验证表单空值及邮箱格式的方法
2017/01/20 Javascript
基于JavaScript实现无限加载瀑布流
2017/07/21 Javascript
Vue.js 实现微信公众号菜单编辑器功能(一)
2018/05/08 Javascript
jQuery+Datatables实现表格批量删除功能【推荐】
2018/10/24 jQuery
使用 webpack 插件自动生成 vue 路由文件的方法
2019/08/20 Javascript
vue遍历对象中的数组取值示例
2019/11/07 Javascript
python实现爬虫下载漫画示例
2014/02/16 Python
用python 制作图片转pdf工具
2015/01/30 Python
浅谈python新手中常见的疑惑及解答
2016/06/14 Python
基于python中的TCP及UDP(详解)
2017/11/06 Python
在Python中将函数作为另一个函数的参数传入并调用的方法
2019/01/22 Python
用Python识别人脸,人种等各种信息
2019/07/15 Python
Pandas数据离散化原理及实例解析
2019/11/16 Python
python实现密码验证合格程序的思路详解
2020/06/01 Python
python读取xml文件方法解析
2020/08/04 Python
python 用Matplotlib作图中有多个Y轴
2020/11/28 Python
CSS3的transition和animation的用法实例介绍
2014/08/20 HTML / CSS
使用CSS3设计地图上的雷达定位提示效果
2016/04/05 HTML / CSS
西班牙语在线票务市场:SuperBoletería
2019/06/10 全球购物
TUMI香港官网:国际领先的行李箱、背囊品牌
2021/03/01 全球购物
JAVA高级程序员面试题
2013/09/06 面试题
团员个人的自我评价
2013/12/02 职场文书
高二地理教学反思
2014/01/24 职场文书
伊琍体标语
2014/06/25 职场文书
校园主题婚礼活动策划方案
2014/09/15 职场文书
入团介绍人意见范文
2015/06/04 职场文书
2015年高三年级组工作总结
2015/07/21 职场文书
2015国庆节66周年标语
2015/07/30 职场文书
退休教师欢送会致辞
2015/07/31 职场文书
微软PC Health Check电脑健康状况检查应用下载(Win11配置检测工具)
2021/06/26 数码科技