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

apache + php

使用smarty模板输出内容

页面最终输出内容较大,80k+

页面执行时间在500ms以上

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

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

//对大字节字符串进行分割保存到数组中,然后循环输出

function echoBigChar($string,$bufferSize=8192){

$splitString=str_split($string,$bufferSize);

foreach($splitString as $chunk){

echo $chunk;

}

}

但是上面的处方不太对症,整个echobig的输出时间仍然在400毫秒左右,没有太大改善。考虑到是输出大量内容到客户端比较慢,于是检查了apache的配置,原来还没打开deflate进行压缩,遂启用之。再次使用xhprof进行检查,这条echo的输出时间降低到5ms左右。400ms到5ms,一个配置问题会产生80倍的差距,还真是省老钱了。

这个故事告诉我们,开启压缩输出真的很重要。

echo输出大花括号 php_PHP的echo输出内容过多会很慢相关推荐

  1. PHP语言的输出命令是,PHP echo、print、print_r、var_dump输出语句

    文章目录 前言一.PHP输出语句echo二.PHP输出语句print三.PHP输出语句print_r四.PHP输出语句var_dump五.总结 前言 PHP的输出语句常见的有echo,print,pr ...

  2. linux echo 怎么输出换行符到文件?(echo -e 用于打印带转义字符的输出)

    输出一个换行符到文件arnold_err.log echo -e >> arnold_err.log 输出两个换行符到文件arnold_err.log echo -e "\n&q ...

  3. python str format 输出花括号本身

    两个左花括号输出左花括号本身,两个右花括号输出右花括号本身. >>> print("{{{0}".format(0)) {0 >>> print ...

  4. php利用数组循环输出,php数组遍历,php循环输出数组

    php数组遍历,php循环输出数组,PHP数组循环遍历的四种方式 [(重点)数组循环遍历的四种方式] 1,https://www.cnblogs.com/waj6511988/p/6927208.ht ...

  5. linux java echo 3,Linux常用命令13 - echo

    echo 命令是 Linux 中最基本和最常用的命令之一. 传递给 echo 的参数被打印到标准输出中. echo 通常用于 shell 脚本中,用于显示消息或输出其他命令的结果. echo 命令 e ...

  6. linux echo服务,在Linux中禁用echo服务

    echo是用于将文字打印到stdout的命令.通常这只是意味着在您提到时写入终端: $ echo 'Hello world' Hello world 有关此命令的更多信息,您可以阅读联机帮助页.这是我 ...

  7. java输出10000以内的素数_输出10000以内质数

    输出10000以内质数 class Test{ //输出特定数以内的所有质数方法1 public function prime1($num = 100){ for($i=1;$i<=$num;$ ...

  8. PHP输出结构类型变量输出,1.PHP基本语法__输出语句、变量、数据类型

    1. PHP中所有的内置的函数.类和关键词对大小写不敏感 注意:虽然PHP对于自己本身定义的函数.类和关键字大小写不敏感但是对于开发人员定义的"变量名称"却是非常敏感的 输出结果为 ...

  9. php缓存输出压缩,PHP_控制PHP的输出:缓存并压缩动态页面,mod_gzip是一个Apache模块,其功 - phpStudy...

    控制PHP的输出:缓存并压缩动态页面 mod_gzip是一个Apache模块,其功能是使用Gzip压缩静态的html页面,遵循IETF标准的浏览器可以接受gzip编码(IE, Netscape等).m ...

  10. C语言echo文件,echo是什么?shell的echo

    echo echo 是一个非常简单.直接的 Linux 命令: * 将 argument 送出至标准输出(STDOUT),通常就是在监视器(monitor)上输出. 目录 [TOC] 查看echo帮助 ...

最新文章

  1. linux安装apache下载文件,Linux安装apache详解
  2. VTK:IO之ImageReader2Factory
  3. php根据指定字段去重,php二维数组根据某个字段去重
  4. velocityjs 动画库 比jquery默认的animate强
  5. 《学习R》笔记:科学计算器、检查变量和工作区、向量、矩阵和数组、列表和数据框...
  6. pycharm项目目录结构_「Actix-web项目」-项目整体目录结构
  7. 一步一步带你安装Node.js并创建第一个Vue项目
  8. 七日Python之路--第十一天
  9. python重写和装饰器_Python | 老司机教你 5 分钟读懂 Python 装饰器
  10. 引擎开发五: Assimp库及使用
  11. 使用JS监听键盘按下事件
  12. HDU - 6438 Buy and Resell (贪心 + 优先队列)
  13. java兔子繁殖总数_Java 兔子繁殖迭代问题
  14. 搜狗在任务栏的“天猫618炒鸡红包”如何关闭
  15. 学tlc和JAVA,#Java学习之路——第一部分总结
  16. 大数据hbase nosql数据库
  17. 计算机教案三年级冀教版,冀教版信息技术三年级教案
  18. 小吴的《机器学习 周志华》学习笔记 第一章 绪论
  19. 西门子PLC 发那科机器人案例 西门子PLC触摸屏以及三菱伺服应用
  20. 一群前高盛集团员工仍认为可以用加密货币拯救华尔街

热门文章

  1. 同一台电脑管理多个`SSH KEY`
  2. HTML 空格转义符的用法
  3. Grafana Panel配置数据源
  4. IE11 0x2ee4 bug 以及类似问题解决方法
  5. Proj.4库的编译及使用
  6. configparser读取含有中文的配置(Windows)
  7. 使用静态库的一些问题 -all_load
  8. 编译内核是几个常用的命令备忘
  9. bzoj 2151 种树 —— 思路+链表
  10. Python练习5-正则表达式