2019独角兽企业重金招聘Python工程师标准>>>

情景:

最近,公司产品OpenSNS 3.2.0多次被人吐槽说:很卡,加载一个页面都要2~3s。

老板那边很关注这个问题,跑到我这和我说了这个现象,并让我找到原因,解决这个问题。

作为该产品的主要负责人,了解这一状况后,我也非常重视这个问题。

找问题:

作为主程之一,了解这一状况后,我着手寻找产生这一现象的原因。

首先,我随便打开一个简单的页面,发现耗时在1.5s左右。(由于是一个很简单的页面,1.5s是严重不能接受的)

其次,我找到了这个页面的后台程序,并用ThinkPHP自带的方法G()方法测试了后台程序的耗费时间。输出得到的结果是0.0035s,这个结果是可以接受的,于是得出的结论是,问题并非出在后台逻辑程序上面。

那么,问题只能是在之后的$this->display()上面。

作为浸淫ThinkPHP框架3年以上的老猿,我是非常不相信ThinkPHP框架会有这种耗时的问题的。但是,问题总要解决,所以,我还是深入到了display中。

我在display中做了各种时间点输出测试,以期检测出时间都耗费在哪个地方。于是就开始了漫长的4小时测试过程…………(此处省略10000字)

测试过程样例展示:

在TP的View.class.php的fetch中、Controller.class.php中调用fetch的位置display都做了多处时间点输出,其中a是调用Controller.class.php中display之前的时间点,也就是渲染html开始时间。

b是每个位置重置一次,也就是当前时间点。

从上面输出可以看出,fetch中代码在循环执行,甚至是fetch中的前半部分代码循环执行,并且不是外围重复调用,是其他位置调用的(这个设计到TP的机制,我也没看懂是在哪里调用的。有牛人的话,可以解释一个这个过程是什么样的,为什么会重复执行fetch中的部分代码)

从上图中可以看出,在第15~16个之间,时间从0.12s跳到了1.47s,并且没有执行我能跟踪到的代码。。。。。

经过这么多测试,得出的结论:莫名其妙执行了1.35s,不是道耗费在哪了,问题没有解决。。。

测试结果汇报:

经过近4个小时的测试,我把得出的结论汇报给了老板,并提供了证明材料。由于问题没法解决,所以征求了一下他的意见。他给出了一个很好的建议:从这些测试呢,确实看不出什么问题,但是TP的机制,根本不知道里面执行了多少东西,既然是渲染过程的问题,肯定跟渲染模板有关,肯定是模板中有些东西影响了时间,所以可以试着删除模板中某些部分,看看时间会不会明显缩短,如果缩短,说明是那部分模板有问题。

后续找问题:

得到建议后,感觉很棒,于是就去尝试,很快,找到了如下这段代码

删除代码前后,时间相差了1.3s左右,刚好是莫名其妙加上的时间。。。。问题找到,接下来是解决过程了。

如下图是删除前后的耗时:

到这,我就想到了一个故事:

一个农村姑娘误加入一个博士群里。有人提问:一滴水从很高很高的地方自由落体下来,砸到人会不会砸伤? 或砸死 ?群里一下就热闹起来,各种公式,各种假设,各种阻力,重力,加速度的计算,足足讨论了近一个小时 。

这时姑娘默默问了一句:你们没有淋过雨吗 ?群里突然死一般的寂静......

有文化真可怕 ..

启示:知识可以给你带来更多思考方式,但是经验可以让你更快的解决问题.

找问题过程总结:换个思路,问题很好找到。

转载于:https://my.oschina.net/zzlzheng/blog/781518

Web性能瓶颈查找经验总结相关推荐

  1. 《大规模元搜索引擎技》——第1章 绪言1.1 Web上查找信息

    本节书摘来自华章出版社<大规模元搜索引擎技>一书中的第1章,第1节,作者 [美]孟卫一(Weiyi Meng), 纽约州立大学, 宾汉姆顿分校於德(Clement T.Yu),伊利诺伊大学 ...

  2. 《大规模元搜索引擎技(1)》一1.1 Web上查找信息

    本节书摘来自华章出版社<大规模元搜索引擎技(1)>一书中的第1章,第1.1节,作者[美]孟卫一(Weiyi Meng)纽约州立大学宾汉姆顿分校於德(Clement T.Yu)伊利诺伊大学芝 ...

  3. [Web端接入经验分享] 腾讯云即时通信TIM、实时音视频TRTC

    [Web端接入经验分享] 腾讯云即时通信TIM.实时音视频TRTC 即时通信TIM官网地址 即时通信TIM SDK API文档地址 实时音视频TRTC官网地址 实时音视频TRTC SDK API文档地 ...

  4. 一些Web Service的经验

    使用Web服务也有半年多了,虽然时间不长,但还是遇到了不少难题,在这里把我的一些经验拿出来给大家共同分享. 刚开始做Web服务的时候还觉得很轻松,感觉就跟写一般的组件没什么区别,而使用时跟引用普通的程 ...

  5. web站点性能测试经验点滴

    对web站点性能测试,从测试工具的角度,介绍几点经验. 1.在执行客户端并发性能测试的过程中,需要同时监控数据库服务器.web服务器以及网络资源等使用情况,以便对系统的性能做全面评估. 2.录制的脚本 ...

  6. web端测试经验(项目实战经验)

    软件测试相信大家已经有一定的了解了,无非就是找bug 找缺陷 找问题 找这个程序(前端.后端)的不足点 以及不人性化的地方 ,由我们监测并提出有效的建议给项目进行缺陷修复以及优化点.软件测试大体分为W ...

  7. 记一次网易社招前端web开发面试经验

    端午前的最后一个工作日接到了网易金融的前端面试电话,面试官一共跟我聊了一个多小时,然后自我感觉面的不好,好多问题自己没回答出来,本以为面试要挂掉的时候,第二天接到了hr说电话面试通过的通知,让我去现场 ...

  8. web架构设计经验分享

    本人作为一位web工程师,着眼最多之处莫过于 性能与架构,本次幸得参与sd2.0大会,得以与同行广泛交流,于此二方面,有些心得,不敢独享,与众博友分享,本文是这次参会与众同撩交流的心得,有兴趣者可以查 ...

  9. web架构设计经验分享 (转)

    < DOCTYPE html PUBLIC -WCDTD XHTML TransitionalEN httpwwwworgTRxhtmlDTDxhtml-transitionaldtd> ...

最新文章

  1. postgresql 10.1 分区表之 list 分区
  2. Linux下安装mysql(2) 及常见问题解决(CentOS)
  3. 基于 Kafka 与 Debezium 构建实时数据同步
  4. pycharm如何查找程序项目中所有断点?
  5. Ember.js 入门指南——路由切换的终止和回跳
  6. java 将一张图片切割成n个小图片,任意切割一张图片成新图片
  7. 修改器内存写入失败_Redis 事务,以及事务失败的处理
  8. low latency playback、deep buffer playback、compressed offload playback的区别
  9. java 反编译修改软件名字_反编译APK更改文件的文字(修改应用名称)
  10. 王不可以怒而兴师,将不可以愠而致战
  11. python中类的实例化_python类的实例化
  12. Halcon深度学习-目标检测-Rectangle1
  13. 1008. 【SHOI2008】仙人图(II)
  14. P1024 [NOIP2001 提高组] 一元三次方程求解
  15. FPGA简单全加器设计
  16. 桌面最前 desk_使用T3Desk在3D桌面环境中管理应用程序
  17. JavaSE_第十一章:常用类
  18. python使用pyecharts库画地图数据可视化
  19. Python数据类型详解03
  20. Newcoder 110 E.Pocky游戏(状压DP)

热门文章

  1. 人工智能时代,技术人员应该掌握的技能
  2. AI圣经《深度学习》作者斩获2018年图灵奖,100 万奖励!
  3. AI和机器学习对云计算的安全有何影响?
  4. 那些年的UC人力外包扯淡
  5. netty 5.0 源码分析(1)-----ButeBuf
  6. SharePoint 2013 本地创建解决方案
  7. k阶原点距和k阶中心距各是说明什么数字特征
  8. 【Pandas】CSV文件读取时手动指定头部
  9. matlab保存图片时不使用指令设置图像分辨率、尺寸等
  10. tensorflow实践笔记:屏蔽GPU版tensorflow的提示、分布式训练部署时的问题以及tensorboard的查看