IT技术博客大学习 共学习 共进步

php的echo为什么这么慢

某人的栖息地 2009-12-16 08:56:47 浏览 5,222 次

    作为一个行走江湖多年的老中医,今天受命去解决一例前端页面展现缓慢的问题。问题页的情况如下:

以下是引用片段:
apache + php 
使用smarty模板输出内容 
页面最终输出内容较大,80k+ 
页面执行时间在500ms以上 

    祭出法宝xhprof对问题页面做了细致检查,发现页面的瓶颈竟然是模板(编译后的)中的一个echo语句,这个echo语句输出的字符串比较大,大概是50k+字节,花费时间为400多毫秒,占整个页面执行时间的80%。这样的echo输出在站点首页中其实是很常见的事情,没有数据库操作,按道理执行时间不应该这么长。

    于是猛力使用搜索技能,最终在php手册的echo部分找到了一些蛛丝马迹,早在2003年就有前辈认为通过echo输出大字符串到客户端会引起服务器的性能问题,据我测试,在这个场景下使用print其实也是一样的慢。建议的解决办法是把字符串切割成更小的字符串输出,展现速度会有提升,输出函数如下:

以下是代码片段:
function echobig($string, $bufferSize = 8192) {
    $splitString = str_split($string, $bufferSize);
    foreach($splitString as $chunk)
        echo $chunk;
}
?> 

    但是上面的处方不太对症,整个echobig的输出时间仍然在400毫秒左右,没有太大改善。

    考虑到是输出大量内容到客户端比较慢,于是检查了apache的配置,原来还没打开deflate进行压缩,遂启用之。再次使用xhprof进行检查,这条echo的输出时间降低到5ms左右。

    400ms到5ms,一个配置问题会产生80倍的差距,还真是省老钱了。这个故事告诉我们,压缩输出真的很重要。

建议继续学习

  1. windows下压缩包在linux解压乱码的解决办法 (阅读 5,303)
  2. 使用系统命令实现文件的压缩与加密 (阅读 5,184)
  3. 启用memcached压缩注意事项 (阅读 5,123)
  4. Android设计中的.9.png (阅读 4,903)
  5. MySQL从压缩文件恢复数据 (阅读 4,682)
  6. 前端性能优化之Html压缩 (阅读 4,643)
  7. 一个echo引起的进程崩溃 (阅读 4,563)
  8. 项目中对模板和js,css文件进行压缩的处理类 (阅读 4,523)
  9. 开源压缩算法Zopfli介绍 (阅读 4,463)
  10. mod_gzip:Apache的HTTP压缩优化 (阅读 4,382)