欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

網站性能分析優(yōu)化實例(網站加載慢)

 更新時間:2025年07月05日 13:58:22   作者:程序員魚皮  
網站性能分析優(yōu)化實例(網站加載慢),本文詳細講解網站性能優(yōu)化的三大方向:傳輸、體積和加載,涵蓋CDN、HTTP/2、壓縮等技術,結合實戰(zhàn)案例展示如何將加載時間從3分鐘壓縮至118毫秒,強調分析與工具的重要性

這是一個加載慢慢慢慢慢到不行的網站,據說是由一位低級程序員魚皮開發(fā)的,等了幾分鐘都沒加載完:

你能想到多少種辦法,來拯救這個網站的加載速度呢?

我能想到 至少 12 種,如果你能想到更多方法,先受我一拜,你真的很厲害;如果你想到的方法比我少,那么這期內容,一定會讓你有收獲。

下面我們就來聊聊《網站性能優(yōu)化》。

如何測量網站性能?

衡量網站性能的指標非常多,比如首屏加載時間、白屏時間、可交互時間等等。

但這里為了幫助大家理解,我們主要關注用戶最直觀能感受到的 網站加載時長

怎么測量網站加載時長呢?

最簡單的方法就是按 F12 打開瀏覽器的開發(fā)者工具,切換到 Network 網絡面板,刷新頁面就能看到每個資源的加載時間了。

當然,還有更專業(yè)的網站性能分析工具,在本期的最后會分享。

網站性能優(yōu)化的關鍵

雖然網站性能優(yōu)化的方法非常多,但思路很簡單。

問個問題,大家都收過快遞吧?快遞是怎么送到你家的呢?

首先,商家從倉庫把商品打包,然后通過物流網絡和快遞員配送到你手里,你拆開包裹就能使用了。

訪問網站也是一樣的:從服務器獲取到網站文件,然后在瀏覽器中加載

要讓網站訪問更快,我們可以從三個方向來優(yōu)化:

  • 網站傳輸更快
  • 網站體積更小
  • 網站加載更快

下面我們就按照這些方向,來優(yōu)化現(xiàn)在這個要加載 3 分多鐘的辣雞網站,看看最后能優(yōu)化到多少秒。

一、網站傳輸優(yōu)化

想要更快獲取到網站文件,我們可以按照網站文件傳輸?shù)穆窂?服務器 => 網絡傳輸 => 客戶端 進行優(yōu)化。

升級服務器配置

毫無疑問,從服務器獲取網站文件是需要網絡的,服務器帶寬越大,網速越快,網站文件下載越快。

所以如果你不知道怎么優(yōu)化網站性能,最簡單粗暴的方法就是加錢!升級服務器的帶寬!

比如我把 2M 帶寬的小水管升級到 8M,網站加載時長就從 3 分鐘優(yōu)化到了 40 秒,速度優(yōu)化了 4 倍多!

不過一般來說,對于個人小網站,1-5M 就夠用了,畢竟帶寬挺貴的。

有同學會問了,光升級帶寬就夠了么?升級內存、CPU、硬盤有沒有用?

這就要看你網站的類別了,對于純靜態(tài)網站來說,服務器要做的就是把網站文件發(fā)送出去,這個過程主要受帶寬限制。但如果你的網站有復雜的后端邏輯,那 CPU 和內存就很重要了。

CDN 緩存加速

如果用戶離我們的網站服務器較遠,傳輸網站文件的時間就會更長,很影響體驗。

如何解決這個問題呢?我們不妨類比一下網購,平臺會在全國建立區(qū)域倉庫,提前把熱門商品分配到各地倉庫,用戶下單后從最近的倉庫發(fā)貨,而不是都從總倉發(fā)貨,就能更快收貨。

這就是 CDN 內容分發(fā)網絡的原理,提前從源服務器獲取到網站文件并緩存到全國各地的節(jié)點,用戶訪問時就可以直接從最近的節(jié)點獲取資源。不僅延遲更低,而且能同時支持更多用戶的訪問。

我們使用云服務平臺配置一下 CDN,指定原始網站服務器作為源站。

然后設置緩存,可以只緩存圖片等媒體資源,也可以緩存整套網站文件,這里我全都要。

試一下效果,首次訪問會比較慢,因為 CDN 節(jié)點還沒有緩存,需要從網站服務器拉取文件;之后速度就飚起來了,直接從 40 秒優(yōu)化到了 6 秒,性能優(yōu)化了 6 倍多!效果顯著。

不過 CDN 可是把雙刃劍,按流量計費,鑒于我被刷了上萬元流量費的血淚經驗,建議 CDN 能不用就不用,即使要用 CDN 也要做好訪問頻率限制、用量封頂配置和監(jiān)控告警。

瀏覽器緩存

除了 CDN 外,但還有一個更徹底的優(yōu)化方案:讓網站文件根本不用傳輸

這就是 瀏覽器緩存 的作用,將已經請求過的網站文件存儲到用戶本地,下次再訪問網站時,都不用去找服務器了,直接從本地加載資源。

我們可以通過 Web 服務器的 HTTP 緩存頭配置或者 CDN 的瀏覽器緩存過期配置來更改緩存策略,更新不頻繁的網站緩存時間可以設置長一些。

我這里設置為 1 小時,效果很明顯,直接從 6 秒優(yōu)化到了 1.69 秒,不過理論上還可以更快。

這樣一來,我們就形成了一個完整的網站緩存體系:CDN 緩存解決地理距離問題,瀏覽器緩存解決重復訪問的問題。實際情況下兩種方法建議結合使用。

升級 HTTP 協(xié)議

此外,想要升級網站傳輸?shù)乃俣?,可以升級請求協(xié)議到 HTTP/2。

相比于 HTTP/1.1,HTTP/2 最大的改進是 多路復用。HTTP/1.1 雖然可以建立多個連接,但每個連接內的請求必須按順序處理,容易產生隊頭阻塞問題。而 HTTP/2 在單個連接上就能同時處理多個請求,真正實現(xiàn)了并行傳輸。

升級 HTTP/2 的方式很簡單,只需要在 Web 服務器(比如 Nginx)添加配置:

server {
   listen 443 ssl http2;  # 開啟HTTP/2支持
   server_name your-domain.com;
   
   ssl_certificate /path/to/cert.pem;
   ssl_certificate_key /path/to/key.pem;
   
   # 其他配置...
}

如果你用的是 CDN,只需要在 CDN 配置頁面一鍵開啟 HTTP/2 即可:

測試一下效果,這次沒有用到本地緩存,網站加載時長也從 6 秒縮短到了 1.6 秒,性能優(yōu)化了 3 倍多!

僅僅點了一下按鈕,速度就上來了,是不是沒想到?

那你可能問了,現(xiàn)在不是還有 HTTP/3 嗎?

HTTP/3 確實更先進,它基于 QUIC 協(xié)議,有更快的連接建立速度、更好的多路復用性能和更少的隊頭阻塞問題,但兼容性和穩(wěn)定性還需要時間驗證,選用 HTTP/2 就足夠了。

至此,在沒有改變網站本身的情況下,我們就已經把網站加載時間優(yōu)化到了秒級!

二、網站體積優(yōu)化

如果把網站文件當做貨物,體積越小,自然傳送越快。

如何優(yōu)化網站文件體積呢?

核心就 2 個字 —— 壓縮

網站資源壓縮

首先可以壓縮網站引用的媒體資源,比如圖片、音視頻、字體文件等等。

很多朋友都知道這個道理,但是經常忽略。不信打開瀏覽器控制臺看看你們自己的網站,有哪些資源可以進一步優(yōu)化呢?

對很多網站來說,圖片是消耗流量較多的一類資源,因此我們性能優(yōu)化時,要重點關注圖片。

只需要把 JPG 和 PNG 的圖片統(tǒng)一壓縮為 WebP(或 AVIF)格式,這樣就能減少 20% 以上的文件體積;想追求更高的壓縮比例,還可以調整圖片壓縮的質量,一般 80% 左右對原圖的影響是可以接受的。

舉個例子,我讓 AI 通過編寫 Python 腳本批量壓縮網站內的圖片,總體積直接減少了 20 多倍!

再次訪問網站時,相比之前從服務器加載耗時 40 秒,這次直接縮短到了 2 秒!竟然跟使用 CDN + HTTP 2 的效果旗鼓相當,優(yōu)化了 20 倍!

而且不仔細看的話,你能分辨出來優(yōu)化前后圖片的區(qū)別么?

需要注意的是,如果你的網站允許用戶自主上傳圖片,一定要在后端服務器對這些圖片進行壓縮,否則可能就會出現(xiàn)下圖這種慘狀:一個用戶頭像都消耗了 5M 流量。

網站代碼壓縮

除了引用的資源外,網站代碼本身也是可以壓縮的。

代碼壓縮的原理很好理解,去掉代碼中的空格、注釋、換行,把變量名縮短就可以了。舉個例子:

雖然網站代碼壓縮的工具網上一抓一大把(比如 Minifier 和 JSCompress),但一般我們不需要手動壓縮代碼。對于獨立的 CSS 和 JS 腳本文件,可以直接使用 官方提供的 Min 壓縮版本。

而對于目前主流的 Vue / React 前端工程化項目,一般會使用打包工具(比如 Vite / Webpack)自動對代碼文件進行優(yōu)化、壓縮和打包。

比如經典的 Tree Shaking(搖樹優(yōu)化),就像搖樹一樣,通過靜態(tài)分析,把代碼中沒用到的地方 “搖” 掉,從而減小 JS 文件體積。

來試試看,我的網站項目使用了 Vite 作為打包工具,添加這么一段配置,然后構建和部署項目。

對比一下,效果立竿見影!原本 363 KB 的代碼,壓縮后只有 159 KB,減少到了一半!

網站加載時長也進一步縮短到了 1.62 秒,又優(yōu)化了 20%。

Gzip 傳輸壓縮

除了手動壓縮外,還可以在網站傳輸時利用 Gzip 實現(xiàn)自動壓縮。

它的原理也很簡單,瀏覽器和服務器之間有個約定:

1)瀏覽器請求網站時通過請求頭告訴服務器:“我支持 gzip 壓縮”。

示例 Accept-Encoding 請求頭:

GET /index.html HTTP/1.1
Host: codefather.cn
Accept-Encoding: gzip, deflate, br

2)服務器收到這個請求,如果開啟了 gzip 壓縮,會把文件壓縮后再發(fā)送,并且通過響應頭告訴瀏覽器:“這是壓縮過的”。

示例 Content-Encoding 響應頭:

HTTP/1.1 200 OK
Content-Type: text/html
Content-Encoding: gzip
Content-Length: 1024

3)瀏覽器收到文件后,會自動進行解壓。

讓我們測試一下,開啟 gzip 的方式很簡單,只需要在 Web 服務器中添加配置:

# 開啟gzip壓縮
gzip on;

# 啟用gzip壓縮的HTTP版本
gzip_http_version 1.1;

# 壓縮級別 (1-9)
# 1: 最快壓縮,壓縮率最低
# 9: 最慢壓縮,壓縮率最高
# 6: 平衡壓縮速度和壓縮率的推薦值
gzip_comp_level 6;

# 小于1KB的文件不壓縮
# 小文件壓縮后可能反而變大,且消耗CPU資源
gzip_min_length 1024;

然后我們利用 CURL 工具分別發(fā)送不開啟 Gzip 和開啟 Gzip 的兩個請求:

# 開啟 Gzip - 詳細版
curl -H "Accept-Encoding: gzip" -w "Gzip: %{size_download} bytes" -o /dev/null -s http://love.codefather.cn/assets/index-d746a13e.js

# 不開啟 Gzip - 詳細版  
curl -H "Accept-Encoding: identity" -w "原始: %{size_download} bytes" -o /dev/null -s http://love.codefather.cn/assets/index-d746a13e.js

發(fā)現(xiàn)開啟 Gzip 壓縮后,文件大小能減少一半多!

但由于我們網站的代碼文件體積本來就不大,所以開啟 gzip 后的優(yōu)化效果不會那么明顯,但仍然建議開啟。

三、網站加載優(yōu)化

前面我們優(yōu)化了網站傳輸和網站體積,HTML 等網站文件能更快到達用戶瀏覽器。但瀏覽器接下來還需要加載腳本、圖片等大量資源,并且動態(tài)請求后端數(shù)據。

這個過程也是可以優(yōu)化的,也是最有意思的,我們可以通過很多策略來優(yōu)化網站的加載速度。

加載策略

首先是幾種典型的加載策略,目標是 讓用戶在合適的時機獲得合適的內容。

1、延遲加載

懶加載 是最常用的延遲加載技術,核心思想很簡單:用戶看不到的內容就先不加載。這種策略特別適合長頁面和圖片較多的網站。

比如我們通過 HTML 圖片標簽自帶的 lazy 屬性實現(xiàn)懶加載:

<img src="image.jpg" loading="lazy" alt="懶加載圖片">

如果想實現(xiàn)更嚴格的懶加載,可以采用 Intersection Observer 來觀察圖片是否進入視窗

測試一下效果,首屏只用了 339 毫秒就加載完成了,加載時長又縮短了 5 倍!

當用戶滾動頁面到對應的位置時,圖片才開始加載,不僅大幅減少了首屏加載時間,而且節(jié)約了流量。

2、按需加載

利用 代碼分割 技術,可以把原本龐大的代碼包拆分成多個小模塊,根據用戶實際需要的功能來加載對應代碼。

比如之前網站所有頁面的 CSS 和 JS 文件是合并在一起的,現(xiàn)在可以按照頁面分割成多個小文件,訪問哪個頁面就加載哪個頁面的代碼:

// 傳統(tǒng)方式:一次性加載所有頁面代碼
import UserProfile from './UserProfile.vue'

// 代碼分割:訪問頁面時才加載對應代碼
const UserProfile = () => import('./UserProfile.vue')

這樣一來,訪問網站首頁時,只按需加載和首頁有關的部分代碼,減少了網站首次加載的文件體積,首屏加載速度就能大幅提升,縮短到 162 毫秒,又優(yōu)化了 1 倍!

之后當訪問其他頁面時,才會加載對應的網站文件。

3、分層加載

這個策略的核心是 先快后好,先讓用戶立即看到內容,再根據情況提升質量,避免用戶等待的焦慮感。常見的實現(xiàn)方式有 2 種。

首先是 縮略圖。在列表頁顯示低清小圖,用戶點擊某個感興趣的內容后再加載高清大圖,這樣幾乎不影響用戶體驗,又節(jié)省了流量。實現(xiàn)方法很簡單,為每個高清原圖額外生成一個縮略圖,不同的頁面加載不同的圖片就好。

這樣一來,首屏加載的資源更小,加載時長縮短到了 118 毫秒,又優(yōu)化了 25%!

還有一種更高級的策略 —— 漸進式加載,先加載低質量內容,再自動加載高質量內容。比如圖片會先顯示一個模糊的預覽,然后逐漸變清晰。這樣用戶不會看到空白區(qū)域和頁面錯位,瀏覽體驗更絲滑。

4、預加載

這個策略的核心是 預判用戶需求,在用戶需要訪問之前就把資源準備好,讓體驗更流暢。

只需要一行代碼,就能指定預加載的資源:

<link rel="prefetch" href="next-page.js" rel="external nofollow" >

舉個典型的場景,比如用戶瀏覽博客網站的文章列表時,可以預加載幾篇文章詳情頁,這樣用戶點擊時幾乎秒開。

但我建議使用預加載前,最好先對網站的結構和訪問情況進行分析,關鍵是要把握好度。預加載太少效果不明顯,預加載太多又會產生流量浪費。就像你提前為客人準備了第二天的飯,結果人家當天就走了。

請求優(yōu)化

除了幾種加載策略外,還有個比較高級的技巧 —— 請求合并。

當你要多次調用后端接口來請求數(shù)據時,由于瀏覽器對同一域名有并發(fā)請求數(shù)限制(一般是 6 個左右),可能會產生請求排隊和阻塞,導致數(shù)據加載耗時過長。這時,我們可以讓后端提供一個聚合接口,一個接口返回某個頁面需要的所有數(shù)據。不過這需要你跟后端關系不錯,否則你就只能自己搭個 Node.js 中間層來做請求聚合了。

請求網站小圖標也是類似的,與其一個個請求圖標文件,不如利用 CSS 雪碧圖 特性,把所有小圖標合并為一張圖片,然后在前端利用 CSS 的 background-position 來加載圖片的指定位置。

這樣只需要請求 1 次,就達到了同樣的效果,網站的加載時長也會進一步縮短。

性能分析關鍵

通過前面分享的這些網站優(yōu)化技巧,最終我們網站的加載時間竟然 從 180 秒優(yōu)化到了 118 毫秒,性能提升了 1500 多倍!效果還是非常炸裂的,弱網環(huán)境也能很快訪問網站。

但這就是極限了么?

可別忘了,我們的體積優(yōu)化和加載優(yōu)化并沒有使用 CDN 進行演示,那如果我們同時開啟 CDN 和 HTTP 2,效果又如何呢?

結果可能讓大家失望了,經過我的多次測試,性能并沒有明顯的提升。我們對網站本身的優(yōu)化越多,傳輸數(shù)據量就更小,再加上各種不穩(wěn)定因素,CDN 在提速方面的效果可能就沒那么明顯了。這就是為什么我建議大家先對網站本身進行優(yōu)化,CDN 還是要謹慎使用。

雖然方法教給大家了,怎么合理運用這些方法進行優(yōu)化,是需要大家持續(xù)探索的。記住,性能優(yōu)化一定是 “針對具體場景,先分析再優(yōu)化”。因此我們也一定要準備一些網站性能分析的工具,我一般會優(yōu)先使用瀏覽器開發(fā)者工具內置的 Lighthouse,使用很方便。點擊一鍵分析,就能幫你進行全面的網站性能評估,還給出了很多優(yōu)化建議,有一些不正是我們今天分享到的方法么?

此外,還有一些免費工具也可以試試看:

  • GTmetrix - 詳細的瀑布圖分析
  • WebPageTest - 全球多節(jié)點測試

最后

OK 以上就是本期內容,雖然這并不是所有的網站優(yōu)化方法(還有后端優(yōu)化、Web Workers、Service Worker、WebAssembly 等等),但已經能夠覆蓋絕大多數(shù)優(yōu)化場景了。大家可以按照上面提到的方法,一步步按需優(yōu)化自己的網站。

這篇文章魚皮總共寫了 5000 多字,如果對你有幫助,記得 點贊收藏 支持一下!大家反饋不錯的話,我后續(xù)會繼續(xù)分享 后端性能優(yōu)化的一條龍服務,絕對干貨滿滿,我們下期見。

 

到此這篇關于網站性能分析優(yōu)化實例(網站加載慢)的文章就介紹到這了,更多相關網站性能分析優(yōu)化內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • vscode?ssh安裝librosa處理音頻的解決方法

    vscode?ssh安裝librosa處理音頻的解決方法

    這篇文章主要介紹了vscode?ssh安裝librosa處理音頻的解決方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-12-12
  • VSCode配置Lua開發(fā)環(huán)境的實現(xiàn)示例

    VSCode配置Lua開發(fā)環(huán)境的實現(xiàn)示例

    本文主要介紹了VSCode配置Lua開發(fā)環(huán)境的實現(xiàn)示例,主要包括下載及配置環(huán)境,具有一定的參考價值,感興趣的可以了解一下
    2023-09-09
  • Git Submodule管理項目子模塊的使用

    Git Submodule管理項目子模塊的使用

    這篇文章主要介紹了Git Submodule管理項目子模塊的使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-08-08
  • 詳解HBase表的數(shù)據模型

    詳解HBase表的數(shù)據模型

    HBase 是一種列存儲模式與鍵值對存儲模式結合的 NoSQL 數(shù)據庫,它具有靈活的數(shù)據模型,不僅可以基于鍵進行快速查詢,還可以實現(xiàn)基于值、列名等的全文遍歷和檢索,下面給大家介紹HBase表的數(shù)據模型,感興趣的朋友一起看看吧
    2022-05-05
  • WebStorm作用域和文件顏色詳解

    WebStorm作用域和文件顏色詳解

    這篇文章主要介紹了WebStorm作用域和文件顏色,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-06-06
  • SolidWorks?2022?安裝教程圖文詳解(含安裝包)

    SolidWorks?2022?安裝教程圖文詳解(含安裝包)

    本文詳細介紹了SolidWorks2022軟件的下載與安裝步驟,包括如何通過百度網盤獲取安裝包,修改注冊表,啟動服務,解壓安裝包,斷開互聯(lián)網連接以及軟件的安裝過程,介紹了從準備安裝文件到軟件啟動的全過程,確保用戶能夠順利完成SolidWorks2022的安裝并啟用
    2024-11-11
  • 微信小程序應用號開發(fā)體驗

    微信小程序應用號開發(fā)體驗

    這篇文章主要介紹了微信小程序(應用號)開發(fā)體驗的相關資料,需要的朋友可以參考下
    2016-09-09
  • Git的基本操作流程及工作區(qū)版本庫暫存區(qū)的關系

    Git的基本操作流程及工作區(qū)版本庫暫存區(qū)的關系

    這篇文章主要為大家介紹了Git的基本操作流程及工作區(qū)版本庫暫存區(qū)的關系,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-04-04
  • ChatGPT平替-?ChatGLM多用戶并行訪問部署過程

    ChatGPT平替-?ChatGLM多用戶并行訪問部署過程

    這篇文章主要介紹了ChatGPT平替-?ChatGLM多用戶并行訪問部署,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-05-05
  • UTC時間、GMT時間、本地時間、Unix時間戳的具體使用

    UTC時間、GMT時間、本地時間、Unix時間戳的具體使用

    本文主要介紹了UTC時間、GMT時間、本地時間、Unix時間戳的具體使用,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09

最新評論