經過以上圖,能夠從三個方面來優化HTTP的性能。html
1.服務器前端
衡量服務器性能的指標,主要有如下幾個:算法
a.吞吐量(或TPS、RPS、QPS)後端
b.併發數瀏覽器
c.響應時間緩存
d.資源利用率(CPU、內存、硬盤、網絡)性能優化
-->提升吞吐量,吞吐量越高,服務器的性能越好!服務器
-->提升併發數,支持的併發數越大,服務器的性能越好!網絡
-->下降響應時間,響應時間越短,服務器的性能越好!併發
-->合理利用服務器資源,太高確定是不行,太低也有多是存在問題的!
-->Linux服務器的監控工具主要有top、sar、glances等
2.客戶端
由於數據都要經過網絡從服務器獲取,因此它最基本的性能指標就是:延遲。
所謂的「延遲」其實就是「等待」,等待數據到達客戶端時所花費的時間。
延遲的緣由,有幾點:
a.距離:因爲地理距離致使的延遲,是沒法客服的,好比訪問數千千米外的網站。
b.帶寬
c.DNS查詢(若是域名在本地沒有緩存的話)
d.TCP握手(必需要通過 SYN、SYN/ACK、ACK 三個包以後才能創建鏈接)
-->對於 HTTP 性能優化,有一個專門的測試網站:WebPageTest,或使用瀏覽器的開發者工具
-->一次 HTTP「請求 - 響應」的過程當中延遲的時間是很是大的,有可能會佔到90%以上
-->因此,客戶端優化的關鍵,下降延遲
3.傳輸鏈路(客戶端和服務器之間的傳輸鏈路)
使用CDN等技術,總之,要增長帶寬,下降延遲,優化傳輸速度。
-----------------------------------------------具體的優化手段----------------------------------------------------------
主要是優化服務端的性能。
1.前端:能夠利用PageSpeed等工具進行檢測並根據提示進行優化。
2.後端:主要有如下幾方面
a.硬件、軟件或服務
好比更換強勁的CPU、內存、磁盤、帶寬等,好比使用CDN
b.服務器選擇、參數調優
選用高性能的服務器,好比Nginx,它強大的反向代理能力實現「動靜分離」,動態頁面交給Tomcat等,靜態資源交給Nginx
另外,Nginx自身也有能夠調優的參數,好比說禁用負載均衡鎖、增大鏈接池,綁定 CPU 等
對於 HTTP 協議必定要啓用長鏈接,由於TCP 和 SSL 創建新鏈接的成本很是高,可能會佔到客戶端總延遲的一半以上
TCP 的新特性「TCP Fast Open「,相似 TLS 的「False Start」,能夠在初次握手的時候就傳輸數據,儘量在操做系統和 Nginx 裏開啓這個特性,減小外網和內網裏的握手延遲。
使用HTTP協議內置的「數據壓縮」編碼,能夠選擇標準的 gzip,也能夠嘗試新的壓縮算法 br
不過在數據壓縮的時候應當注意選擇適當的壓縮率,不是壓縮的越厲害越好
c.緩存
網站系統內部,可使用 Memcache、Redis等專門的緩存服務,把計算的中間結果和資源存儲在內存或者硬盤裏
Web 服務器首先檢查緩存系統,若是有數據就當即返回給客戶端
另外,CDN 的網絡加速功能就是創建在緩存的基礎之上的,能夠這麼說,若是沒有緩存,那就沒有 CDN。
利用好緩存功能的關鍵是理解它的工做原理,爲每一個資源都添加 ETag 和 Last-modified字段,再用 Cache-Control、Expires 設置好緩存控制屬性。
其中最基本的是 max-age 有效期,標記資源可緩存的時間。對於圖片、CSS 等靜態資源能夠設置較長的時間,好比一天或者
一個月,對於動態資源,除非是實時性很是高,也能夠設置一個較短的時間,好比 1 秒或者 5 秒。這樣一旦資源到達客戶端,就
會被緩存起來,在有效期內都不會再向服務器發送請求。