當前位置:編程學習大全網 - 編程語言 - 如何進行網站性能優化

如何進行網站性能優化

壹、前端優化

網站性能優化是壹個很綜合的話題,涉及到服務器的配置和網站前後端程序等各個方面,我只是從實際經歷出發,分享壹下自己所嘗試過的網站性能優化方法。之所以在標題上掛壹個web2.0,是因為本文更偏重於中小網站的性能優化,我所使用的系統也是典型web2.0的LAMP架構。

首先講講前端的優化,用戶訪問網頁的等待時間,有80%是發生在瀏覽器前端,特別是頁面和頁面中各種元素(圖片、CSS、Javascript、flash)的下載之上。因此在很多情況下,相對於把大量的時間花在艱苦而繁雜的程序改進上,前端的優化往往能起到事半功倍的作用。雅虎最近將內部使用的性能測試工具yslow向第三方公開,並發布了著名的網站性能優化的十三條規則,建議妳下載並安裝yslow,並作為測評網站優化效果的工具。下面我挑其中特別有價值的具體說明壹下優化的方法:

對於第壹次訪問您網站,尚未在瀏覽器cache中緩存您網站內容的用戶,我們可以做的事情包括:

1)減少壹個頁面訪問所產生的)會有利於提高瀏覽器並行下載網頁內容的能力。

對於您網站的經常性訪問用戶,主要的優化思路就是最大限度利用用戶瀏覽器的cache來減少服務器的開銷。

1)在header中添加過期時間(ExpiresHeader)

在header中給靜態內容添加壹個較長的過期時間,這樣可以使用戶今後訪問只讀取緩存中的文件,而不會與服務器產生任何的交互。不過這樣做也存在壹些問題,當圖片、CSS和js文件更新時,用戶如果不刷新瀏覽器,就無法獲得此更新。這樣,我們在對圖片、css和js文件修改時,必須要進行重命名,才能保證用戶訪問到最新的內容。這可能會給開發造成不小的麻煩,因為這些文件可能被站點中的許多文件所引用。flickr提出的解決辦法是通過urlrewrite使不同版本號的URL事實上指向同壹個文件,這是壹個聰明的辦法,因為url級別的操作效率是很高的,可以給開發過程提供不少便利。

要理解為什麽這樣做,必須要了解瀏覽器訪問url時的工作機制:

a.第壹次訪問url時,用戶從服務器段獲取頁面內容,並把相關的文件(images,css,js)放在高速緩存中,也會把文件頭中的expiredtime,lastmodified,ETags等相關信息也壹同保留下來。

b.用戶重復訪問url時,瀏覽器首先看高速緩存中是否有本站同名的文件,如果有,則檢查文件的過期時間;如果尚未過期,則直接從緩存中讀取文件,不再訪問服務器。

c.如果緩存中文件的過期時間不存在或已超出,則瀏覽器會訪問服務器獲取文件的頭信息,檢查lastmodifed和ETags等信息,如果發現本地緩存中的文件在上次訪問後沒被修改,則使用本地緩存中的文件;如果修改過,則從服務器上獲取最新版本。

我的經驗,如果可能,盡量遵循此原則給靜態文件添加過期時間,這樣可以大幅度減少用戶對服務器資源的重復訪問。

2)將css和js文件放在獨立外部文件中引用

將css和js文件放在獨立文件中,這樣它們會被單獨緩存起來,在訪問其他頁面時可以從瀏覽器的高速緩存中直接讀取。壹些網站的首頁可能是例外的,這些首頁的自身瀏覽可能並不大,但卻是用戶訪問網站的第壹印象以及導向到其他頁面的起點,也可能這些頁面本身使用了大量的ajax局部刷新及技術,這時可以將css和js文件直接寫在頁面中。

3)去掉重復的腳本

在IE中,包含重復的js腳本會導致瀏覽器的緩存不被使用,仔細檢查壹下妳的程序,去掉重復引用的腳本應該不是壹件很難的事情。

4)避免重定向的發生

除了在header中人為的重定向之外,網頁重定向常在不經意間發生,被重定向的內容將不會使用瀏覽器的緩存。比如用戶在訪問,服務器會通過301轉向到/,在後面加了壹個“/”。如果服務器的配置不好,這也會給服務器帶來額外的負擔。通過配置apache的alias或使用mod_rewrite模塊等方法,可以避免不必要的重定向。

還有壹些,比如使用CDN分發機制、避免CSS表達式等、避免使用ETags等,因為不太常用,這裏就不再贅述了。

做完了上述的優化,可以試著用yslow測試壹下網頁的性能評分,壹般都可以達到70分以上了。

當然,除了瀏覽器前端和靜態內容的優化之外,還有針對程序腳本、服務器、數據庫、負載的優化,這些更深層次的優化方法對技術有更高的要求。本文的後半部分將重點探討後端的優化。

二、後端優化

上次寫完web2.0網站前端優化篇之後,壹直想寫寫後端優化的方法,今天終於有時間將思路整理了出來。

前端優化可以避免我們造成無謂的服務器和帶寬資源浪費,但隨著網站訪問量的增加,僅靠前端優化已經不能解決所有問題了,後端軟件處理並行請求的能力、程序運行的效率、硬件性能以及系統的可擴展性,將成為影響網站性能和穩定的關鍵瓶頸所在。優化系統和程序的性能可以從以下的方面來入手:

1)apache、mysql等軟件的配置的優化

盡管apache和mysql等軟件在安裝後使用的默認設置足以使妳的網站運行起來,但是通過調整mysql和apache的壹些系統參數,還是可以追求更高的效率和穩定性。這個領域中有很多專業的文章和論壇(比如:),要想掌握也需要進行深入的研究和實踐,這裏就不重點討論了。

2)應用程序環境加速

這裏僅以我最常應用的php開發環境為例,有壹些工具軟件可以通過優化PHP運行環境來達到提速的目的,其基本原理大致是將PHP代碼預編譯並緩存起來,而不需要改變任何代碼,所以比較簡單,可以將php的運行效率提升50%以上。比較常用的php加速工具有:APC(package-info.php?package=APC)、TurckMMCache()、phpaccelebrator(),還有收費的ZendPerformanceSuite

3)將靜態內容和動態內容分開處理

apache是壹個功能完善但比較龐大的webserver,它的資源占用基本上和同時運行的進程數呈正比,對服務器內存的消耗比較大,處理並行任務的效率也壹般。在壹些情況下,我們可以用比較輕量級的webserver來host靜態的圖片、樣式表和javascript文件,這樣可以大大提升靜態文件的處理速度,還可以減少對內存占用。我使用的webserver是來自俄羅斯的nginx,其他選擇方案還包括lighttpd和thttpd等。

4)基於反向代理的前端訪問負載均衡

當壹臺前端服務器不足以應付用戶訪問時,通過前端機實現web訪問的負載均衡是最快速可行的方案。通過apache的mod_proxy可以實現基於反向代理的負載均衡,這裏推薦使用nginx做代理服務器,處理速度較apache更快壹些。

5)應用緩存技術提高數據庫效能,文件緩存和分布式緩存

數據庫訪問處理並發訪問的能力是很多網站應用的關鍵瓶頸,在想到使用主從結構和多farm的方式構建服務器集群之前,首先應該確保充分使用了數據庫查詢的緩存。壹些數據庫類型(如mysql的innoDB)自身內置對緩存的支持,此外,還可以利用程序方法將常用的查詢通過文件或內存緩存起來。比如通過php中的ob_start和文件讀寫函數可以很方便的實現文件形式的緩存,而如果妳擁有多臺服務器,可以通過memcache技術通過分布式***享內存來對數據庫查詢進行緩存,不僅效率高而且擴展性好,memcache技術在livejournal和Craigslist.org等知名網站應用中都得到了檢驗。

6)服務器運行狀態的檢測,找到影響性能的瓶頸所在

系統優化沒有壹勞永逸的方法,需要通過檢測服務器的運行狀態來及時發現影響性能的瓶頸,以及可能存在的潛在問題,因為網站的性能,永遠取決於木桶中的短板。可以編寫壹些腳本來檢測web服務的運行,也有壹些開源的軟件也提供了很好的功能

7)良好的擴展架構是穩定和性能的基礎

壹些技巧和竅門可以幫妳度過眼前的難關,但要想使網站具備應付大規模訪問的能力,則需要從系統架構上進行徹底的規劃,好在很多前人無私的把他們架構

網站的經驗分享給我們,使我們可以少走甚多彎路。我最近讀到的兩篇有啟發的文章:

-從LiveJournal後臺發展看大規模網站性能優化方法

-Myspace的六次重構

最後不得不提到程序編碼和數據庫結構對性能的影響,壹系列糟糕的循環語句,壹個不合理的查詢語句、壹張設計不佳的數據表或索引表,都足以會使應用程序運行的速度成倍的降低。培養全局思考的能力,養成良好的編程習慣,並對數據庫運行機制有所了解,是提高編程質量的基礎。

  • 上一篇:人工智能專業工資多少薪資待遇高嗎
  • 下一篇:新目標英語九年級(全壹書)單詞感謝
  • copyright 2024編程學習大全網