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