天天看點

怎樣做網站性能優化?前言一、WEB前端性能優化三、資料層

前言

對于一個網站來說,優化是我們持續關注的話題,今天淺談一下網站的性能優化。

一、WEB前端性能優化

1.1、浏覽器通路優化

1、減少HTTP通路請求

HTTP協定是無狀态的應用層協定,也就是每次請求都需要建立通信鍊路,進行資料傳輸,在伺服器端,每個HTTP都需要啟動獨立的線程去處理,這樣會嚴重影響伺服器性能,也降低了響應速度,是以我們需要減少HTTP請求的數目可提高通路性能。

減少HTTP的主要方式就是合并CSS、JavaScript、圖檔,将遊覽器一次通路需要的JavaScript、CSS合并成一個檔案,多張圖檔合并成一張圖檔,這樣就減少了HTTP的通路請求,達到了通路優化的效果。

2、使用遊覽器緩存

對于一個網站來說,Logo、CSS、JavaScript、圖示這些靜态資源更新的頻率都很低,這些請求又是每次HTTP請求不可缺少的元素,是以可以根據HTTP頭中Cache-Control和Expires的屬性,設定遊覽器的緩存天數。

在某些時候,網站的靜态資源檔案需要做修改,此時對于沒有做個優化的人來說肯定是修改完靜态資源以後,然後緩存清掉(我之前在的公司就是這樣做的,那時候技術真的很爛),對于一個并發大些的網站顯然不能這樣做,這會嚴重影響性能。合理的做法就是改變檔案名實作。

3、啟用壓縮

在伺服器端對檔案進行壓縮,減少傳輸的資料量,但是壓縮會對伺服器的性能帶來一定的影響,如果帶寬足夠大,伺服器資源不足的情況下要權衡考慮。

4、減少Cookie的傳輸

太多的Cookie會嚴重影響資料傳輸,是以哪些資料需要寫入Cookie要慎重考慮,如CSS、Script等發送Cookie沒有意義,可以考慮靜态資源使用獨立的域名通路。

1.2、使用CDN加速

CDN(内容分發網絡)的本質也就是一個緩存,他能夠将資料緩存到離使用者最近的位置,使使用者可以最快的擷取資料,同時減少了資料中心的壓力,是以使用CDN可以極大的提高使用者通路速度。

1.3、使用代理伺服器

來自網際網路的通路都必須經過代理伺服器,是以我們可以将一些熱點資訊緩存到代理伺服器上,這樣其他使用者通路的時候,可以直接從代理伺服器上擷取資料,加速了WEB通路請求速度,減輕了WEB伺服器的負載壓力。此外使用反向代理可以實作負載均衡的功能,而通過負載均衡建構的應用叢集,可以提高系統的總體處理能力,進而改善網站高并發下的性能。

二、應用伺服器性能優化

應用伺服器就是網站業務伺服器,代碼都部署在此,優化手段主要是緩存、叢集、異步

2.1、使用緩存技術

現在用的最多的應該是Memcache,他使用libevent事件處理,是以性能較好,但是他不支援持久化,資料都儲存在記憶體中,但是現在我們可以使用Couchbase叢集,來保證資料的持久化。

2.2、異步操作

由上圖看出來,在不使用消息隊列的情況下,資料直接寫入資料庫中,在這高并發的情況下,會對資料庫造成巨大壓力,同時也導緻響應延遲加劇。在使用消息隊列情況下使用者請求的資料發送給消息隊列之後,立即傳回,再有消息隊列異步的寫入資料庫,因為消息隊列的處理速度要遠遠大于資料庫,是以使用者的響應延遲可以得到有效改善。

2.3、使用叢集

網站在高并發的情況下,使用負載均衡技術為一個應用建構一個由多台伺服器組成的叢集,将并發請求分發到多台伺服器上處理,可以有效的避免單節點壓力過大的情況。 

2.4、代碼優化

劣質代碼對伺服器性能的影響也是蠻大的,曾經遇到過代碼裡面出現了死循環,導緻系統負載過高,嚴重降低的伺服器性能是以代碼的優化很重要,可以從以下幾個方面考慮

  1. 多線程
  2. 資源複用
  3. 垃圾回收

三、資料層

我們拿Mysql舉例來說,無非就是讀寫,下面我們詳細分析一下這兩中情況

3.1、資料庫讀請求多(大多數網站遇到的情況)

  1. 增加伺服器的記憶體,給資料庫配置設定更多的記憶體
  2. 使用主從架構做讀寫分離降低單台資料庫的壓力,從庫可以使用lvs做負載均衡
  3. 使用緩存系統來緩存資料庫的熱點資訊,減少通路資料庫的次數降低資料庫壓力

3.2、資料庫寫入較多

  1. 合理的使用Raid級别不過多數都是Raid10既保證了性能也保證了備援
  2. 使用緩存較大的Raid卡
  3. 使用固态硬碟
  4. 将主庫拆分,可以根據業務的耦合度做拆分