初來乍到新公司不久,啃了幾天文件,也翻了一下部分程式碼,就發現公司現有產品有點問題,是什麼問題呢?
這年頭還是用 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% ???嚴重懷疑瀏覽器有問題!