PHP中我们最常用的输出内容函数应该是echo了,但在我们使用的同时应该注意一点就是,使用echo输出大量内容会影响网页速度。可能很多朋友之前都没发现过这个问题,包括我之前也没遇到这个问题。今天帮朋友处理一个前台页面缓慢的问题时才发现这个问题,下面我来详细的介绍下其原因及解决方法,希望对您有所帮助。
首先介绍下这个网站的基本信息:
apache + php
使用smarty模板输出内容
页面最终输出内容较大,80k+
页面执行时间在500ms以上
普普通通的一个页面浏览为什么会如此缓慢呢?我们可以通过xhprof工具对这个页面进行检查。关于xhprof这个工具的介绍及安装方法在此就不详细介绍了,大家可以上网了解相关资料。 通过这个工具检查发现瓶颈竟然是模板(编译后的)中的一个echo语句,这个echo语句输出的内容比较多,大概是50k+字节,花费时间为400多毫秒,占整个页面执行时间的80%。这样的echo语句是很常见的,也没有调用数据库操作,那么为什么执行时间会这么长呢?
通过网上搜索相关资料发现,PHP手册中介绍了echo输出大字符串到客户端会引起服务器的性能问题。其实不光是echo,使用print其实也是一样的慢。建议的解决办法是把字符串切割成更小的字符串输出,展现速度会有提升,输出函数如下:
//对大字节字符串进行分割保存到数组中,然后循环输出
通过使用上述函数发现,echo的输出时间仍在400毫秒左右,没有明显效果。这个又是什么原因呢?既然程序已经没问题了,考虑到是输出大量内容到客户端比较慢,于是检查了apache的配置,原来还没打开deflate进行压缩,开启之后再次使用xhprof进行检查,你肯定会大吃一惊,这条echo的输出时间降低到5ms左右。400ms到5ms,一个配置问题居然会产生80倍的差距,真是不敢让人相信。 最终这个问题被完美的解决了,希望朋友们在以后的开发中一定要注意一下这个问题!
© Copyright 2005~2025 珠海超凡科技有限公司 All rights reserved 粤ICP备11027936号 粤公网安备:44040202000848号