硅云幫助文檔中心
搜索文檔
熱門(mén)搜索詞:
產(chǎn)品簡(jiǎn)介
產(chǎn)品定價(jià)
入門(mén)指南
經(jīng)典案例
快照
常見(jiàn)問(wèn)題
Windows遠(yuǎn)程報(bào)錯(cuò)“出現(xiàn)身份驗(yàn)證錯(cuò)誤,要求的函數(shù)不受支持”
搬遷MySQL數(shù)據(jù)庫(kù)后提示錯(cuò)誤ERROR 1146 (42S02):Table doesn’t exist
Windows系統(tǒng)云服務(wù)器解除會(huì)話時(shí)間限制(解決Windows服務(wù)器遠(yuǎn)程桌面頻繁掉線的方法)
硅云香港二區(qū)實(shí)例內(nèi)無(wú)法通過(guò)公網(wǎng)IP自己請(qǐng)求自己的處理辦法
Windows Server服務(wù)器遠(yuǎn)程連接登錄報(bào)錯(cuò)“內(nèi)部錯(cuò)誤”
寶塔面板升級(jí)修改提示:當(dāng)前面板過(guò)舊/py-2.7/無(wú)pyenv環(huán)境,無(wú)法升級(jí)至最新版面板
知識(shí)拓展
名詞解釋
API參考
在做網(wǎng)頁(yè)前端加載性能測(cè)試時(shí),經(jīng)常會(huì)遇到網(wǎng)站加載 Waiting(TTFB)時(shí)間過(guò)長(zhǎng)的問(wèn)題。比如對(duì)于沒(méi)有優(yōu)化過(guò)的 WordPress 站點(diǎn),TTFB 時(shí)間經(jīng)常超過(guò)了頁(yè)面內(nèi)容的下載時(shí)間,為用戶(hù)帶來(lái)不必要的等待時(shí)間。這個(gè)問(wèn)題的主要原因是在服務(wù)器端,不熟悉服務(wù)器運(yùn)維的朋友優(yōu)化起來(lái)可能會(huì)不知道從哪里下手,今天我們就從各方面分析一下網(wǎng)站加載 Waiting (TTFB) 時(shí)間過(guò)長(zhǎng)的原因和解決辦法。
TTFB 是 Time to First Byte 的縮寫(xiě),指的是瀏覽器開(kāi)始收到服務(wù)器響應(yīng)數(shù)據(jù)的時(shí)間(后臺(tái)處理時(shí)間+重定向時(shí)間),是反映服務(wù)端響應(yīng)速度的重要指標(biāo)。就像你問(wèn)朋友了一個(gè)問(wèn)題,你的朋友思考了一會(huì)兒才給你答案,你朋友思考的時(shí)間就相當(dāng)于 TTFB。你朋友思考的時(shí)間越短,就說(shuō)明你朋友越聰明或者對(duì)你的問(wèn)題越熟悉。對(duì)服務(wù)器來(lái)說(shuō),TTFB 時(shí)間越短,就說(shuō)明服務(wù)器響應(yīng)越快。
因?yàn)槊總€(gè)服務(wù)器的硬件和網(wǎng)絡(luò)環(huán)境都不盡相同,每個(gè)服務(wù)器的 TTFB 時(shí)間也不相同。如果想知道你的服務(wù)器優(yōu)化可以到什么程度,大家可以上傳一些靜態(tài)的 HTML 頁(yè)面到服務(wù)器,然后打開(kāi)這些靜態(tài)頁(yè)面,看一些這些頁(yè)面的 TTFB 時(shí)間,大多數(shù)服務(wù)器的 TTFB 時(shí)間都在 50 ms 以下,這個(gè)時(shí)間就是我們優(yōu)化時(shí)候可以追求的時(shí)間。下面兩個(gè)圖中的 TTFB 時(shí)間分別是本站所在服務(wù)器的靜態(tài)和動(dòng)態(tài)網(wǎng)頁(yè) TTFB 等待時(shí)間。
根據(jù)對(duì)大量網(wǎng)站的測(cè)試,TTFB 時(shí)間如果超過(guò)了 500 ms,用戶(hù)在打開(kāi)網(wǎng)頁(yè)的時(shí)候就會(huì)感覺(jué)到明顯的等待。我么可以把 500 ms 以上認(rèn)為是 TTFB 時(shí)間過(guò)長(zhǎng)??梢?jiàn),WordPress 智庫(kù)的服務(wù)器還不算差。
我們知道,對(duì)于動(dòng)態(tài)網(wǎng)頁(yè)來(lái)說(shuō),服務(wù)器收到用戶(hù)打開(kāi)一個(gè)頁(yè)面的請(qǐng)求時(shí),首先要從數(shù)據(jù)庫(kù)中讀取該頁(yè)面需要的數(shù)據(jù),然后把這些數(shù)據(jù)傳入到模版中,模版渲染后,再返回給用戶(hù)。由于查詢(xún)數(shù)據(jù)和渲染模版需要需要一定的時(shí)間,在這個(gè)過(guò)程沒(méi)有完成之前,瀏覽器就一致處于等待接收服務(wù)器響應(yīng)的狀態(tài)。有些服務(wù)代碼的性能比較低,或者代碼邏輯優(yōu)化沒(méi)做好,這個(gè)時(shí)間就會(huì)比較長(zhǎng)。 當(dāng)然,如果服務(wù)器到用戶(hù)之間的網(wǎng)絡(luò)不好,(比如,服務(wù)器在歐洲,用戶(hù)在中國(guó),用戶(hù)打開(kāi)網(wǎng)頁(yè)的時(shí)候,請(qǐng)求需要跨越千山萬(wàn)水才能達(dá)到服務(wù)器),服務(wù)器接收到用戶(hù)請(qǐng)求的時(shí)間過(guò)長(zhǎng),也是導(dǎo)致 TTFB 時(shí)間過(guò)長(zhǎng)的原因。 有時(shí)候,頁(yè)面在用戶(hù)的瀏覽器中保存了過(guò)多的 Cookie,每次請(qǐng)求,這些 Cookie 都要發(fā)送到服務(wù)器,服務(wù)器都要處理這些 Cookie,這也是導(dǎo)致 TTFB 時(shí)間過(guò)長(zhǎng)的原因之一。
還有一種容易被忽視的地方,比如我們的某項(xiàng)服務(wù)代碼中有請(qǐng)求外部接口資源(如采集內(nèi)容等),當(dāng)請(qǐng)求的外部資源接口數(shù)據(jù)下載量大、或者這個(gè)接口的與服務(wù)器之間的網(wǎng)絡(luò)通信質(zhì)量欠佳的時(shí)候,也會(huì)導(dǎo)致Waiting (TTFB)變長(zhǎng),這時(shí)候我們需要去和接口放確認(rèn)是否能夠優(yōu)化兩者之間的網(wǎng)絡(luò)通信質(zhì)量,也需要同步核實(shí)修改外部資源的請(qǐng)求策略,比如采用緩存的形式,不必每次訪客訪問(wèn)網(wǎng)頁(yè)都請(qǐng)求獲取外部資源,而是直接使用緩存的資源,這針對(duì)于并非實(shí)時(shí)更新的數(shù)據(jù)是相當(dāng)有效的優(yōu)化手段。
知道了原因,解決辦法就顯而易見(jiàn)了,那就是縮短服務(wù)器響應(yīng)時(shí)間,最簡(jiǎn)單直接并且有效的辦法就是使用緩存,把 PHP 和 MySQL 的執(zhí)行時(shí)間最小化,一些緩存插件可以把 SQL 查詢(xún)結(jié)果緩存起來(lái),把幾十次查詢(xún)結(jié)果轉(zhuǎn)換為幾次;一些緩存插件可以直接把用戶(hù)所請(qǐng)求的頁(yè)面靜態(tài)化,用戶(hù)打開(kāi)網(wǎng)頁(yè)時(shí),相當(dāng)于直接從服務(wù)器上下載了靜態(tài)頁(yè)面。 如果是網(wǎng)絡(luò)原因,換一個(gè)服務(wù)器是比較直接的解決辦法。如果因?yàn)橐恍┰虿荒軗Q服務(wù)器,可以使用一個(gè) CDN,把頁(yè)面同步到離用戶(hù)比較近的 CDN 節(jié)點(diǎn)上,也是一個(gè)不錯(cuò)的解決辦法。 如果是 Cookie 的原因,可以通過(guò)修改應(yīng)用程序,刪除一些不必要的 Cookie,或者精簡(jiǎn) Cookie 內(nèi)容,縮短 Cookie 的有效期等,都是解決辦法。 本站使用的是 Cachify 插件 Memcached 緩存方式,直接把用戶(hù)請(qǐng)求過(guò)的頁(yè)面,緩存到了內(nèi)存中,網(wǎng)站加載 Waiting (TTFB) 時(shí)間達(dá)到了 50 ms 左右,感興趣的朋友可以用谷歌瀏覽器的調(diào)試工具查看一下。
相關(guān)文檔
您對(duì)該文檔有什么建議?
本文導(dǎo)航