簡介
性能優化的第一准則:加緩存
。幾乎絕大部分優化都圍繞這個來進行的。讓用戶最快的看到結果。
性能優化的第二准則:最小原則
。絕不提供多余的信息。比如,靜態資源(圖片、css、js)壓縮,圖片的滾動加載,異步請求,http請求合並等。
性能優化的第三准則:分布、集群
。當前,這個的前提是已經把基本優化都做完了,才考慮這個方面。
思路
性能優化的過程是一個鏈條,任何一個節點上都要優化,否則都會出問題,優化也就失敗了。
每個節點上都包含這幾個方面
- 定位。定位這個節點是否有存在性能問題。
- 監控。監控這個節點的性能問題。
- 解決問題的辦法(文檔)。減少人為解決問題的成本。
后面的文章也是根據流程,一個節點一個節點來組織
性能類型
包括但不僅限於下面的幾種類型。下面的這些,僅僅是基於我們團隊使用的技術而言。如果有使用更多的技術可以往里面補充,比如說:cdn緩存加速等。
瀏覽器
瀏覽器是用戶接觸的第一道程序。往往在這里的優化很直接、簡單,而且效果反而會很好。
- 資源靜態緩存
- 資源靜態按需加載
網絡
目前網絡還是比較嚴重的性能瓶頸。商用的企業帶寬也比較貴,所以優化是非常有必要的。
- 合並請求
- 壓縮傳輸(gzip)
- 壓縮http的response內容
服務器
首先要確保每一個軟件本身已經是優化過的,而且對應的軟件的應用場景也是優化過。
- 操作系統(linux)
- 代理(nginx)
- web容器(tomcat)
- web應用(java)
- 數據庫(mysql)
架構
架構的統一解決,可以讓開發在一定的程序減少對性能的考慮。
- 業務規划。比如說:動靜分離,並且使用不同域名。
- 分布。把重要的應用分布部署,獨立提供服務。
- 集群。集群+負載均勻,是解決性能很直接的問題。但是最后放在所有的性能已經是最佳的情況下,再去考慮集群。這樣會減少運維成本及資金成本。
- 緩存化。把熱點命中的內容,又使用非常頻率的使用緩存。要考慮使用的場景和命中率。
- 靜態化。把常年不變的內容,都走靜態化,是一個非常棒的想法。最好是做成對業務透明,無影響。
軟件研發
很多性能問題是在研發的過程中產生的。
- 高性能的設計。比如:合理的數據庫字段冗余。比如算法的復雜度。
- 高性能的規范。比如:不允許for里有io等。
- 高性能的標准。每個業務,要有一個標准,超過這個標准要要優化。不用每一個都必須優化,這樣也影響開發效率。有目的的優化,8/2比例。用20%的時間,解決80%有性能問題。
框架
- 消息隊列。解決復雜場景,不需要用戶等待。如果解決實效性沒那么強的業務。
語言(java)
對虛擬機的優化。
流程
熟悉流程及節點,才能定位性能的問題。而且優化的順序一般也是按請求的流程逐一優化。這里的流程只是做個概要,並不代表全面。
整個流程是以最快的方式讓用戶看到結果
重復問題
如果有重復的問題,交給更高層節點(流程里的前一個節點)去解決。比如說:如果能在代理級別做靜態和緩存,就不要在web容器里去實現,更不要在web應用里去實現。
文檔的統一結構
- 場景
- 解決方案
- 驗證方法
更高目標暢想
通過雲計算來實現這些功能。