本文為大家介紹如何優(yōu)化網(wǎng)站的訪問速度和時間(網(wǎng)站訪問速度優(yōu)化方案),下面和小編一起看看詳細內(nèi)容吧。
很多站長都遇到過網(wǎng)站訪問速度不夠快的問題。今天讓我們試著理解和解決這個問題。
先說說當我們用瀏覽器訪問一個網(wǎng)頁,看到這個網(wǎng)頁出現(xiàn)的時候是怎么回事?
首先,您需要在http 請求之前執(zhí)行此操作:
獲取ip。在瀏覽器地址欄輸入url并提交后,它會先到dns本地緩存表中查找,如果有就直接告訴ip地址。如果沒有,則需要網(wǎng)關(guān)dns查找,以此類推,找到對應的ip后,返回給瀏覽器。
建立tcp 連接。獲取ip后,開始與請求的服務器完成三次握手,建立tcp連接。
建立連接后,向服務器發(fā)送http請求。
http請求會先獲取頁面文件,然后解析頁面文件中的資源文件,
包括css、js、圖片等,然后發(fā)送請求獲取這些資源文件。在http 1.1 請求中,
多個請求可以重疊,但是頁面文件必須先到才能知道請求哪些資源文件。
所以整個過程有幾個階段,第一個階段是第一個字節(jié)獲取時間,
即從url請求到服務器收到http請求后返回響應內(nèi)容的時間,
這不僅僅是dns 和建立連接的時間。對于動態(tài)頁面,
只有在服務器執(zhí)行動態(tài)代碼并返回頁面代碼后,
所以包括計算和數(shù)據(jù)庫操作,這些都會直接增加第一個字節(jié)的獲取時間。
對于靜態(tài)文件,獲取第一個字節(jié)的時間通常更快。
但是如果跟服務器的網(wǎng)絡不暢,比如服務器在國外,就會造成很長的延遲。
在阿里云的云監(jiān)控中,可以任意設(shè)置http監(jiān)控點,監(jiān)控服務器的響應時間,
例如,我在同一臺服務器上建立了兩個網(wǎng)站:
這里可以清楚的看到,對于需要調(diào)用數(shù)據(jù)庫的wordpress,
響應時間明顯長于下面僅使用簡單xml 讀取的eitdesign。
對于eitdesign來說,響應時間基本是即時的,這里可以看出服務器物理距離的影響。
因為服務器在杭州,從杭州訪問只需要2ms,從青島訪問只需要23ms。
至于數(shù)據(jù)到服務器再返回的響應時間,可以通過ping命令獲取。
據(jù)說很多人都用過ping命令,但是好像很多人只是用來看看服務器是不是不可達。
先說一下ping的原理:向目的地發(fā)送一個icmp echo request報文,報告是否收到了想要的icmp echo response。
理論上對方回復的數(shù)據(jù)應該和ping發(fā)送的數(shù)據(jù)大小一樣,這樣就可以很容易的看到與服務器的通信狀態(tài)。
所以,如果ping的響應時間一直很穩(wěn)定,突然出現(xiàn)波動,可能是突然滿帶寬造成的。
這時候有了服務器資源的監(jiān)控,就很容易看出問題出在哪里了。
邊ping邊不斷刷新頁面,可以看到某個時刻的時間明顯變長了,也就是此時帶寬已經(jīng)被占滿了。
第二階段是獲取頁面文件的時候。在獲取頁面文件之前,不會請求任何資源文件。
因為目前還不知道頁面上有哪些資源文件,所以這段時間也很關(guān)鍵。
第三階段是獲取head中各種資源文件的時間。資源文件按照它們在html 頁面中出現(xiàn)的順序加載。
所以會先加載head中的資源。 head中的主要文件是css和js文件,然后會渲染頁面。
所以要特別注意head中所需資源的加載時間。畢竟在頁面渲染之前,用戶看到的都是空白。
第四階段是獲取剩余資源文件的時間,主要是圖片、動畫、視頻等文件。
重要性不是那么高,在所有頁面都出來之后,大多數(shù)用戶覺得看他們加載幾秒鐘是可以接受的。
其實頁面渲染是有時間的,但是由于是和loading同步完成的,一般不會比loading慢,所以可以忽略。
測試工具
如果想直觀的獲取這些數(shù)據(jù),可以直接看頁面的時間線,也就是瀑布圖。
現(xiàn)在各大瀏覽器內(nèi)置的調(diào)試工具都可以實現(xiàn)這個功能。以本網(wǎng)站和safari 為例,
可以看到下圖:第一次訪問(在safari中按shift+refresh鍵可以忽略緩存):
再次訪問:
從圖中可以清楚的看到,一共引用了47個資源文件,一共2m的數(shù)據(jù)。第一次訪問的總時間是1.07秒,第二次訪問的時間是825ms。
先說第一次訪問:第一行藍色的是頁面文件,總大小50.89kb,壓縮后實際傳輸大小10.58kb。
響應時間為342ms,加載時間為66.1ms。然后文件解析完成后,開始請求各個資源文件。
這里可以看到兩條虛線,藍色的是domcontent事件觸發(fā)時間,這里是635ms,
表示當瀏覽器解析完文檔(但可能還沒有下載圖片等其他資源)時,
而紅色的這條是load事件觸發(fā)時間,這里是1.07秒,表示所有資源都已經(jīng)加載完成了。
首次訪問時所有資源都要請求,而再次訪問時就可以利用本地緩存數(shù)據(jù)加快資源載入速度了。
所以對不常變化的靜態(tài)資源設(shè)置一個過期時間,告訴瀏覽器在一定期間內(nèi)都不需要重新載入這個資源。
可以加快用戶再次訪問的速度,顯著減少第四階段的時間。
這個時間線不僅可以在本地瀏覽器中查看,也可以在相關(guān)的測試網(wǎng)站上看到,
例如阿里的阿里測, 還有g(shù)oogle page speed和yahoo yslow.
有一個工具把google page speed和yahoo yslow結(jié)合了一下,叫g(shù)tmetrix,也是不錯的工具。
同時這些網(wǎng)站也會針對站點提供優(yōu)化的建議。
還有個工具叫17ce,可以同時從不同地區(qū)的測試服務器測試響應時間和ping時間,
可以用于了解不同地區(qū)用戶的訪問速度。
優(yōu)化方法
好了,現(xiàn)在有了相關(guān)的基礎(chǔ)知識和工具,就可以有針對性的進行優(yōu)化了。下面來分別說一說各部分要如何來優(yōu)化:
第一階段,服務器響應時間,這部分基本上沒啥太好的方法了,如果是動態(tài)網(wǎng)站的話,
主要以算法和數(shù)據(jù)庫優(yōu)化為主,還有使用ajax異步讀取數(shù)據(jù)之類的,其實是后端的事,
這里就不展開討論了。不過一個網(wǎng)站如果服務器順應時間超過2秒,
基本上可以認為這服務器已經(jīng)掛了,通常應該控制在500ms以內(nèi),
或許讓人感覺并不明顯,如果能控制在250ms以內(nèi)就更好了。
第二階段,獲取頁面文件,首先頁面文件通常都不大,而且都是純文本。
于是優(yōu)化的方法就是開啟gzip壓縮,開啟方式,
對于apache來說,首先要把httpd.conf里的loadmodule deflate_module modules/mod_deflate.so前的#去掉,
然后重啟apache,然后在.htaccess中加入:
ifmodule mod_deflate.c
addoutputfilter deflate html xml php js css text/html text/plain
/ifmodule
gzip壓縮對于這種比較松散的純文本效果還是比較明顯的,比如說我的這個首頁就從50k壓縮到了10k。
還有要使用外部link css文件,不要把樣式表直接放入html頁在,這樣css文件可以設(shè)置緩存。
第三階段,head中的資源文件,主要是css和js文件,方法有這幾個:
使用minify之后的js和css,原版用于修改,輸出min版用于使用,雖然不利于閱讀,但是尺寸明顯減小。
合并多個css和js文件,減少http請求數(shù)量。
把不必要的js文件移到頁面后面去加載,對于那些不影響渲染的js文件,移到第四階段再加載可以減少頁面顯示時間。
對于不常更新的文件設(shè)置緩存時間并使用oss或cdn
第四階段,這一段才是真正的大數(shù)據(jù)量,現(xiàn)在通常用戶的帶寬都不是問題了,
瓶頸主要出現(xiàn)在服務器上了,可以想想看,如果一個頁面完全載入需要2mb的數(shù)據(jù),
那么如果服務器出口帶寬只有1mbps的話,則忽略各種延時不計,在只有一個用戶訪問的情況下,
最快也需要16秒的時間才能傳輸完成這2mb的數(shù)據(jù)。這對于用戶來說是不能忍的。
于是對于阿里云的ecs來說,如果你是包月的,沒有很高帶寬的話,就要盡量減少一切從ecs上直接訪問的資源。
方法主要是使用oss存儲,cdn加速和gzip壓縮。這具體的優(yōu)化就很細致了,努力將ecs上直接訪問的數(shù)據(jù)量減至最少,
但是wordpress很麻煩,有些系統(tǒng)自帶的和插件里引用的js和css文件,不方便合并和改變位置。。。
只能盡量優(yōu)化。以我這個網(wǎng)站為例,之前在將所有圖片都放入cdn之后,
載入首頁還是大概要有220kb的數(shù)據(jù)要從ecs上走,這樣只有1mbps帶寬的話,至少需要2秒時間。
后來又移動了主題內(nèi)的所有圖片和bootstrap,jquery至cdn,再加上gzip壓縮,
經(jīng)過優(yōu)化之后,現(xiàn)在只有80kb的數(shù)據(jù),可以保證在1秒以內(nèi)加載完成。
其它需要注意的地方包括:
至于訪問量巨大的網(wǎng)站,那更是節(jié)約每一個字節(jié)都很重要,還有更多的優(yōu)化方法,可以具體參考google page speed和
yahoo yslow的頁面評測結(jié)果,不過這兩個服務器都在國外,所以響應時間會長很多,這一數(shù)據(jù)可以忽略。
最后來說說如何設(shè)置緩存時間,對于apache來說,
首先要把httpd.conf里的loadmodule expires_module modules/mod_expires.so前的#去掉,然后重啟apache,
然后在.htaccess中加入相應的代碼就可以設(shè)置不同文件類型的緩存時間了,
如下設(shè)置的是圖片文件和js文件1個月,圖標文件1年:
ifmodule mod_expires.c
expiresactive onexpiresbytype image/jpg access plus 1 month
expiresbytype image/jpeg access plus 1 month
expiresbytype image/gif access plus 1 month
expiresbytype image/png access plus 1 month
expiresbytype text/x-javascript access plus 1 month
expiresbytype application/x-shockwave-flash access plus 1 month
expiresbytype image/x-icon access plus 1 year
/ifmodule
題外話
其實這篇文章的誕生源于阿里云服務器的小故障,某一天開始響應時間變的非常長,以至于云監(jiān)控報警,當時上去看了一下一度響應時間達到15秒以上。。。
于是在想是發(fā)生什么了。。。就想盡各種辦法開始優(yōu)化自己的網(wǎng)站,雖然這故障很快修復了,但是有機會讓我重新研究了一下頁面加速的各種知識。讓我清醒的意識到1mbps帶寬是多么多么的小。。。
希望大家在這篇文章中能找到自己想要的東西,小小的加速一下自己的網(wǎng)站~~~
好了,如何優(yōu)化網(wǎng)站的訪問速度和時間(網(wǎng)站訪問速度優(yōu)化方案)的介紹到這里就結(jié)束了,想知道更多相關(guān)資料可以收藏我們的網(wǎng)站。
91助手如何備份(91助手上的備份怎么轉(zhuǎn)入新手機)
win10系統(tǒng)自帶的重裝系統(tǒng)好用嗎(window10自帶的重裝系統(tǒng)怎么樣)
看不到對方朋友圈背景圖是怎么回事(看不到對方朋友圈背景圖)
蘋果13隔空投送失敗(為什么iphone隔空投送一直在等待)
電腦加裝的機械硬盤有時無法顯示,加裝機械硬盤會影響電腦速度嗎
如何優(yōu)化網(wǎng)站的訪問速度和時間(網(wǎng)站訪問速度優(yōu)化方案)
外星人裝驅(qū)動下載(外星人驅(qū)動軟件)
hp筆記本如何用u盤裝系統(tǒng)(hp筆記本u盤重裝系統(tǒng)教程)
win7系統(tǒng)任務管理器打不開(win7系統(tǒng)打不開任務管理器)
紅米redmi4a的卡怎么裝,紅米4卡槽怎么裝卡圖解
usb手機怎么打開,手機U盤怎么在手機上打開
蘋果手機沒辦法掛電話嗎(蘋果手機沒辦法掛電話怎么回事)
逆光拍攝照片怎么拍(攝影逆光怎么拍)
電腦點了脫機工作怎么恢復(電腦處于脫機工作狀態(tài)怎么解除)
HW英文縮寫有幾種中文意思,hw是什么
u盤中刪除的文件怎樣才能恢復,u盤里面有個隱藏回收站
好玩游戲手游推薦(好玩的游戲排行榜2020手機)
金士頓U盤官網(wǎng),金士頓u盤官網(wǎng)
安兔兔手機性能排行榜2020新(安兔兔手機排行榜2021前十名新)
手機fps怎么提高,手機玩游戲FPS怎樣提高