
發(fā)布者: 上海開眼SEO優(yōu)化
SEO優(yōu)化中如何優(yōu)化網(wǎng)站內(nèi)的性能
一.前端優(yōu)化
網(wǎng)站性能優(yōu)化是一個非常全面的課題,涉及到服務(wù)器配置和網(wǎng)站前后端程序等方面,我只是從實(shí)際經(jīng)驗(yàn)出發(fā),來分享我所嘗試的網(wǎng)站性能優(yōu)化方法。在標(biāo)題上掛一個web2.0的原因是本文更多地關(guān)注中小型網(wǎng)站的性能優(yōu)化,而我使用的系統(tǒng)也是典型的web2.0燈架構(gòu)。
首先,關(guān)于前端的優(yōu)化,用戶訪問網(wǎng)頁的等待時間,80%發(fā)生在瀏覽器的前端,特別是在頁面和頁面上的各種元素(圖片,cjavascript,flash…)下載。因此,在許多情況下,前端優(yōu)化通常有乘數(shù)效應(yīng)相對于花費(fèi)大量時間在艱難和復(fù)雜的程序改進(jìn)。雅虎最近向第三方公布了內(nèi)部性能測試工具yslow,并發(fā)布了著名的網(wǎng)站性能優(yōu)化13條規(guī)則,建議您下載并安裝yslow作為評估網(wǎng)站性能的工具。我將挑選一些最有價(jià)值的優(yōu)化細(xì)節(jié):
第一次訪問站點(diǎn)時,那些尚未在瀏覽器緩存中緩存站點(diǎn)內(nèi)容的用戶可以做以下事情:
1.減少一頁訪問產(chǎn)生的http連接數(shù)
對于首次訪問站點(diǎn)的用戶來說,頁面生成的http連接數(shù)量是影響性能的關(guān)鍵瓶頸。
答復(fù):
最小化頁面設(shè)計(jì),最小化圖像的使用,并通過放棄頁面效果減少javascript的使用。
-使用一些優(yōu)化技術(shù),如利用圖像的背景位移來減少圖像的數(shù)量;使用圖像AP技術(shù);使用inli
-合并js和cs文件以減少獨(dú)立文件的數(shù)量。
2.使用gzip壓縮網(wǎng)頁內(nèi)容
使用gzip壓縮網(wǎng)頁中的靜態(tài)內(nèi)容可以顯著減少用戶訪問網(wǎng)頁時的等待時間(據(jù)說是60%)。主流Web服務(wù)器支持或提供gzip壓縮,如果使用apache服務(wù)器,只需在配置文件中啟動modgz(apache1.x)或moddefault(apache2.x)。任何靜態(tài)頁面,使用gzip壓縮可以顯著提高服務(wù)器效率和減少帶寬開銷,注意圖像內(nèi)容本身是壓縮格式,不需要再次壓縮。
3.將css放在頁面頂部,js文件放在頁面底部
css引用將被放置在html的頭部,js文件引用將盡可能放置在頁面底部標(biāo)簽后面。主要的想法是盡快顯示核心頁面內(nèi)容。但是,請注意,大量使用js的頁面可能在底部有一些js文件,這可能導(dǎo)致一些不可預(yù)測的問題,可以適當(dāng)?shù)貞?yīng)用于實(shí)際情況。
4.盡量減少js文件的內(nèi)容
具體來說,您可以使用一些javascript壓縮工具來壓縮js腳本,刪除空白字符、注釋和最小化變量名?;趃zip壓縮,js內(nèi)容的壓縮提高了5%的性能。
5.盡量減少外部腳本的使用,減少dns查詢時間
不要在網(wǎng)頁上引用太多的外部腳本。首先,dns解析過程可能需要20-120毫秒;其次,如果頁面上引用太多的外部文件(如廣告、聯(lián)盟等),那么由于文件的速度,您可能會拖動網(wǎng)站太慢。如果必須的話,試著把腳本放在腳本上。但是,應(yīng)該注意到,瀏覽器通常只能并行處理同一域下的兩個請求,而不限制不同子域的域名,因此將該站點(diǎn)靜態(tài)內(nèi)容(css,js)放在其他域名(mtatic.x.x.x)下將有助于提高瀏覽器并行下載Web內(nèi)容的能力。
定期訪問站點(diǎn)的主要思想是最大限度地利用用戶瀏覽器緩存來減少服務(wù)器開銷。
6.添加過期時間
在頭部中為靜態(tài)內(nèi)容添加更長的過期時間,以便用戶在未來只能訪問緩存中的文件,而不需要與服務(wù)器進(jìn)行任何交互。但是,這樣做還有一些問題,當(dāng)圖像、css和js文件被更新時,用戶不能在沒有刷新瀏覽器的情況下獲得更新。這樣,當(dāng)我們修改圖像、css和js文件時,我們必須重命名它們以確保用戶訪問最新內(nèi)容。這可能會給開發(fā)帶來很多麻煩,因?yàn)檫@些文件可能被站點(diǎn)上的許多文件引用。flickr提出的解決方案實(shí)際上是通過urlr將不同版本的url指向同一個文件,這是一個聰明的方法,因?yàn)閡rl級別高效,可以為開發(fā)過程提供很多便利。
要理解為什么要這樣做,重要的是要理解瀏覽器在訪問url時如何工作:
用戶從服務(wù)器段獲取頁面內(nèi)容,并將相關(guān)文件(圖片、css、js和jellp)放入高內(nèi)存中。
當(dāng)u.l被重復(fù)讀取時,瀏覽器首先查看在高速緩存中是否有一個名稱相同的文件(如果有的話),檢查文件的過期;如果沒有過期,直接從緩存讀取文件,不再訪問服務(wù)器。
7.沒設(shè)過期時間會怎樣
如果服務(wù)緩存中沒有存在或超過文件的過期時間,瀏覽器訪問服務(wù)器頭以獲取文件,檢查諸如lasdif和eta等信息,如果發(fā)現(xiàn)本地緩存中的文件在上次訪問之后沒有修改,則使用本地緩存中的文件;如果修改了,則從服務(wù)器獲取最新版本。
如果可能的話,我的經(jīng)驗(yàn)是遵循這個原則為靜態(tài)文件添加過期時間,這可以大大減少用戶對服務(wù)器資源的重復(fù)訪問。
8.在單獨(dú)的外部文件中引用css和js文件
將css和js文件保存在單獨(dú)的文件中,以便在訪問其他頁面時可以單獨(dú)緩存和直接從瀏覽器的緩存讀取。除了主頁外,有些網(wǎng)站可能沒有多少自己的瀏覽功能,但是這是用戶訪問該網(wǎng)站的第一印象,也是使用大量aja部門刷新和技術(shù)導(dǎo)航到其他頁面的能力,除了直接寫在頁面上的cs和js。
9.刪除重復(fù)的腳本
在ie中,包含重復(fù)的js腳本會導(dǎo)致瀏覽器的緩存不被使用,仔細(xì)檢查程序,刪除引用的腳本不會困難。
10.避免重新定位
除了頭文件中的重定向外,頁面重定向往往不經(jīng)意地發(fā)生,被重定向的內(nèi)容不會使用瀏覽器緩存。例如,當(dāng)用戶訪問時,服務(wù)器轉(zhuǎn)到/通過301并在后面添加“/”。如果服務(wù)器配置不好,這也會給服務(wù)器帶來額外負(fù)擔(dān)。您可以通過配置apache的別名或使用mod重寫模塊來避免不必要的重定向。
還有其他事情,比如使用cdn分發(fā)機(jī)制,避免使用css表達(dá)式,避免使用etags等等,因?yàn)樗鼈儾怀1皇褂茫疫@不會重復(fù)。
在進(jìn)行上述優(yōu)化后,您可以嘗試用yslow測試網(wǎng)頁的性能分?jǐn)?shù),一般可以達(dá)到70分以上。
當(dāng)然,除了瀏覽器前端和靜態(tài)內(nèi)容優(yōu)化外,還有程序腳本、服務(wù)器、數(shù)據(jù)庫、負(fù)載優(yōu)化,這些更深層次的優(yōu)化方法都有更高的技術(shù)要求。下半部分將重點(diǎn)討論后端優(yōu)化。
二.后端優(yōu)化
在上次完成web2.0前端優(yōu)化部分之后,一直在嘗試編寫后端優(yōu)化方法,現(xiàn)在有時間來理清這些想法。
前端優(yōu)化可以避免不必要的服務(wù)器、帶寬和帶寬資源,但隨著站點(diǎn)訪問量的增加,單靠前端優(yōu)化是不可能解決所有問題的。優(yōu)化系統(tǒng)和方案的性能可以從以下方面開始:
1.Apache和Mysql軟件配置的優(yōu)化
而像apache和mysql這樣的軟件在安裝后使用默認(rèn)設(shè)置來使站點(diǎn)運(yùn)行,調(diào)整mysql和apache的一些系統(tǒng)參數(shù)仍然可以更加高效和穩(wěn)定。在這一領(lǐng)域有許多專業(yè)文章和論壇(例如,
2.應(yīng)用環(huán)境加速
例如,在我最流行的php開發(fā)環(huán)境中,有一些工具可以通過優(yōu)化php運(yùn)行環(huán)境來加快速度,基本原則是在不改變?nèi)魏未a的情況下預(yù)編譯和緩存php代碼,因此可以很容易地將php運(yùn)行效率提高50%以上。更常用的php加速器:apc(http/pecl.php.net/package-info.php?apc,turcm
3.分離靜態(tài)和動態(tài)內(nèi)容
apache是一個功能齊全但規(guī)模較大的Web服務(wù)器,其資源占用與同時運(yùn)行的進(jìn)程數(shù)量基本成正比,消耗了服務(wù)器上大量的內(nèi)存,并且處理并行任務(wù)的效率也是一般的。在某些情況下,我們可以使用重量較輕的Web服務(wù)器來擁有靜態(tài)圖像、樣式表和javascript文件,這可以大大提高靜態(tài)文件的處理速度,減少內(nèi)存占用。我使用的是來自俄羅斯的nginx,其他選項(xiàng)包括lighttpd和thtpd。
4.基于反向代理的前端訪問負(fù)載均衡
當(dāng)前端服務(wù)器不足以處理用戶訪問時,通過前端服務(wù)器實(shí)現(xiàn)Web訪問負(fù)載均衡是最快和可行的方案?;诜聪虼淼呢?fù)載均衡可以通過apache的mod代理實(shí)現(xiàn),建議使用nginx作為代理服務(wù)器,以便比apache更快地進(jìn)行處理。
5.應(yīng)用緩存技術(shù)提高數(shù)據(jù)庫效率、文件緩存和分布式緩存
數(shù)據(jù)庫訪問并發(fā)訪問能力是許多Web應(yīng)用程序的關(guān)鍵瓶頸,在考慮使用主從結(jié)構(gòu)和多農(nóng)場構(gòu)建服務(wù)器集群之前,應(yīng)該確保數(shù)據(jù)庫查詢緩存得到充分利用。某些數(shù)據(jù)庫類型,例如mysql的innodb,內(nèi)置支持緩存,還可以使用程序方法通過文件或內(nèi)存緩存常見查詢。例如,php和php中的對象可以很容易地以文件的形式緩存,如果有多個服務(wù)器,則可以使用memcache技術(shù)使用分布式共享內(nèi)存緩存數(shù)據(jù)庫查詢,不僅效率高,而且具有良好的可擴(kuò)展性。
6.檢測服務(wù)器運(yùn)行狀態(tài),找出影響性能的瓶頸
系統(tǒng)優(yōu)化沒有一刀切的方法,這就要求通過檢測服務(wù)器運(yùn)行狀態(tài)及時發(fā)現(xiàn)性能瓶頸和潛在問題,因?yàn)檎军c(diǎn)的性能總是取決于桶中的短板。您可以編寫腳本來檢測Web服務(wù),一些開源軟件提供了良好的功能
良好的擴(kuò)展架構(gòu)是穩(wěn)定性和性能的基礎(chǔ)
一些技巧和技巧可以幫助你渡過困難時期,但是如果你希望你的網(wǎng)站能夠應(yīng)付大規(guī)模訪問,你需要一個徹底的系統(tǒng)架構(gòu)。