從程序角度分析網站,都是我的拙見,記錄看看。前端
一、網站打開體驗,速度慢的優化方案:
@ 優化方案
前端架構優化;調整瀏覽器緩存、併發、異步特性;使用CDN服務;反向代理等;等。
@ 後端方案
緩存數據加速數據獲取;使用集羣改善請求吞吐量;請求使用異步消息隊列加快相應;代碼優化;等。
@ 運維方案
網絡運營商的帶寬能力及穩定性;服務器硬件的配置;數據中心的網絡架構;虛擬化技術優化資源利用;等。算法
二、網站的性能分析要從這幾個點分析:
@ 響應時間
執行一個操做的時間,包括從發出請求開始到收到最後響應數據所須要的時間。
@ 併發數
指系統可以同時處理請求的數目,即網站的併發用戶數,指同時提交請求的用戶數目。
@ 吞吐量
指單位時間內系統處理完的請求數量,體現系統的總體處理能力。
@ 性能計數器
描述服務器或操做系統性能的數據指標。包括對象與線程數、內存使用、CPU使用、磁盤與網絡I/O等指標。
實際開發中,可依據以上幾個點的測試結果針對性的對網站進行優化方案。數據庫
三、Web前端性能優化
@ 瀏覽器訪問優化方案
* 減小HTTP請求:合併CSS,合併圖片,合併JavaScript 等手段減小瀏覽器對網站的請求次數。
* 使用瀏覽器緩存:對於靜態文件資源,更新率比較低的資源能夠緩存到瀏覽器中,用來減小請求次數。
* 使用壓縮:服務器端對文件進行壓縮,瀏覽器端對文件解壓縮,以此減小通訊傳輸的數據量。
對HTML、CSS、JavaScript文件啓用GZip壓縮能夠達到很好的效果。
* CSS放頁面最上面,JavaScript放在頁面最下面:依據兩種文件執行的時間原理分析便可。
* 儘可能減小cookie的傳輸,太大的cookie會嚴重影響數據傳輸。
@ CDN方案
* 內容分發網絡:CDN可以緩存的通常是靜態資源,如圖片、文件、CSS、JavaScript腳本、靜態網頁等,並且這些文件訪問頻率很高,
將其緩存在CDN可極大改善網站的打開速度。
@ 反向代理
* 代理服務器:合理有效的分配資源到相應的服務器,實現負載均衡的效果。
此外反向代理服務器也能夠將靜態資源緩存起來,當請求網站時,第一時間將資源返回相應客戶端。後端
四、應用服務器性能優化
網站的業務代碼都部署在這裏,也是網站變化最多的,開發最複雜的地方。
@ 分佈式緩存
* 網站性能優化第必定律:優先使用緩存優化性能
緩存主要用來存放那些讀寫比很高、不多變化的數據,讀數據優先在緩存中獲取,失效的狀態再去訪問數據庫。
依據二八定律,即80%的訪問落在20%的數據上,便可將這20%的數據緩存起來,以此改善數據訪問的響應時間。
* 合理使用緩存須要考慮的問題
不要頻繁修改數據;
對於不遵循二八定律的數據沒有必要使用;
對數據不一致的問題預設解決方案;
* 防範緩存穿透
將不存在的值也緩存起來,將其值設置NULL,防止惡意訪問數據庫爲目的的操做;
* 分佈式緩存架構
這裏不細講你們應該也知道原理,簡單介紹三種。
# JBoss Cache:須要更新同步,代價大,多用於企業,中等數據量;
# Memcached(互不通訊)、Redis(互不通訊),Redis是我本身加上的感受也是能夠這樣使用的,多臺架構時,緩存的邏輯可添加到應用程序中,
記錄對應一個算法結果將數據存放到不一樣的緩存服務器中,取得時候經算法後去對應的緩存中獲取結果;
@ 集羣
多臺服務器分佈,配合負載均衡使用。
@ 異步
使用消息隊列,將調用異步化,進而改善性能。
注意:異步化以後,要針對業務流程進行分析,不須要異步的業務須要進行應對方案,以防產生很差的體驗或糾紛問題。
@ 代碼優化
合理的優化業務代碼,能夠很好的改善網站的性能
這裏相對要注意的幾個問題:
* 多線程
多線程併發對某個資源修改操做,會致使數據錯亂。
* 資源複用
儘可能減小開銷大的資源建立/銷燬,好比數據庫鏈接、線程、複雜對象等。
能夠適當使用單例模式和對象池。
* 合理的使用數據結構 改善數據讀寫和計算特性 進而優化程序的性能。
* 垃圾回收機制瀏覽器
五、存儲服務器性能優化
@ 固態硬盤 > 機械硬盤
@ 存儲服務 在數據方面的優化,詳細可查看數據庫優化方面的文章。緩存
在以上的優化方案中,涉及集羣方面的方案,分佈式能夠改善網站併發特性,可是也會帶來通訊延遲的問題,設計架構的同時內心有數,合理調整該方案的預期。
性能優化