首先,讓我們談談前端優化。80%的用戶訪問網頁的等待時間發生在瀏覽器前面,尤其是下載網頁和頁面中的各種元素(圖片、CSS、JavaScript、flash…)。因此,在許多情況下,與花費大量時間在困難和復雜的程序改進上相比,前端優化往往可以以一半的努力獲得兩倍的結果
對于第一次訪問您的網站但尚未將您的網站內容緩存在瀏覽器緩存中的用戶,我們可以做到以下幾點:
1)減少頁面訪問生成的HTTP連接數
對于第一次訪問您網站的用戶,頁面生成的HTTP連接數是影響性能的關鍵瓶頸
對策:
盡可能簡化頁面設計,盡量減少圖片使用,使用一些JavaScript技術減少不必要的頁面置換效果,如使用
-優化圖片的數量;圖像地圖技術;使用內聯圖像將CSS圖像捆綁到網頁中
-嘗試合并JS和CSS文件以減少單獨文件的數量
2)將CSS放在頁面頂部,JS文件放在頁面底部
CSS引用應放在HTML的標題中,JS文件引用應盡可能放在頁面底部的標記之后。其主要思想是盡快顯示核心頁面內容。但是,需要注意的是,對于一些使用大量JS的頁面,底部的一些JS文件可能會導致一些不可預測的問題,可以根據實際情況適當使用這些問題。具體來說,一些JavaScript壓縮工具用于壓縮JS腳本、刪除空白字符和注釋,以及最小化變量名。基于gzip壓縮,JS內容的壓縮可以將性能再提高5%
3)最小化外部腳本的使用,減少DNS查詢時間
對于網站的頻繁用戶,主要的優化思想是充分利用用戶瀏覽器的緩存,以減少服務器的開銷
4)在標題中添加過期
在標題中為靜態內容添加更長的過期時間,這樣用戶將來只能讀取緩存中的文件,而無需與服務器進行任何交互。然而,這樣做也存在一些問題。在更新圖像、CSS和JS文件時,如果用戶不刷新瀏覽器,則無法獲得更新。這樣,當我們修改圖像、CSS和JS文件時,我們必須重命名它們,以確保用戶可以訪問有價值的內容。這可能會給開發帶來很多麻煩,因為這些文件可能會被網站中的許多文件引用。Flickr提出的處理方法是通過URL重寫,使不同版本號的URL實際上指向同一個文件,這是聰明的方法,因為URL級別的操作效率非常高,可以為開發過程提供很多便利
理解原因,您必須了解瀏覽器在訪問URL時的工作方式:
a.首次訪問URL時,用戶從服務器段獲取頁面內容,放入相關文件(圖像、CSS、JS…)進入緩存,并在文件頭
B中保留過期時間、LastModified、Etag等相關信息當用戶重復訪問URL時,瀏覽器首先檢查緩存中是否有同名文件。如果是,請檢查文件的到期時間;如果文件未過期,則直接從緩存讀取文件,并且不再訪問服務器
C如果緩存中文件的過期時間不存在或已超過,瀏覽器將訪問服務器以獲取文件的標題信息,并檢查LastModified、etags和其他信息。如果發現自上次訪問以來本地緩存中的文件未被修改,將使用本地緩存中的文件
根據我的經驗,如果可能,嘗試遵循此原則來增加靜態文件的過期時間,為了大大減少用戶對服務器資源的重復訪問
5)CSS和JS文件在單獨的外部文件中引用
將CSS和JS文件放在單獨的文件中,以便它們可以單獨緩存,并且在訪問其他頁面時可以直接從瀏覽器的緩存中讀取。一些網站的主頁可能是個例外。這些主頁的自瀏覽量可能不大,但這是用戶訪問網站的***印象,也是引導用戶訪問其他頁面的起點。這些頁面本身也可能使用大量Ajax本地更新和技術。此時,CSS和JS文件可以直接寫入ie中的頁面
,包括重復的JS腳本將導致瀏覽器的緩存無法使用。仔細檢查你的程序。刪除重復的引用腳本應該不難
除了標題中的手動重定向之外,網頁重定向通常是無意中發生的,重定向的內容不會使用瀏覽器的緩存。例如,當用戶正在訪問時,服務器將轉到/通過301,后跟“/”。如果服務器配置不當,也會給服務器帶來額外負擔。通過配置Apache的別名或使用Mod_uurewritemodule等方法,可以盡可能避免不必要的重定向
還有其他方法,比如使用CDN分發機制、避免CSS表達式、避免ETag等。因為它們不常用,所以在這里不再重復
經過上述優化,您可以嘗試使用Yslow測試網頁的性能分數,通常可以達到70分以上
當然,除了優化瀏覽器前端和靜態內容外,它還優化了程序腳本、服務器、數據庫和加載。這些更深層次的優化方法對技術有更高的要求。本文的下半部分將重點討論后端優化
[991]
如何優化網站性能?對于前端和后端代碼框架優化
2,后端優化
前端優化可以盡可能避免不必要的服務器和帶寬資源浪費,但隨著網站訪問量的增加,僅靠前端優化并不能解決所有問題。后端軟件處理并行請求的能力、程序效率、硬件性能和系統可擴展性將成為影響網站性能和穩定性的關鍵瓶頸。為了優化系統和程序的性能,我們可以從以下幾個方面入手:
1)Apache、MySQL等軟件的配置優化
雖然Apache、MySQL等軟件安裝后使用的默認設置足以運行您的網站,您仍然可以通過調整MySQL和Apache的一些系統參數來追求更高的效率和穩定性。在這個領域有很多專業文章和論壇(例如:),為了掌握它,我們需要進行深入的研究和實踐,這里將不討論這些內容
Apache是一個功能齊全但相對較大的web服務器。它的資源消耗基本上與同時運行的進程數成正比。它消耗大量服務器內存,通常在處理并行任務時非常高效。在某些情況下,我們可以使用輕量級web服務器托管靜態圖像、樣式表和JavaScript文件。只有這樣,我們才能大大提高靜態文件的處理速度,并大大減少內存占用。我使用的web服務器是俄羅斯的nginx。其他選項包括lighttpd和thttpd
當當前服務器不足以處理用戶訪問時,通過前端機器進行web訪問的負載平衡是最快、最可行的方案。通過ApacheMod_u2;基于反向代理,代理可以很容易地實現負載均衡。建議使用nginx作為代理服務器,這比Apache更快
2)使用緩存技術提高數據庫效率,文件緩存和分布式緩存
3)檢查服務器的運行狀態,找出影響性能的瓶頸
無法一勞永逸地優化系統。我們需要檢查服務器的運行狀態,及時發現影響性能的瓶頸和可能存在的潛在問題,因為網站的性能總是取決于桶中的短板。你可以編寫一些腳本來檢查Web服務的運行,一些開源軟件也提供了良好的功能
一些技能和技術可以幫助你克服當前的困難,但是如果你想讓網站具備處理大規模訪問的能力,你需要從系統架構上進行仔細的規劃。幸運的是,許多前輩無私地分享了他們的建筑。