如何在3分鐘內(nèi)提高網(wǎng)站打開(kāi)速度?

01 分析定位問(wèn)題
首先,要定位網(wǎng)站打開(kāi)慢的原因,通常有以下幾種方法:
問(wèn)題是否必現(xiàn) /是首次打開(kāi)慢,還是每次打開(kāi)都很慢?
如果只是首次打開(kāi)慢,說(shuō)明是本地沒(méi)緩存。如果每次打開(kāi)都慢,說(shuō)明服務(wù)端緩存配置可能不正確,或者站點(diǎn)包含了太多動(dòng)態(tài)請(qǐng)求。
是否共性問(wèn)題 /除了本站點(diǎn)打開(kāi)慢,打開(kāi)大流量網(wǎng)站(比如www.qq.com)也慢嗎?
如果大流量站點(diǎn)打開(kāi)也慢,極可能說(shuō)明本地網(wǎng)絡(luò)或者DNS存在問(wèn)題。否則,可能是本站點(diǎn)的原因。
是否網(wǎng)絡(luò)差異 /切換不同的WiFi,或者切換熱點(diǎn)重試,是否有改善?
如果WiFi/熱點(diǎn)訪問(wèn)體驗(yàn)不同,也可能說(shuō)明是網(wǎng)絡(luò)鏈路問(wèn)題。比如服務(wù)器在電信網(wǎng)絡(luò),而客戶端在移動(dòng),跨網(wǎng)互聯(lián)會(huì)存在天然的延時(shí)。
其他用戶是否有類似問(wèn)題
如果只是個(gè)別客戶端出問(wèn)題,基本能確定是客戶端自身原因。
除了找用戶收集信息之外,我們還可以引導(dǎo)用戶借助瀏覽器抓包診斷。比如Chrome就有開(kāi)發(fā)者工具,其中network面板可以分析資源加載時(shí)序,查看每個(gè)資源的加載時(shí)間,定位到加載慢的資源,詳細(xì)操作:https://developer.chrome.com/docs/devtools/network/。

· 診斷工具
除了主動(dòng)詢問(wèn)客戶外,也可以利用自動(dòng)化診斷工具來(lái)快速獲取客戶端的ip、localDNS、瀏覽器版本等基礎(chǔ)信息,http://debug.ping.dnsv1.com/ping.x。
· 第三方探測(cè)
· 主動(dòng)監(jiān)控
02 問(wèn)題解決方案
定位到根因后,我們便可以針對(duì)性提出解決方案。
· 客戶端原因
· 服務(wù)端原因
1)LB服務(wù)端負(fù)載均衡
可以引入負(fù)載均衡服務(wù),比如騰訊云CLB,能將來(lái)自客戶端的請(qǐng)求以特定的均衡算法派發(fā)到后端服務(wù)器上,降低單臺(tái)服務(wù)器壓力。并且還可以探測(cè)后臺(tái)服務(wù)器存活性,自動(dòng)剔除掉不健康的節(jié)點(diǎn)。
2)DNS全局負(fù)載均衡
如果請(qǐng)求量超出了單臺(tái)LB承受能力,這時(shí)LB也可能會(huì)掛掉,因此可以引入多個(gè)負(fù)載均衡服務(wù),為了讓客戶端能發(fā)現(xiàn)多臺(tái)負(fù)載均衡,我們可以修改DNS解析,添加多個(gè)LB ip作為A記錄。
3)接入CDN
如果網(wǎng)站業(yè)務(wù)正處于一個(gè)上升期,流量預(yù)計(jì)會(huì)有不小的增長(zhǎng),為了跟上業(yè)務(wù)發(fā)展的節(jié)奏,我們會(huì)需要頻繁擴(kuò)容,這是一個(gè)繁瑣的過(guò)程,費(fèi)力不說(shuō),購(gòu)買新LB和服務(wù)器都需要不小的服務(wù)器、網(wǎng)絡(luò)帶寬成本。這時(shí),我們可以考慮將網(wǎng)站接入CDN。對(duì)于靜態(tài)資源類網(wǎng)站,CDN可以將絕大部分資源緩存在邊緣節(jié)點(diǎn)上,提升最后一公里用戶的訪問(wèn)效率,為服務(wù)器抵擋住接近100%的流量,CDN加速產(chǎn)生的流量相比普通服務(wù)器產(chǎn)生的流量更廉價(jià),因此可以大大減少網(wǎng)站服務(wù)器成本。騰訊云CDN就提供了這樣的能力。
這意味著服務(wù)器負(fù)責(zé)正常,但業(yè)務(wù)側(cè)處理能力跟不上,可能有以下幾類原因:
? 綜合來(lái)看,將網(wǎng)站接入CDN是最省事、成本最低、并且加速效果最好的一種方式。
最后我們以一個(gè)靜態(tài)網(wǎng)站樣例來(lái)說(shuō)明應(yīng)用以上一些優(yōu)化手段后的效果。
03 實(shí)戰(zhàn)演練
這是一個(gè)AdminLTE3的示例頁(yè)面,首頁(yè)上加載資源很多,我們按加載時(shí)長(zhǎng)從大往小排序,可以看到,在沒(méi)優(yōu)化前,頁(yè)面總共加載耗時(shí)8.48s。其中adminlte.min.css文件加載就花了4.68s,耗時(shí)最多。


1. nginx開(kāi)啟壓縮傳輸


server返回頭部中確實(shí)攜帶了Content-Encoding、Transfer-Encoding。

我們以騰訊云CDN接入來(lái)說(shuō)明,只需要簡(jiǎn)單幾步操作即可快速啟用CDN加速。
在騰訊云CDN控制臺(tái)上,最簡(jiǎn)單的操作,只需要將加速域名,源站ip填寫(xiě)進(jìn)來(lái),點(diǎn)擊確認(rèn)提交即可創(chuàng)建域名配置。


最終DNS解析關(guān)系應(yīng)該如下:



5) 啟用QUIC加速

6) 再一次驗(yàn)證

? 網(wǎng)站頁(yè)面加載速度優(yōu)化的方法有很多,有實(shí)力、愛(ài)折騰的開(kāi)發(fā)者可以通過(guò)調(diào)整軟件設(shè)計(jì)、架構(gòu)以及服務(wù)器配置達(dá)到加速效果。除此之外,最簡(jiǎn)單、便捷的方法就是將網(wǎng)站接入CDN,快速啟用壓縮、QUIC特性,達(dá)到既節(jié)省成本,又靈活,還能大幅提速的目的。
關(guān)注騰訊云CDN??獲取更多信息
參考文獻(xiàn)
[1] web性能權(quán)威指南
[2] https://www.nngroup.com/articles/
response-times-3-important-limits/
[3] https://github.com/alex/what-happens-when

