记一次公司产品「负」优化
初来乍到新公司不久,啃了几天文档,也翻了一下部分代码,就发现公司现有产品有点问题,是什么问题呢?
这年头还是用 Apache + PHP 5.4 我就不说什么了,关键是所以静态资源不在网站根目录也就算了,竟然没有配置别名什么的,然后把所有请求重定向到
index.php
,然后index.php
去代理读取实际的静态文件路径,并发送给浏览器。看我这个当时的我就
什么鬼嘛,静态资源都不直接走 Apache ,反而要经过 PHP 二次处理,当 Apache 是病猫吗!
搞事
按我这暴脾气,受不了,要研究一下怎么搞了嘛。很快我就想到了几种方案
方案一:用软链接挂载实际目录到网站跟目录
然后我就挑了登录页来测试,挑了一大一小两个文件来对比。连续请求 10 次然后取个平均值, 2.3 KB 的 login.html 速度约提升 50%,1.7 MB 的 bg.png 约提升 25%。
方案二:使用别名
很快,就用 netstat 和 ps 找到了 Apache 使用的配置文件,配置了 AliasMatch
,然后打算重启一下 systemctl restart httpd
无服务,好吧,自定义安装的,没有就算了, 用 /.../apache/bin/apachectl graceful
吧,报 line 80 xxx/httpd 路径不对,怎么可以这么坑我的呢!打开 apachectl
一看,这破目录确实不对,/.../apache/bin/httpd graceful
然后输出一句 ServerName
有个错误,虽然好久不用 Apache ,怎么可以这么坑我呢,迷迷糊糊又弄了一会,发现这个错误并不影响重启,此时已经下午了。
别我为什么不用
Alias
...
再测一下
连续请求 10 次然后取个平均值, 2.3 KB 的 login.html 速度约提升 52%,1.7 MB 的 bg.png 约提升 28%。卧槽好像有点不科学。
方案三:使用 Nginx 直接处理
2.3 KB 的 login.html 速度约提升 60%,1.7 MB 的 bg.png 约提升 35%,速度杠杠的
前面两种对项目影响比较低,改架构影响就挺大的了,改是不可能改的。
碰巧
项目经理小X找我了解一下对项目熟悉情况,balabala… 然后问我有什么问题没,我说,为什么竟然资源要经过 index.php
二次处理,他说不清楚,这个遗留问题了。我就提了一下我这边的发现和解决方案,然后叫我整理一下发给他看一下发给他。过了一会他叫我跟他过去一下架构师那边,当时我就感觉。。。
然而架构师看了说:还行,听说 nginx 处理静态资源确实比 Apache 好一些,但是要修改影响较大,之前也找实习生 去调查一下,他说两个差不多,当时就没管那么多了(内心:这个实习生可靠?)。只不过呀这个是对单个资源统计,不太能体现对整个页面提升了多少,要整个页面提升才有意义呀,能不能统计一下对整个页面加载的影响?
我:好的,回去我再测试一下。
继续
由于之前优化过,我就先测一下优化后的首页吧,刷新查看 Network
的 Load:1.79s,2.01s,2.12s… 十次平均在2s,感觉还行吧。
此时他们在群了讨论吃粤菜还是烧烤,导师费什么的 200 一个新人,卧槽,还有缴费 200 一人?5 个新人就 1000 ,管不了那么多了,取消优化继续测一下吧。
取消了所有优化,重启 Apache 刷新。Load:1.55s。不对啊,这可能是偶然事件
再刷新,Load:1.76s
我不信,再来 Load:1.60s
不科学啊,重启浏览器在来,刷了二十来次,尼玛,平均 Load:1.5s,优化后是 -25%???难不成我还搞成负优化了?这让我怎么交代?
还有一分钟就6点了,简直要哭了。算了,要不吃个饭回来再看吧,说不定 chrome 就开窍了呢
刚到二楼食堂,心情不是很好,看看菜也没什么胃口的,随便吃点吧,点菜,付钱,刚刚端到餐桌坐下,一个电话过来,
小X:你在哪里?
我:在食堂
小X:今晚聚餐呀,快回来,我们在 5 楼等你
我:。。。好的
内心:我 TM 这 5 块钱的快餐怎么办?还没开吃呢!先吃两口吧,傻了吧,吃饱了怎么吃 1000 块的大餐!
然后我就端到了餐具回收处,刚才打菜的阿姨眼睁睁看我:这孩子傻了吧,刚打的菜还没吃就扔了。对不起了,我也想过打包啊,可是打包也没人吃。
刚爬楼梯到 4 楼,电话又响起
我:喂?
小X:额,那个我们下一楼了,在一楼等你吧,你也下来一楼吧
我:好的
内心一万一个草泥马奔腾而过啊
再次走楼梯下去。。。
最后
怎么说 PHP 二次处理不可能比 Apache 直接读静态资源的快啊,优化后是 -25% ???严重怀疑浏览器有问题!
本作品采用《CC 协议》,转载必须注明作者和本文链接
不敲代码的架构师吧?让实习生去调查?
@Nick 嘴皮架构师,哈哈哈
想知道后续。。。哈哈。。。
不过我遇到过一个问题,一个黑名单,之前就是读整个文件然后查找字符串,然后以为我可以进行一番骚操作。。。格式化,预加载啥的。。。然后发现 20w 以内的,字符串查找居然是最快的。。。
很好玩的文章风格~~赞👍
就觉得你写的很有趣,值得一个赞
写得很刺激,跟吃鸡一样。
从以上内容总结出两条:
另外,给出一点排查思路:
最后,加入我司吧:
https://join.rightcapital.com/
😂
很幽默,赞
幽默的老哥~问题原因找到了么,哈哈~
@licxisky @yuesir 哈哈,近期有半个多月的计划,暂时就顾不上了,后续有机会再补上
@will_lin @Jeffrey @likunyan @qingfengmengge 感谢支持哈
@Wi1dcard 其实我就随便唠叨一下,论写作还向你多学习呢 :smiley:
再多的表情包也无法完全表达我内心活动
当前这公司技术确实不咋滴,但是其它福利还行吧
非常感谢你的建议,后面有时间再慢慢看,现在已经排满需求了,这就是一下公司所谓得进度要紧吧~
再次感谢你的橄榄枝,笔芯
我想知道你的图都哪里找的
:joy:
文章风格略显风骚,历史遗留比较严重 :joy:
写代码真是浪费了,建议你去写书。
Apache换nginx还好吧,有什么可担心的,运维没有专职人员,直接高工换呀
求个后续呀