- 浏览: 7945939 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (2425)
- 软件工程 (75)
- JAVA相关 (662)
- ajax/web相关 (351)
- 数据库相关/oracle (218)
- PHP (147)
- UNIX/LINUX/FREEBSD/solaris (118)
- 音乐探讨 (1)
- 闲话 (11)
- 网络安全等 (21)
- .NET (153)
- ROR和GOG (10)
- [网站分类]4.其他技术区 (181)
- 算法等 (7)
- [随笔分类]SOA (8)
- 收藏区 (71)
- 金融证券 (4)
- [网站分类]5.企业信息化 (3)
- c&c++学习 (1)
- 读书区 (11)
- 其它 (10)
- 收藏夹 (1)
- 设计模式 (1)
- FLEX (14)
- Android (98)
- 软件工程心理学系列 (4)
- HTML5 (6)
- C/C++ (0)
- 数据结构 (0)
- 书评 (3)
- python (17)
- NOSQL (10)
- MYSQL (85)
- java之各类测试 (18)
- nodejs (1)
- JAVA (1)
- neo4j (3)
- VUE (4)
- docker相关 (1)
最新评论
-
xiaobadi:
jacky~~~~~~~~~
推荐两个不错的mybatis GUI生成工具 -
masuweng:
(转)JAVA获得机器码的实现 -
albert0707:
有些扩展名为null
java 7中可以判断文件的contenttype了 -
albert0707:
非常感谢!!!!!!!!!
java 7中可以判断文件的contenttype了 -
zhangle:
https://zhuban.me竹板共享 - 高效便捷的文档 ...
一个不错的网络白板工具
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中使用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对资源的占用时间, 间接增加资源的占用率.
发表评论
-
11个php日常用的小tips 代码片段
2014-01-21 20:34 1936http://www.phpzag.com/11-useful ... -
php中的DirectoryIterator和RecursiveDirectoryIterator
2013-07-27 22:50 3519php中,可以用用DirectoryIterator获取指定目 ... -
uccenter中找回创始人密码
2013-03-11 19:12 1925偶然忘记了uccenter中的创始人密码,一查看,其实找回 ... -
php中通过register_shutdown_function记录fatal error
2013-02-09 23:56 2969今天发现php中,如果要记录fatal error的时候, ... -
php中检查是否ajax请求
2013-01-19 09:53 1472$ajax = false; if(!empty ... -
php中检查某个网页地址是否有效能被打开的最简单方法
2012-10-22 16:18 2096php中检查某个网页地址是否有效能被打开的最简单方法,其实可以 ... -
小结几个php操作office的类库
2012-07-20 19:16 19411 phpexcel 最强大完整的类库了,地址在: ht ... -
介绍几个PHP的开源不错的图片类库
2012-07-14 13:11 2884介绍几个PHP的开源不错的图片类库 1 pchart ... -
php中__sleep和__wakeup
2012-06-22 09:39 4525在php中,__sleep和___wakeup是两个分别自 ... -
PHP 5.4正式版重要新特性
2012-05-25 08:34 1676原文发表在:http://tech.it168.com/a20 ... -
用php实现备份数据库ZIP及导出
2012-04-17 08:59 1851经常在有的PHP开源系统中,看到有备份数据库并导出的方法 ... -
PHP Codeigniter 中的_remap方法简介
2012-04-05 21:06 4589在Codeigniter 中,其实有个容易忽略掉的不错的控 ... -
PHP 5.4中的traits初探
2012-04-01 19:57 5056PHP 5.4中的traits,是新引入的特性,中文还真不知道 ... -
php中的pdo和mysqli的对比选择
2012-03-10 22:25 7154在PHP中,如何选择PDO和mysqli呢?本文做个简单的 ... -
php 5.4中新增加对session状态判断的功能
2012-02-20 12:28 3970在以前的php 版本中,要判断session是否有效,只能 ... -
php curl的几段小应用
2012-02-07 10:10 1830php 的CURL是不错的功能,下面收藏几段不错的片段 1 ... -
php 5.3中的一个type hinting的用法
2012-01-20 11:50 2320今天偶然看php 5.3中的一个特性,叫type hintin ... -
cakephp的分页排序
2012-01-04 10:38 4233cakephp中的分页还是很简单的,下面例子复习下 1 数据 ... -
mongodb+php学习1
2012-01-03 11:51 52351 mongodb启动时,设置启动项 C:\>mon ... -
php中挺好用的strtotime方法
2011-12-20 11:32 1964在PHP中,经常要对日期进行计算,比如要计算一个月前的日期 ...
相关推荐
### PHP拼音转汉字的基础知识 #### 1. 汉字与拼音的关系 汉字是中国文化的重要组成部分,而拼音则是汉语的标准发音系统。每个汉字都有其对应的拼音发音,这种对应关系为我们提供了将拼音转换为汉字的可能性。 ####...
在PHP开发中,Redis是一个非常流行的键值存储系统,常被用作缓存和数据持久化解决方案。在Windows环境下配置PHP以使用Redis扩展,可以显著提升Web应用的性能...现在你可以利用Redis的强大功能来加速你的Web应用程序了。
例如,尽量减少PHP脚本的使用,转而使用静态HTML页面。 #### 31. 缓存策略 合理的缓存策略可以极大地提高网站的响应速度。利用HTTP缓存机制或使用第三方缓存服务如memcached等可以显著减轻服务器压力。 #### 32. ...
php-crc32 通过( CRC32实现,支持所有crc32多项式,以及(如果您安装pecl扩展名)硬件加速版本的CRC32C(Castagnoli)。 通过PHP 7.4支持PHP 5.4。用法require 'vendor/autoload.php' ;use Google \ CRC32 \ CRC32 ...
这里我们关注的是PHP程序的加速,特别是通过使用Apache服务器上的mod_gzip模块实现的压缩输出,以gzip算法来压缩网页内容,减少传输的数据量,从而加快用户浏览速度。 gzip是一种广泛使用的数据压缩算法,尤其适合...
随着PHP的发展,出现了许多优秀的PHP框架,如Laravel、Symfony、Yii等,它们提供了丰富的功能和良好的开发实践,加速Web应用的开发。同时,PHP还有大量扩展,如GD库(图像处理)、PDO(数据库访问)等,丰富了PHP的...
在Windows操作系统中,Memcached是一款高效、轻量级的内存对象缓存系统,常用于加速动态Web应用程序。它通过存储数据在内存中,减少对数据库的直接访问,从而提高了网站的响应速度。本文将详细介绍如何在Windows上...
8. **PHP框架**:像Laravel、Symfony和CodeIgniter等PHP框架,为开发提供了一套结构化的方法,加速项目开发并提高代码质量。 9. **PHP版本迭代**:PHP从最初的PHP/FI到现在的PHP 7.x,每次版本升级都带来了性能提升...
随着PHP的发展,许多优秀的PHP框架应运而生,如Laravel、Symfony、Yii等,它们提供了更高级别的抽象和便利,加速了Web应用的开发过程。 【PHP的安全实践】 PHP开发者应关注安全问题,如SQL注入、XSS跨站脚本攻击、...
- 加速查询速度。 - **优化查询语句**: - 避免在索引字段上使用函数。 - 比较时使用相同类型的字段。 #### 8. 实现中文字串截取无乱码的方法 - **代码示例**: ```php $str = '我是一串比较长的中'; echo "mb...
3. **输出与输入**:`echo`和`print`用于输出内容,`<?php echo $name; ?>`将打印变量的值。`$_GET`和`$_POST`用于接收HTTP请求中的数据。 ### PHP语言特性 1. **流程控制**:PHP提供了条件语句(如`if...else`)...
Memcached是一款高性能、分布式内存对象缓存系统,用于加速动态Web应用,通过在内存中存储数据和对象来减少数据库访问次数,提高网站性能。它支持多种编程语言,包括PHP。 **php_memcache扩展** PHP的Memcache扩展...
- 创建索引来加速查询,特别是对where子句中频繁出现的列。 - 表分区可以提高大数据量的查询性能。 - 避免长时间连接,减少资源占用。 - 适当调整MySQL配置以适应服务器资源,如最大连接数、查询缓存大小等。 -...
- Laravel、Symfony、Yii等主流PHP框架提供了丰富的功能和良好的开发体验,加速项目开发。 在学习过程中,可以通过阅读“php教程.pdf”获取更详细的信息,同时,"下载必看.htm"可能包含一些下载和使用教程的注意...
【PHP API:初学者入门教程】 在Web开发领域,PHP(Hypertext Preprocessor)是一种广泛应用的开源脚本语言,尤其适用于...结合提供的“php.chm”文件,你可以更详细地查阅每个函数的用法和示例,从而加速学习进程。
PHP有许多流行的框架,如Laravel、Symfony、Yii和CodeIgniter,它们提供了更高级别的抽象和工具,加速Web应用的开发。 ### PHP在现代Web开发中的应用 随着技术的发展,PHP在现代Web开发中仍然扮演着重要角色,尤其...
17. PHP框架:熟悉常见的PHP框架,如Laravel、Symfony、Yii等,它们提供了一套完整的开发规范和工具,加速项目开发。 八、安全性 18. 输入验证:对用户输入进行过滤和验证,防止SQL注入、跨站脚本攻击(XSS)等安全...
11. **PHP框架**:如Laravel、Yii、Symfony等,提供了一套完整的开发结构和工具,加速开发进程。 12. **PHP扩展**:如GD库用于图像处理,curl用于HTTP请求,JSON和XML用于数据交换等。 通过阅读“PHP_chinese.chm...
15. **PHP框架**:学习PHP后,你可以尝试使用一些流行的PHP框架,如Laravel、Symfony或CodeIgniter,它们提供了一套完整的开发结构,加速Web应用的开发。 在"YourselfPHP10"这个压缩包文件中,很可能包含了上述知识...
10. **PHP函数库和框架**:了解PHP的内置函数库,如字符串处理、日期时间、数组操作等,以及使用流行的PHP框架如Laravel、Symfony或CodeIgniter来加速开发进程。 11. **模板引擎**:理解如何使用模板引擎(如Twig或...