`

(转)加速PHP的ECHO

    博客分类:
  • PHP
阅读更多
http://www.laruence.com/2011/02/13/1870.html

你也许注意到过, 在PHP中使用ECHO输出大段字符串的时候, 执行时间会明显的长, 也就会有朋友认为PHP的ECHO性能很差.

我在之前的文章中, 已经解释过了原因, 也希望能纠正”PHP的ECHO性能差”的这个误会.

然而之前的文章, 也仅仅是给出了原因, 并没有介绍如何避免这个问题, 在今天公司内的某个产品线(Apache with PHP)发现了一个问题, 有用户在短时间内大量发起下载请求, 导致http连接数和数据库连接数剧增,

而数据库连接数剧增的原因是因为数据库的连接是单列模式, 一直到请求处理结束, 才会释放数据库链接. 这样就有了一个问题, 如果请求处理时间过长, 就会造成大量的数据库链接存在.

而这个用户的网速很慢, 这也就意味着, ECHO的”性能”很差~, 下载时间很长~. 如下图所示:


ECHO执行示意图

这也就引出了今天我要谈的这个问题, 如何让ECHO变快, 让PHP的请求处理过程, 尽快结束…

我们知道, 之所以ECHO慢, 是在等待”写数据”成功返回, 那么一个比较简单的办法, 就是打开输出缓存,

编辑php.ini

output_buffering = 4096 //byte当然, 你也可以在脚本中, 显示的调用ob_start():

ob_start();echo $huge_string;//其他的逻辑.ob_end_flush();这里, 有一个要注意的地方, ob_start将会开辟一块4096大小的buffer, 所以, 如果huge_string大于4096, 将不会起到加速的作用.

现在, 我们的ECHO就会”立即”执行成功, 返回. 因为数据暂时写到了我们的输出缓存当中. 如果buffer足够大, 那么内容会等到脚本的最后, 才一次性发送给客户端(严格来说, 是发送给WebServer).

但这样并不能解决我们今天遇到的这个问题, 因为这些数据到最后, 还是需要PHP去把它们发送给客户端(此时不考虑WebServer的Output buffer), 这个过程不结束, 请求不会关闭, PHP也不会执行DB的析构函数~

那么, 既然做梦, 那就再做大点, 我们可以使用Apache的输出缓存. 也就是改变成如下的执行流程:


加速ECHO示意图

假设, 我们的PHP要输出100K的数据, 那么, 我们Apache的的输出缓存就必须大于100K, 否则当Apache的输出缓存满了以后, 就会真正的发送给客户端, 而这个过程中, 当时执行的ECHO就会阻塞等待.

那么, 如何修改Apache的输出缓存呢? 我们可以在apache的配置文件中, 使用SendBufferSize配置指令:

    SendBufferSize 4096 //注意是byt具体的SendBufferSize的说明, 参看http://httpd.apache.org/docs/2.0/en/mod/mpm_common.html#sendbuffersize

注: 其他的Webserver with php-cgi的模式, 请翻阅相关Webserver的手册, 寻找类似配置.

现在, PHP的ECHO, 将直接把内容交给Apache, PHP在执行完成后, 不再等待内容发送给客户端完成, 而直接退出. 而内容会在PHP处理完成以后, 由Apache发送给客户端. 从而加速了ECHO的执行效率.

废话一句: printf, print, file_put_contents(“php://output”)…等等, 和ECHO都是一样的.

最后要说明, 这样做, 只是把原来ECHO的等待时间, 转移给了Apache, 并没有真正的减少客户端获取到内容的时间. 它只是加速了PHP的处理过程, 提前了PHP的退出时机, 从而能减少PHP对资源的占用时间, 间接增加资源的占用率.

分享到:
评论

相关推荐

    PHP拼音转汉字函数.txt

    ### PHP拼音转汉字的基础知识 #### 1. 汉字与拼音的关系 汉字是中国文化的重要组成部分,而拼音则是汉语的标准发音系统。每个汉字都有其对应的拼音发音,这种对应关系为我们提供了将拼音转换为汉字的可能性。 ####...

    php5.6下的redis扩展(redis/php_redis.dll/php_igbinary.dll)windows环境

    在PHP开发中,Redis是一个非常流行的键值存储系统,常被用作缓存和数据持久化解决方案。在Windows环境下配置PHP以使用Redis扩展,可以显著提升Web应用的性能...现在你可以利用Redis的强大功能来加速你的Web应用程序了。

    php 代码优化指南,给你的php加速

    例如,尽量减少PHP脚本的使用,转而使用静态HTML页面。 #### 31. 缓存策略 合理的缓存策略可以极大地提高网站的响应速度。利用HTTP缓存机制或使用第三方缓存服务如memcached等可以显著减轻服务器压力。 #### 32. ...

    php-crc32:PHP CRC32实现(支持所有crc32多项式和硬件加速)

    php-crc32 通过( CRC32实现,支持所有crc32多项式,以及(如果您安装pecl扩展名)硬件加速版本的CRC32C(Castagnoli)。 通过PHP 7.4支持PHP 5.4。用法require 'vendor/autoload.php' ;use Google \ CRC32 \ CRC32 ...

    PHP程序加速探索之压缩输出gzip

    这里我们关注的是PHP程序的加速,特别是通过使用Apache服务器上的mod_gzip模块实现的压缩输出,以gzip算法来压缩网页内容,减少传输的数据量,从而加快用户浏览速度。 gzip是一种广泛使用的数据压缩算法,尤其适合...

    PHP自学教程 详细教程

    随着PHP的发展,出现了许多优秀的PHP框架,如Laravel、Symfony、Yii等,它们提供了丰富的功能和良好的开发实践,加速Web应用的开发。同时,PHP还有大量扩展,如GD库(图像处理)、PDO(数据库访问)等,丰富了PHP的...

    windows memache+php_memcache.dll(php5.5.12)

    在Windows操作系统中,Memcached是一款高效、轻量级的内存对象缓存系统,常用于加速动态Web应用程序。它通过存储数据在内存中,减少对数据库的直接访问,从而提高了网站的响应速度。本文将详细介绍如何在Windows上...

    laofuzi php laofuzi php laofuzi php laofuzi php

    8. **PHP框架**:像Laravel、Symfony和CodeIgniter等PHP框架,为开发提供了一套结构化的方法,加速项目开发并提高代码质量。 9. **PHP版本迭代**:PHP从最初的PHP/FI到现在的PHP 7.x,每次版本升级都带来了性能提升...

    最强的PHP教程种子

    随着PHP的发展,许多优秀的PHP框架应运而生,如Laravel、Symfony、Yii等,它们提供了更高级别的抽象和便利,加速了Web应用的开发过程。 【PHP的安全实践】 PHP开发者应关注安全问题,如SQL注入、XSS跨站脚本攻击、...

    PHP经典面试题集

    - 加速查询速度。 - **优化查询语句**: - 避免在索引字段上使用函数。 - 比较时使用相同类型的字段。 #### 8. 实现中文字串截取无乱码的方法 - **代码示例**: ```php $str = '我是一串比较长的中'; echo "mb...

    PHP学习文档(很经典)

    3. **输出与输入**:`echo`和`print`用于输出内容,`<?php echo $name; ?>`将打印变量的值。`$_GET`和`$_POST`用于接收HTTP请求中的数据。 ### PHP语言特性 1. **流程控制**:PHP提供了条件语句(如`if...else`)...

    php_memcache-cvs-20090703-5.3-VC6-x86+使用方法链接地址+php5.3.X

    Memcached是一款高性能、分布式内存对象缓存系统,用于加速动态Web应用,通过在内存中存储数据和对象来减少数据库访问次数,提高网站性能。它支持多种编程语言,包括PHP。 **php_memcache扩展** PHP的Memcache扩展...

    php经典面试题及答案

    - 创建索引来加速查询,特别是对where子句中频繁出现的列。 - 表分区可以提高大数据量的查询性能。 - 避免长时间连接,减少资源占用。 - 适当调整MySQL配置以适应服务器资源,如最大连接数、查询缓存大小等。 -...

    php教程 php教程 php教程

    - Laravel、Symfony、Yii等主流PHP框架提供了丰富的功能和良好的开发体验,加速项目开发。 在学习过程中,可以通过阅读“php教程.pdf”获取更详细的信息,同时,"下载必看.htm"可能包含一些下载和使用教程的注意...

    PHP API (PHP初学者教程)

    【PHP API:初学者入门教程】 在Web开发领域,PHP(Hypertext Preprocessor)是一种广泛应用的开源脚本语言,尤其适用于...结合提供的“php.chm”文件,你可以更详细地查阅每个函数的用法和示例,从而加速学习进程。

    PHP(Hypertext Preprocessor).zip

    PHP有许多流行的框架,如Laravel、Symfony、Yii和CodeIgniter,它们提供了更高级别的抽象和工具,加速Web应用的开发。 ### PHP在现代Web开发中的应用 随着技术的发展,PHP在现代Web开发中仍然扮演着重要角色,尤其...

    php学习电子书php 教程

    17. PHP框架:熟悉常见的PHP框架,如Laravel、Symfony、Yii等,它们提供了一套完整的开发规范和工具,加速项目开发。 八、安全性 18. 输入验证:对用户输入进行过滤和验证,防止SQL注入、跨站脚本攻击(XSS)等安全...

    php学习资料,php学习文档,

    11. **PHP框架**:如Laravel、Yii、Symfony等,提供了一套完整的开发结构和工具,加速开发进程。 12. **PHP扩展**:如GD库用于图像处理,curl用于HTTP请求,JSON和XML用于数据交换等。 通过阅读“PHP_chinese.chm...

    10分钟内自己学会PHP

    15. **PHP框架**:学习PHP后,你可以尝试使用一些流行的PHP框架,如Laravel、Symfony或CodeIgniter,它们提供了一套完整的开发结构,加速Web应用的开发。 在"YourselfPHP10"这个压缩包文件中,很可能包含了上述知识...

    PHP项目开发案例

    10. **PHP函数库和框架**:了解PHP的内置函数库,如字符串处理、日期时间、数组操作等,以及使用流行的PHP框架如Laravel、Symfony或CodeIgniter来加速开发进程。 11. **模板引擎**:理解如何使用模板引擎(如Twig或...

Global site tag (gtag.js) - Google Analytics