如何提高網站的性能
閱讀目錄
- 硬件方面
- 負載均衡
- Web服務器方面 - CDN
- Web服務器方面 - 獨立的圖片服務器
- Web服務器方面 - Gzip 壓縮
- Web服務器方面 - 緩存
- 減少HTTP請求
- HTML 靜態化
- HTML 優化圖片
硬件方面
購買更多的服務器, 使用高性能的CPU 和內存, 和帶寬
Web服務器方面 - 負載均衡
使用load banance 來分擔負載
Web服務器 CDN
CDN的全稱是Content Delivery Network,即 內容分發網絡 用戶“接近”你Web服務器的程度會影響響應時間。把內容部署在多個、地理位置分散的服務器上,會使頁面加載的速度從用戶角度看更快。但是我們應該從哪里開始?
作為實現地理位置分散內容的第一步,不要試圖重新設計你的Web應用程序,使它運行在一個分布式的結構中。根據應用程序,改變結構,包括跨服務器同步會話狀態和復制數據庫事務等,這些艱巨的任務。根據不同的應用,改變結構可以包括跨服務器的位置同步會話狀態和復制數據庫交易等艱巨任務。嘗試減少用戶和內容之間的距離,可以延遲,或從不通過,這是應用程序結構的步驟。
記住,最終用戶的80-90% 響應時間花費在下載所有頁面的組件:圖像、CSS、JS、Flash 等,這是提高性能的黃金法則。最好先分散你的靜態內容,如圖像、CSS、JS、Flash 等,而不是重新設計應用程序結構艱巨的工作開始。由於內容發布網絡,不僅大幅度減少了響應時間,而且簡化了應用程序。
一個 CDN 是一個處於多個位置的 Web 服務器的集合,更有效地向用戶發送內容。選擇哪個服務器發送內容給特定用戶通常是基於一個網絡評估。例如,選擇最少的網絡跳數或最快的響應時間。
一些大型的互聯網公司擁有自己的 CDN,而通過 CDN 服務提供商,如 Akamai Technologies, EdgeCast 或 level3,成本則很高。對於剛成立的公司和私人站點,一個 CDN 服務的成本可以讓人望而卻步,但當你越來越受關注,並全球化時,一個 CDN 是必需的,以便快速響應。以 Yahoo! 為例,他們把靜態內容從應用程序中移到 CDN(上面提到 CDN 服務提供商,以及他們自己的 CDN)上,提高了最終用戶 20% 以上的響應時間。使用 CDN 是一個只需要相對簡單地修改代碼,顯著改善站點速度的方法。
Web服務器 - 使用獨立的圖片服務器
大家知道,對於Web服務器來說,不管是Apache、IIS還是其他容器,圖片是最消耗資源的,於是我們有必要將圖片與頁面進行分離,這是基本上大型網站都會采用的策略,他們都有獨立的、甚至很多台的圖片服務器。這樣的架構可以降低提供頁面訪問請求的服務器系統壓力,並且可以保證系統不會因為圖片問題而崩潰。
在應用服務器和圖片服務器上,可以進行不同的配置優化,比如apache在配置ContentType的時候可以盡量少支持、盡可能少的LoadModule,保證更高的系統消耗和執行效率。
Web服務器 - 最大限度減少HTTP請求
最終用戶(the end-user)80%的響應時間花費在前端(the front-end)。大部分時間用來下載頁面中的所有組件:圖像、CSS、JS、Flash 等。因此,反過來,減少頁面組件的數量,就可以減少渲染(呈現)頁面所需的 HTTP 請求的數量。這是加快頁面的關鍵。
HTMLWeb服務器 - Gzip壓縮
在Web服務器方面, 啟用Gzip 可以減少大概 大大減少網絡傳輸的數據量 具體原理請參考 HTTP協議 (三) 壓縮
Web服務器 - 緩存
在Web服務器方面, 客戶端的緩存,能大大減少網絡傳輸的數據量, 具體原理請參考 HTTP協議 (四) 緩存
HTML靜態化
其實大家都知道,效率最高、消耗最小的就是純靜態化的html頁面,所以我們盡可能使我們的網站上的頁面采用靜態頁面來實現,這個最簡單的方法其實也是最有效的方法。但是對於大量內容並且頻繁更新的網站,我們無法全部手動去挨個實現,於是出現了我們常見的信息發布系統CMS,像我們常訪問的各個門戶站點的新聞頻道,甚至他們的其他頻道,都是通過信息發布系統來管理和實現的,信息發布系統可以實現最簡單的信息錄入自動生成靜態頁面,還能具備頻道管理、權限管理、自動抓取等功能,對於一個大型網站來說,擁有一套高效、可管理的CMS是必不可少的。
除了門戶和信息發布類型的網站,對於交互性要求很高的社區類型網站來說,盡可能的靜態化也是提高性能的必要手段,將社區內的帖子、文章進行實時的靜態化、有更新的時候再重新靜態化也是大量使用的策略,像Mop的大雜燴就是使用了這樣的策略,網易社區等也是如此。
同時,html靜態化也是某些緩存策略使用的手段,對於系統中頻繁使用數據庫查詢但是內容更新很小的應用,可以考慮使用html靜態化來實現。比如論壇中論壇的公用設置信息,這些信息目前的主流論壇都可以進行后台管理並且存儲在數據庫中,這些信息其實大量被前台程序調用,但是更新頻率很小,可以考慮將這部分內容進行后台更新的時候進行靜態化,這樣避免了大量的數據庫訪問請求。
ASP.NET 方面
啟動緩存機制,輸出頁面緩存,用戶控件緩存
禁用Viewstate 來減少所要傳輸的數據
避免在回傳事件中為控件填充數據
避免使用服務器控件
數據庫層的性能
使用存儲過程
數據庫緩存
盡晚的打開數據庫連接,盡早的關上數據庫連接
HTML方面 優化圖片
HTTP Archieve有個統計,圖片內容已經占到了互聯網內容總量的62%,也就是說超過一半的流量和時間都用來下載圖片。從性能優化的角度看,圖片也絕對是優化的熱點和重點之一
圖片優化既是一門藝術,也是一門科學,圖片優化是一門藝術,是因為單個圖片的壓縮不存在最好的特定性方案,而圖片優化之所以是一門科學,是因為許多開發得很出色的方法和算法可以明顯減小圖片的大小。要找到圖片的最優設置,需要按照許多維度進行認真分析:格式能力、編碼數據內容、像素尺寸等。
顏色豐富的照片,JPG是通用的選擇
人眼的結構很適合查看JPG壓縮后的照片,可以充分的忽略並在腦中補齊細節 JPG在壓縮率不高時保留的細節還是不錯
如果需要較通用的動畫,GIF是唯一可用的選擇
GIF支持的顏色范圍為256色,而且僅支持完全透明/完全不透明
GIF在顯示顏色豐富的動畫時可能出現顏色不全、邊緣鋸齒等問題
如果需要清晰的顯示顏色豐富的圖片,PNG比較好
PNG-8能夠顯示256種顏色,但能夠同時支持256階透明,因此顏色數較少但需要半透明的情景(如微信動畫大表情)可以考慮PNG-8
PNG-24可以顯示真彩色,但不支持透明,顏色豐富的圖片推薦使用(如屏幕截圖、界面設計圖)