国产又色又爽又黄又免费|国产福利精品一区二区|国产黄页免费网站在线|国产高清美女一级毛片久久|国产极品粉嫩白浆清纯在线|国产黄色无码精品视频

首頁(yè) > SEO動(dòng)態(tài) > 網(wǎng)站技術(shù)重溫網(wǎng)站頁(yè)面性能優(yōu)化的34條黃金守則

重溫網(wǎng)站頁(yè)面性能優(yōu)化的34條黃金守則

我們經(jīng)常花了大量的時(shí)間來(lái)優(yōu)化后端的性能,例如減數(shù)據(jù)庫(kù)查詢資料,減少IO等,甚至提交服務(wù)器配置等操作來(lái)實(shí)際網(wǎng)站的性能上的提升,熟不知前面所述的努力遠(yuǎn)不如前端上進(jìn)行少量的優(yōu)化來(lái)得直接和更明顯的效果,但我們偏偏容易忽略這一點(diǎn),還是最實(shí)用的雅虎34條優(yōu)化準(zhǔn)備,我重新溫習(xí)一下。

重溫網(wǎng)站頁(yè)面性能優(yōu)化的34條黃金守則

1、盡量減少HTTP請(qǐng)求次數(shù)

終端用戶響應(yīng)的時(shí)間中,有80%用于下載各項(xiàng)內(nèi)容。這部分時(shí)間包括下載頁(yè)面中的圖像、樣式表、腳本、Flash等。通過(guò)減少頁(yè)面中的元素可以減少HTTP請(qǐng)求的次數(shù)。這是提高網(wǎng)頁(yè)速度的關(guān)鍵步驟。

減少頁(yè)面組件的方法其實(shí)就是簡(jiǎn)化頁(yè)面設(shè)計(jì)。那么有沒(méi)有一種方法既能保持頁(yè)面內(nèi)容的豐富性又能達(dá)到加快響應(yīng)時(shí)間的目的呢?這里有幾條減少HTTP請(qǐng)求次數(shù)同時(shí)又可能保持頁(yè)面內(nèi)容豐富的技術(shù)。

合并文件是通過(guò)把所有的腳本放到一個(gè)文件中來(lái)減少HTTP請(qǐng)求的方法,如可以簡(jiǎn)單地把所有的CSS文件都放入一個(gè)樣式表中。當(dāng)腳本或者樣式表在不同頁(yè)面中使用時(shí)需要做不同的修改,這可能會(huì)相對(duì)麻煩點(diǎn),但即便如此也要把這個(gè)方法作為改善頁(yè)面性能的重要一步。

CSS Sprites是減少圖像請(qǐng)求的有效方法。把所有的背景圖像都放到一個(gè)圖片文件中,然后通過(guò)CSS的background-image和background-position屬性來(lái)顯示圖片的不同部分;

圖片地圖是把多張圖片整合到一張圖片中。雖然文件的總體大小不會(huì)改變,但是可以減少HTTP請(qǐng)求次數(shù)。圖片地圖只有在圖片的所有組成部分在頁(yè)面中是緊挨在一起的時(shí)候才能使用,如導(dǎo)航欄。確定圖片的坐標(biāo)和可能會(huì)比較繁瑣且容易出錯(cuò),同時(shí)使用圖片地圖導(dǎo)航也不具有可讀性,因此不推薦這種方法;

內(nèi)聯(lián)圖像是使用data:URL scheme的方法把圖像數(shù)據(jù)加載頁(yè)面中。這可能會(huì)增加頁(yè)面的大小。把內(nèi)聯(lián)圖像放到樣式表(可緩存)中可以減少HTTP請(qǐng)求同時(shí)又避免增加頁(yè)面文件的大小。但是內(nèi)聯(lián)圖像現(xiàn)在還沒(méi)有得到主流瀏覽器的支持。

減少頁(yè)面的HTTP請(qǐng)求次數(shù)是你首先要做的一步。這是改進(jìn)首次訪問(wèn)用戶等待時(shí)間的最重要的方法。如同Tenni Theurer的他的博客Browser Cahe Usage - Exposed!中所說(shuō),HTTP請(qǐng)求在無(wú)緩存情況下占去了40%到60%的響應(yīng)時(shí)間。讓那些初次訪問(wèn)你網(wǎng)站的人獲得更加快速的體驗(yàn)吧!

2、減少DNS查找次數(shù)

域名系統(tǒng)(DNS)提供了域名和IP的對(duì)應(yīng)關(guān)系,就像電話本中人名和他們的電話號(hào)碼的關(guān)系一樣。當(dāng)你在瀏覽器地址欄中輸入www.dudo.org時(shí),DNS解析服務(wù)器就會(huì)返回這個(gè)域名對(duì)應(yīng)的IP地址。DNS解析的過(guò)程同樣也是需要時(shí)間的。一般情況下返回給定域名對(duì)應(yīng)的IP地址會(huì)花費(fèi)20到120毫秒的時(shí)間。而且在這個(gè)過(guò)程中瀏覽器什么都不會(huì)做直到DNS查找完畢。

緩存DNS查找可以改善頁(yè)面性能。這種緩存需要一個(gè)特定的緩存服務(wù)器,這種服務(wù)器一般屬于用戶的ISP提供商或者本地局域網(wǎng)控制,但是它同樣會(huì)在用戶使用的計(jì)算機(jī)上產(chǎn)生緩存。DNS信息會(huì)保留在操作系統(tǒng)的DNS緩存中(微軟Windows系統(tǒng)中DNS Client Service)。大多數(shù)瀏覽器有獨(dú)立于操作系統(tǒng)以外的自己的緩存。由于瀏覽器有自己的緩存記錄,因此在一次請(qǐng)求中它不會(huì)受到操作系統(tǒng)的影響。

Internet Explorer默認(rèn)情況下對(duì)DNS查找記錄的緩存時(shí)間為30分鐘,它在注冊(cè)表中的鍵值為DnsCacheTimeout。Firefox對(duì)DNS的查找記錄緩存時(shí)間為1分鐘,它在配置文件中的選項(xiàng)為network.dnsCacheExpiration(Fasterfox把這個(gè)選項(xiàng)改為了1小時(shí))。

當(dāng)客戶端中的DNS緩存都為空時(shí)(瀏覽器和操作系統(tǒng)都為空),DNS查找的次數(shù)和頁(yè)面中主機(jī)名的數(shù)量相同。這其中包括頁(yè)面中URL、圖片、腳本文件、樣式表、Flash對(duì)象等包含的主機(jī)名。減少主機(jī)名的數(shù)量可以減少DNS查找次數(shù)。

減少主機(jī)名的數(shù)量還可以減少頁(yè)面中并行下載的數(shù)量。減少DNS查找次數(shù)可以節(jié)省響應(yīng)時(shí)間,但是減少并行下載卻會(huì)增加響應(yīng)時(shí)間。我的指導(dǎo)原則是把這些頁(yè)面中的內(nèi)容分割成至少兩部分但不超過(guò)四部分。這種結(jié)果就是在減少DNS查找次數(shù)和保持較高程度并行下載兩者之間的權(quán)衡了。

3、避免跳轉(zhuǎn)

跳轉(zhuǎn)是使用301和302代碼實(shí)現(xiàn)的。下面是一個(gè)響應(yīng)代碼為301的HTTP頭:

HTTP/1.1 301 Moved Permanently

Location: http://example.com/newuri

Content-Type: text/html

瀏覽器會(huì)把用戶指向到Location中指定的URL。頭文件中的所有信息在一次跳轉(zhuǎn)中都是必需的,內(nèi)容部分可以為空。不管他們的名稱,301和302響應(yīng)都不會(huì)被緩存除非增加一個(gè)額外的頭選項(xiàng),如Expires或者Cache-Control來(lái)指定它緩存。元素的刷新標(biāo)簽和JavaScript也可以實(shí)現(xiàn)URL的跳轉(zhuǎn),但是如果你必須要跳轉(zhuǎn)的時(shí)候,最好的方法就是使用標(biāo)準(zhǔn)的3XXHTTP狀態(tài)代碼,這主要是為了確保"后退"按鈕可以正確地使用。

但是要記住跳轉(zhuǎn)會(huì)降低用戶體驗(yàn)。在用戶和HTML文檔中間增加一個(gè)跳轉(zhuǎn),會(huì)拖延頁(yè)面中所有元素的顯示,因?yàn)樵贖TML文件被加載前任何文件(圖像、Flash等)都不會(huì)被下載。

有一種經(jīng)常被網(wǎng)頁(yè)開發(fā)者忽略卻往往十分浪費(fèi)響應(yīng)時(shí)間的跳轉(zhuǎn)現(xiàn)象。這種現(xiàn)象發(fā)生在當(dāng)URL本該有斜杠(/)卻被忽略掉時(shí)。例如,當(dāng)我們要訪問(wèn)http://astrology.yahoo.com/astrology 時(shí),實(shí)際上返回的是一個(gè)包含301代碼的跳轉(zhuǎn),它指向的是http://astrology.yahoo.com/astrology/  (注意末尾的斜杠)。在Apache服務(wù)器中可以使用Alias 或者 mod_rewrite或者the DirectorySlash來(lái)避免。

連接新網(wǎng)站和舊網(wǎng)站是跳轉(zhuǎn)功能經(jīng)常被用到的另一種情況。這種情況下往往要連接網(wǎng)站的不同內(nèi)容然后根據(jù)用戶的不同類型(如瀏覽器類型、用戶賬號(hào)所屬類型)來(lái)進(jìn)行跳轉(zhuǎn)。使用跳轉(zhuǎn)來(lái)實(shí)現(xiàn)兩個(gè)網(wǎng)站的切換十分簡(jiǎn)單,需要的代碼量也不多。盡管使用這種方法對(duì)于開發(fā)者來(lái)說(shuō)可以降低復(fù)雜程度,但是它同樣降低用戶體驗(yàn)。一個(gè)可替代方法就是如果兩者在同一臺(tái)服務(wù)器上時(shí)使用Alias和mod_rewrite和實(shí)現(xiàn)。如果是因?yàn)橛蛎牟煌捎锰D(zhuǎn),那么可以通過(guò)使用Alias或者mod_rewirte建立CNAME(保存一個(gè)域名和另外一個(gè)域名之間關(guān)系的DNS記錄)來(lái)替代。

4、可緩存的AJAX

Ajax經(jīng)常被提及的一個(gè)好處就是由于其從后臺(tái)服務(wù)器傳輸信息的異步性而為用戶帶來(lái)的反饋的即時(shí)性。但是,使用Ajax并不能保證用戶不會(huì)在等待異步的JavaScript和XML響應(yīng)上花費(fèi)時(shí)間。在很多應(yīng)用中,用戶是否需要等待響應(yīng)取決于Ajax如何來(lái)使用。例如,在一個(gè)基于Web的Email客戶端中,用戶必須等待Ajax返回符合他們條件的郵件查詢結(jié)果。記住一點(diǎn),"異步"并不異味著"即時(shí)",這很重要。

為了提高性能,優(yōu)化Ajax響應(yīng)是很重要的。提高Ajxa性能的措施中最重要的方法就是使響應(yīng)具有可緩存性,具體的討論可以查看Add an Expires or a Cache-Control Header。其它的幾條規(guī)則也同樣適用于Ajax:

  • Gizp壓縮文件

  • 減少DNS查找次數(shù)

  • 精簡(jiǎn)JavaScript

  • 避免跳轉(zhuǎn)

  • 配置ETags

讓我們來(lái)看一個(gè)例子:一個(gè)Web2.0的Email客戶端會(huì)使用Ajax來(lái)自動(dòng)完成對(duì)用戶地址薄的下載。如果用戶在上次使用過(guò)Email web應(yīng)用程序后沒(méi)有對(duì)地址薄作任何的修改,而且Ajax響應(yīng)通過(guò)Expire或者Cacke-Control頭來(lái)實(shí)現(xiàn)緩存,那么就可以直接從上一次的緩存中讀取地址薄了。必須告知瀏覽器是使用緩存中的地址薄還是發(fā)送一個(gè)新的請(qǐng)求。這可以通過(guò)為讀取地址薄的Ajax URL增加一個(gè)含有上次編輯時(shí)間的時(shí)間戳來(lái)實(shí)現(xiàn),例如,&t=11900241612等。如果地址薄在上次下載后沒(méi)有被編輯過(guò),時(shí)間戳就不變,則從瀏覽器的緩存中加載從而減少了一次HTTP請(qǐng)求過(guò)程。如果用戶修改過(guò)地址薄,時(shí)間戳就會(huì)用來(lái)確定新的URL和緩存響應(yīng)并不匹配,瀏覽器就會(huì)重要請(qǐng)求更新地址薄。

即使你的Ajxa響應(yīng)是動(dòng)態(tài)生成的,哪怕它只適用于一個(gè)用戶,那么它也應(yīng)該被緩存起來(lái)。這樣做可以使你的Web2.0應(yīng)用程序更加快捷。

5、推遲加載內(nèi)容

你可以仔細(xì)看一下你的網(wǎng)頁(yè),問(wèn)問(wèn)自己"哪些內(nèi)容是頁(yè)面呈現(xiàn)時(shí)所必需首先加載的?哪些內(nèi)容和結(jié)構(gòu)可以稍后再加載?

把整個(gè)過(guò)程按照onload事件分隔成兩部分,JavaScript是一個(gè)理想的選擇。例如,如果你有用于實(shí)現(xiàn)拖放和動(dòng)畫的JavaScript,那么它就以等待稍后加載,因?yàn)轫?yè)面上的拖放元素是在初始化呈現(xiàn)之后才發(fā)生的。其它的例如隱藏部分的內(nèi)容(用戶操作之后才顯現(xiàn)的內(nèi)容)和處于折疊部分的圖像也可以推遲加載

工具可以節(jié)省你的工作量:YUI Image Loader可以幫你推遲加載折疊部分的圖片,YUI Get utility是包含JS和 CSS的便捷方法。比如你可以打開Firebug的Net選項(xiàng)卡看一下Yahoo的首頁(yè)。

當(dāng)性能目標(biāo)和其它網(wǎng)站開發(fā)實(shí)踐一致時(shí)就會(huì)相得益彰。這種情況下,通過(guò)程序提高網(wǎng)站性能的方法告訴我們,在支持JavaScript的情況下,可以先去除用戶體驗(yàn),不過(guò)這要保證你的網(wǎng)站在沒(méi)有JavaScript也可以正常運(yùn)行。在確定頁(yè)面運(yùn)行正常后,再加載腳本來(lái)實(shí)現(xiàn)如拖放和動(dòng)畫等更加花哨的效果。

6、預(yù)加載

預(yù)加載和后加載看起來(lái)似乎恰恰相反,但實(shí)際上預(yù)加載是為了實(shí)現(xiàn)另外一種目標(biāo)。預(yù)加載是在瀏覽器空閑時(shí)請(qǐng)求將來(lái)可能會(huì)用到的頁(yè)面內(nèi)容(如圖像、樣式表和腳本)。使用這種方法,當(dāng)用戶要訪問(wèn)下一個(gè)頁(yè)面時(shí),頁(yè)面中的內(nèi)容大部分已經(jīng)加載到緩存中了,因此可以大大改善訪問(wèn)速度。

下面提供了幾種預(yù)加載方法:

無(wú)條件加載:觸發(fā)onload事件時(shí),直接加載額外的頁(yè)面內(nèi)容。以Google.com為例,你可以看一下它的spirit image圖像是怎樣在onload中加載的。這個(gè)spirit image圖像在google.com主頁(yè)中是不需要的,但是卻可以在搜索結(jié)果頁(yè)面中用到它。

有條件加載:根據(jù)用戶的操作來(lái)有根據(jù)地判斷用戶下面可能去往的頁(yè)面并相應(yīng)的預(yù)加載頁(yè)面內(nèi)容。在search.yahoo.com中你可以看到如何在你輸入內(nèi)容時(shí)加載額外的頁(yè)面內(nèi)容。

有預(yù)期的加載:載入重新設(shè)計(jì)過(guò)的頁(yè)面時(shí)使用預(yù)加載。這種情況經(jīng)常出現(xiàn)在頁(yè)面經(jīng)過(guò)重新設(shè)計(jì)后用戶抱怨"新的頁(yè)面看起來(lái)很酷,但是卻比以前慢"。問(wèn)題可能出在用戶對(duì)于你的舊站點(diǎn)建立了完整的緩存,而對(duì)于新站點(diǎn)卻沒(méi)有任何緩存內(nèi)容。因此你可以在訪問(wèn)新站之前就加載一部?jī)?nèi)容來(lái)避免這種結(jié)果的出現(xiàn)。在你的舊站中利用瀏覽器的空余時(shí)間加載新站中用到的圖像的和腳本來(lái)提高訪問(wèn)速度。

7、減少DOM元素?cái)?shù)量

一個(gè)復(fù)雜的頁(yè)面意味著需要下載更多數(shù)據(jù),同時(shí)也意味著JavaScript遍歷DOM的效率越慢。比如當(dāng)你增加一個(gè)事件句柄時(shí)在500和5000個(gè)DOM元素中循環(huán)效果肯定是不一樣的。

大量的DOM元素的存在意味著頁(yè)面中有可以不用移除內(nèi)容只需要替換元素標(biāo)簽就可以精簡(jiǎn)的部分。你在頁(yè)面布局中使用表格了嗎?你有沒(méi)有僅僅為了布局而引入更多的

元素呢?也許會(huì)存在一個(gè)適合或者在語(yǔ)意是更貼切的標(biāo)簽可以供你使用。

YUI CSS utilities可以給你的布局帶來(lái)巨大幫助:grids.css可以幫你實(shí)現(xiàn)整體布局,font.css和reset.css可以幫助你移除瀏覽器默認(rèn)格式。它提供了一個(gè)重新審視你頁(yè)面中標(biāo)簽的機(jī)會(huì),比如只有在語(yǔ)意上有意義時(shí)才使用

,而不是因?yàn)樗哂袚Q行效果才使用它。

DOM元素?cái)?shù)量很容易計(jì)算出來(lái),只需要在Firebug的控制臺(tái)內(nèi)輸入:

document.getElementsByTagName('*').length

那么多少個(gè)DOM元素算是多呢?這可以對(duì)照有很好標(biāo)記使用的類似頁(yè)面。比如Yahoo!主頁(yè)是一個(gè)內(nèi)容非常多的頁(yè)面,但是它只使用了700個(gè)元素(HTML標(biāo)簽)。

8、根據(jù)域名劃分頁(yè)面內(nèi)容

把頁(yè)面內(nèi)容劃分成若干部分可以使你最大限度地實(shí)現(xiàn)平行下載。由于DNS查找?guī)?lái)的影響你首先要確保你使用的域名數(shù)量在2個(gè)到4個(gè)之間。例如,你可以把用到的HTML內(nèi)容和動(dòng)態(tài)內(nèi)容放在www.example.org上,而把頁(yè)面各種組件(圖片、腳本、CSS)分別存放在statics1.example.org和statics.example.org上。

你可在Tenni Theurer和Patty Chi合寫的文章Maximizing Parallel Downloads in the Carpool Lane找到更多相關(guān)信息。

9、使iframe的數(shù)量最小

ifrmae元素可以在父文檔中插入一個(gè)新的HTML文檔。了解iframe的工作理然后才能更加有效地使用它,這一點(diǎn)很重要。

  • 解決加載緩慢的第三方內(nèi)容如圖標(biāo)和廣告等的加載問(wèn)題

  • Security sandbox

  • 并行加載腳本

  • 即時(shí)內(nèi)容為空,加載也需要時(shí)間

  • 會(huì)阻止頁(yè)面加載

  • 沒(méi)有語(yǔ)意

10、不要出現(xiàn)404錯(cuò)誤

HTTP請(qǐng)求時(shí)間消耗是很大的,因此使用HTTP請(qǐng)求來(lái)獲得一個(gè)沒(méi)有用處的響應(yīng)(例如404沒(méi)有找到頁(yè)面)是完全沒(méi)有必要的,它只會(huì)降低用戶體驗(yàn)而不會(huì)有一點(diǎn)好處。

有些站點(diǎn)把404錯(cuò)誤響應(yīng)頁(yè)面改為"你是不是要找***",這雖然改進(jìn)了用戶體驗(yàn)但是同樣也會(huì)浪費(fèi)服務(wù)器資源(如數(shù)據(jù)庫(kù)等)。最糟糕的情況是指向外部JavaScript的鏈接出現(xiàn)問(wèn)題并返回404代碼。首先,這種加載會(huì)破壞并行加載;其次瀏覽器會(huì)把試圖在返回的404響應(yīng)內(nèi)容中找到可能有用的部分當(dāng)作JavaScript代碼來(lái)執(zhí)行。

11、使用內(nèi)容分發(fā)網(wǎng)絡(luò)

用戶與你網(wǎng)站服務(wù)器的接近程度會(huì)影響響應(yīng)時(shí)間的長(zhǎng)短。把你的網(wǎng)站內(nèi)容分散到多個(gè)、處于不同地域位置的服務(wù)器上可以加快下載速度。但是首先我們應(yīng)該做些什么呢?

按地域布置網(wǎng)站內(nèi)容的第一步并不是要嘗試重新架構(gòu)你的網(wǎng)站讓他們?cè)诜职l(fā)服務(wù)器上正常運(yùn)行。根據(jù)應(yīng)用的需求來(lái)改變網(wǎng)站結(jié)構(gòu),這可能會(huì)包括一些比較復(fù)雜的任務(wù),如在服務(wù)器間同步Session狀態(tài)和合并數(shù)據(jù)庫(kù)更新等。要想縮短用戶和內(nèi)容服務(wù)器的距離,這些架構(gòu)步驟可能是不可避免的。

要記住,在終端用戶的響應(yīng)時(shí)間中有80%到90%的響應(yīng)時(shí)間用于下載圖像、樣式表、腳本、Flash等頁(yè)面內(nèi)容。這就是網(wǎng)站性能黃金守則。和重新設(shè)計(jì)你的應(yīng)用程序架構(gòu)這樣比較困難的任務(wù)相比,首先來(lái)分布靜態(tài)內(nèi)容會(huì)更好一點(diǎn)。這不僅會(huì)縮短響應(yīng)時(shí)間,而且對(duì)于內(nèi)容分發(fā)網(wǎng)絡(luò)來(lái)說(shuō)它更容易實(shí)現(xiàn)。

內(nèi)容分發(fā)網(wǎng)絡(luò)(Content Delivery Network,CDN)是由一系列分散到各個(gè)不同地理位置上的web服務(wù)器組成的,它提高了網(wǎng)站內(nèi)容的傳輸速度。用于向用戶傳輸內(nèi)容的服務(wù)器主要是根據(jù)和用戶在網(wǎng)絡(luò)上的靠近程度來(lái)指定的。例如,擁有最少網(wǎng)絡(luò)跳數(shù)(network hops)和響應(yīng)速度最快的服務(wù)器會(huì)被選定。

一些大型的網(wǎng)絡(luò)公司擁有自己的CDN,但是使用像Akamai Technologies,Mirror Image Internet, 或者Limelight Networks這樣的CDN服務(wù)成本卻非常高。對(duì)于剛剛起步的企業(yè)和個(gè)人網(wǎng)站來(lái)說(shuō),可能沒(méi)有使用CDN的成本預(yù)算,但是隨著目標(biāo)用戶群的不斷擴(kuò)大和更加全球化,CDN就是實(shí)現(xiàn)快速響應(yīng)所必需的了。以Yahoo來(lái)說(shuō),他們轉(zhuǎn)移到CDN上的網(wǎng)站程序靜態(tài)內(nèi)容節(jié)省了終端用戶20%以上的響應(yīng)時(shí)間。使用CDN是一個(gè)只需要相對(duì)簡(jiǎn)單地修改代碼實(shí)現(xiàn)顯著改善網(wǎng)站訪問(wèn)速度的方法。

12、為文件頭指定Expires或Cache-Control

這條守則包括兩方面的內(nèi)容:

對(duì)于靜態(tài)內(nèi)容:設(shè)置文件頭過(guò)期時(shí)間Expires的值為"Never expire"(永不過(guò)期)

對(duì)于動(dòng)態(tài)內(nèi)容:使用恰當(dāng)?shù)腃ache-Control文件頭來(lái)幫助瀏覽器進(jìn)行有條件的請(qǐng)求

網(wǎng)頁(yè)內(nèi)容設(shè)計(jì)現(xiàn)在越來(lái)越豐富,這就意味著頁(yè)面中要包含更多的腳本、樣式表、圖片和Flash。第一次訪問(wèn)你頁(yè)面的用戶就意味著進(jìn)行多次的HTTP請(qǐng)求,但是通過(guò)使用Expires文件頭就可以使這樣內(nèi)容具有緩存性。它避免了接下來(lái)的頁(yè)面訪問(wèn)中不必要的HTTP請(qǐng)求。Expires文件頭經(jīng)常用于圖像文件,但是應(yīng)該在所有的內(nèi)容都使用他,包括腳本、樣式表和Flash等。

瀏覽器(和代理)使用緩存來(lái)減少HTTP請(qǐng)求的大小和次數(shù)以加快頁(yè)面訪問(wèn)速度。Web服務(wù)器在HTTP響應(yīng)中使用Expires文件頭來(lái)告訴客戶端內(nèi)容需要緩存多長(zhǎng)時(shí)間。下面這個(gè)例子是一個(gè)較長(zhǎng)時(shí)間的Expires文件頭,它告訴瀏覽器這個(gè)響應(yīng)直到2010年4月15日才過(guò)期。

Expires: Thu, 15 Apr 2010 20:00:00 GMT

如果你使用的是Apache服務(wù)器,可以使用ExpiresDefault來(lái)設(shè)定相對(duì)當(dāng)前日期的過(guò)期時(shí)間。下面這個(gè)例子是使用ExpiresDefault來(lái)設(shè)定請(qǐng)求時(shí)間后10年過(guò)期的文件頭:

ExpiresDefault "access plus 10 years"

要切記,如果使用了Expires文件頭,當(dāng)頁(yè)面內(nèi)容改變時(shí)就必須改變內(nèi)容的文件名。依Yahoo!來(lái)說(shuō)我們經(jīng)常使用這樣的步驟:在內(nèi)容的文件名中加上版本號(hào),如yahoo_2.0.6.js。

使用Expires文件頭只有會(huì)在用戶已經(jīng)訪問(wèn)過(guò)你的網(wǎng)站后才會(huì)起作用。當(dāng)用戶首次訪問(wèn)你的網(wǎng)站時(shí)這對(duì)減少HTTP請(qǐng)求次數(shù)來(lái)說(shuō)是無(wú)效的,因?yàn)闉g覽器的緩存是空的。因此這種方法對(duì)于你網(wǎng)站性能的改進(jìn)情況要依據(jù)他們"預(yù)緩存"存在時(shí)對(duì)你頁(yè)面的點(diǎn)擊頻率("預(yù)緩存"中已經(jīng)包含了頁(yè)面中的所有內(nèi)容)。Yahoo!建立了一套測(cè)量方法,我們發(fā)現(xiàn)所有的頁(yè)面瀏覽量中有75~85%都有"預(yù)緩存"。通過(guò)使用Expires文件頭,增加了緩存在瀏覽器中內(nèi)容的數(shù)量,并且可以在用戶接下來(lái)的請(qǐng)求中再次使用這些內(nèi)容,這甚至都不需要通過(guò)用戶發(fā)送一個(gè)字節(jié)的請(qǐng)求。

13、Gzip壓縮文件內(nèi)容

網(wǎng)絡(luò)傳輸中的HTTP請(qǐng)求和應(yīng)答時(shí)間可以通過(guò)前端機(jī)制得到顯著改善。的確,終端用戶的帶寬、互聯(lián)網(wǎng)提供者、與對(duì)等交換點(diǎn)的靠近程度等都不是網(wǎng)站開發(fā)者所能決定的。但是還有其他因素影響著響應(yīng)時(shí)間。通過(guò)減小HTTP響應(yīng)的大小可以節(jié)省HTTP響應(yīng)時(shí)間。

從HTTP/1.1開始,web客戶端都默認(rèn)支持HTTP請(qǐng)求中有Accept-Encoding文件頭的壓縮格式:

Accept-Encoding: gzip, deflate

如果web服務(wù)器在請(qǐng)求的文件頭中檢測(cè)到上面的代碼,就會(huì)以客戶端列出的方式壓縮響應(yīng)內(nèi)容。Web服務(wù)器把壓縮方式通過(guò)響應(yīng)文件頭中的Content-Encoding來(lái)返回給瀏覽器。

Content-Encoding: gzip

Gzip是目前最流行也是最有效的壓縮方式。這是由GNU項(xiàng)目開發(fā)并通過(guò)RFC 1952來(lái)標(biāo)準(zhǔn)化的。另外僅有的一個(gè)壓縮格式是deflate,但是它的使用范圍有限效果也稍稍遜色。

Gzip大概可以減少70%的響應(yīng)規(guī)模。目前大約有90%通過(guò)瀏覽器傳輸?shù)幕ヂ?lián)網(wǎng)交換支持gzip格式。如果你使用的是Apache,gzip模塊配置和你的版本有關(guān):Apache 1.3使用mod_zip,而Apache 2.x使用moflate。

瀏覽器和代理都會(huì)存在這樣的問(wèn)題:瀏覽器期望收到的和實(shí)際接收到的內(nèi)容會(huì)存在不匹配的現(xiàn)象。幸好,這種特殊情況隨著舊式瀏覽器使用量的減少在減少。Apache模塊會(huì)通過(guò)自動(dòng)添加適當(dāng)?shù)腣ary響應(yīng)文件頭來(lái)避免這種狀況的出現(xiàn)。

服務(wù)器根據(jù)文件類型來(lái)選擇需要進(jìn)行g(shù)zip壓縮的文件,但是這過(guò)于限制了可壓縮的文件。大多數(shù)web服務(wù)器會(huì)壓縮HTML文檔。對(duì)腳本和樣式表進(jìn)行壓縮同樣也是值得做的事情,但是很多web服務(wù)器都沒(méi)有這個(gè)功能。實(shí)際上,壓縮任何一個(gè)文本類型的響應(yīng),包括XML和JSON,都值得的。圖像和PDF文件由于已經(jīng)壓縮過(guò)了所以不能再進(jìn)行g(shù)zip壓縮。如果試圖gizp壓縮這些文件的話不但會(huì)浪費(fèi)CPU資源還會(huì)增加文件的大小。

Gzip壓縮所有可能的文件類型是減少文件體積增加用戶體驗(yàn)的簡(jiǎn)單方法。

14、配置ETag

Entity tags(ETags)(實(shí)體標(biāo)簽)是web服務(wù)器和瀏覽器用于判斷瀏覽器緩存中的內(nèi)容和服務(wù)器中的原始內(nèi)容是否匹配的一種機(jī)制("實(shí)體"就是所說(shuō)的"內(nèi)容",包括圖片、腳本、樣式表等)。增加ETag為實(shí)體的驗(yàn)證提供了一個(gè)比使用"last-modified date(上次編輯時(shí)間)"更加靈活的機(jī)制。Etag是一個(gè)識(shí)別內(nèi)容版本號(hào)的唯一字符串。唯一的格式限制就是它必須包含在雙引號(hào)內(nèi)。原始服務(wù)器通過(guò)含有ETag文件頭的響應(yīng)指定頁(yè)面內(nèi)容的ETag。

HTTP/1.1 200 OK

Last-Modified: Tue, 12 Dec 2006 03:03:59 GMT

ETag: "10c24bc-4ab-457e1c1f"

Content-Length: 12195

稍后,如果瀏覽器要驗(yàn)證一個(gè)文件,它會(huì)使用If-None-Match文件頭來(lái)把ETag傳回給原始服務(wù)器。在這個(gè)例子中,如果ETag匹配,就會(huì)返回一個(gè)304狀態(tài)碼,這就節(jié)省了12195字節(jié)的響應(yīng)。      GET /i/yahoo.gif HTTP/1.1

Host: us.yimg.com

If-Modified-Since: Tue, 12 Dec 2006 03:03:59 GMT

If-None-Match: "10c24bc-4ab-457e1c1f"

HTTP/1.1 304 Not Modified

ETag的問(wèn)題在于,它是根據(jù)可以辨別網(wǎng)站所在的服務(wù)器的具有唯一性的屬性來(lái)生成的。當(dāng)瀏覽器從一臺(tái)服務(wù)器上獲得頁(yè)面內(nèi)容后到另外一臺(tái)服務(wù)器上進(jìn)行驗(yàn)證時(shí)ETag就會(huì)不匹配,這種情況對(duì)于使用服務(wù)器組和處理請(qǐng)求的網(wǎng)站來(lái)說(shuō)是非常常見的。默認(rèn)情況下,Apache和IIS都會(huì)把數(shù)據(jù)嵌入ETag中,這會(huì)顯著減少多服務(wù)器間的文件驗(yàn)證沖突。

Apache 1.3和2.x中的ETag格式為inode-size-timestamp。即使某個(gè)文件在不同的服務(wù)器上會(huì)處于相同的目錄下,文件大小、權(quán)限、時(shí)間戳等都完全相同,但是在不同服務(wù)器上他們的內(nèi)碼也是不同的。

IIS 5.0和IIS 6.0處理ETag的機(jī)制相似。IIS中的ETag格式為Filetimestamp:ChangeNumber。用ChangeNumber來(lái)跟蹤IIS配置的改變。網(wǎng)站所用的不同IIS服務(wù)器間ChangeNumber也不相同。 不同的服務(wù)器上的Apache和IIS即使對(duì)于完全相同的內(nèi)容產(chǎn)生的ETag在也不相同,用戶并不會(huì)接收到一個(gè)小而快的304響應(yīng);相反他們會(huì)接收一個(gè)正常的200響應(yīng)并下載全部?jī)?nèi)容。如果你的網(wǎng)站只放在一臺(tái)服務(wù)器上,就不會(huì)存在這個(gè)問(wèn)題。但是如果你的網(wǎng)站是架設(shè)在多個(gè)服務(wù)器上,并且使用Apache和IIS產(chǎn)生默認(rèn)的ETag配置,你的用戶獲得頁(yè)面就會(huì)相對(duì)慢一點(diǎn),服務(wù)器會(huì)傳輸更多的內(nèi)容,占用更多的帶寬,代理也不會(huì)有效地緩存你的網(wǎng)站內(nèi)容。即使你的內(nèi)容擁有Expires文件頭,無(wú)論用戶什么時(shí)候點(diǎn)擊"刷新"或者"重載"按鈕都會(huì)發(fā)送相應(yīng)的GET請(qǐng)求。

如果你沒(méi)有使用ETag提供的靈活的驗(yàn)證模式,那么干脆把所有的ETag都去掉會(huì)更好。Last-Modified文件頭驗(yàn)證是基于內(nèi)容的時(shí)間戳的。去掉ETag文件頭會(huì)減少響應(yīng)和下次請(qǐng)求中文件的大小。微軟的這篇支持文稿講述了如何去掉ETag。在Apache中,只需要在配置文件中簡(jiǎn)單添加下面一行代碼就可以了:

FileETag none

15、盡早刷新輸出緩沖

當(dāng)用戶請(qǐng)求一個(gè)頁(yè)面時(shí),無(wú)論如何都會(huì)花費(fèi)200到500毫秒用于后臺(tái)組織HTML文件。在這期間,瀏覽器會(huì)一直空閑等待數(shù)據(jù)返回。在PHP中,你可以使用flush()方法,它允許你把已經(jīng)編譯的好的部分HTML響應(yīng)文件先發(fā)送給瀏覽器,這時(shí)瀏覽器就會(huì)可以下載文件中的內(nèi)容(腳本等)而后臺(tái)同時(shí)處理剩余的HTML頁(yè)面。這樣做的效果會(huì)在后臺(tái)煩惱或者前臺(tái)較空閑時(shí)更加明顯。

輸出緩沖應(yīng)用最好的一個(gè)地方就是緊跟在之后,因?yàn)镠TML的頭部分容易生成而且頭部往往包含CSS和JavaScript文件,這樣瀏覽器就可以在后臺(tái)編譯剩余HTML的同時(shí)并行下載它們。

16、使用GET來(lái)完成AJAX請(qǐng)求

Yahoo!Mail團(tuán)隊(duì)發(fā)現(xiàn),當(dāng)使用XMLHttpRequest時(shí),瀏覽器中的POST方法是一個(gè)"兩步走"的過(guò)程:首先發(fā)送文件頭,然后才發(fā)送數(shù)據(jù)。因此使用GET最為恰當(dāng),因?yàn)樗恍璋l(fā)送一個(gè)TCP包(除非你有很多Cookie)。IE中URL的最大長(zhǎng)度為2K,因此如果你要發(fā)送一個(gè)超過(guò)2K的數(shù)據(jù)時(shí)就不能使用GET了。

一個(gè)有趣的不同就是POST并不像GET那樣實(shí)際發(fā)送數(shù)據(jù)。根據(jù)HTTP規(guī)范,GET意味著"獲取"數(shù)據(jù),因此當(dāng)你僅僅獲取數(shù)據(jù)時(shí)使用GET更加有意義(從語(yǔ)意上講也是如此),相反,發(fā)送并在服務(wù)端保存數(shù)據(jù)時(shí)使用POST。

17、把樣式表置于頂部

在研究Yahoo!的性能表現(xiàn)時(shí),我們發(fā)現(xiàn)把樣式表放到文檔的內(nèi)部似乎會(huì)加快頁(yè)面的下載速度。這是因?yàn)榘褬邮奖矸诺絻?nèi)會(huì)使頁(yè)面有步驟的加載顯示。

注重性能的前端服務(wù)器往往希望頁(yè)面有秩序地加載。同時(shí),我們也希望瀏覽器把已經(jīng)接收到內(nèi)容盡可能顯示出來(lái)。這對(duì)于擁有較多內(nèi)容的頁(yè)面和網(wǎng)速較慢的用戶來(lái)說(shuō)特別重要。向用戶返回可視化的反饋,比如進(jìn)程指針,已經(jīng)有了較好的研究并形成了正式文檔。在我們的研究中HTML頁(yè)面就是進(jìn)程指針。當(dāng)瀏覽器有序地加載文件頭、導(dǎo)航欄、頂部的logo等對(duì)于等待頁(yè)面加載的用戶來(lái)說(shuō)都可以作為可視化的反饋。這從整體上改善了用戶體驗(yàn)。

把樣式表放在文檔底部的問(wèn)題是在包括Internet Explorer在內(nèi)的很多瀏覽器中這會(huì)中止內(nèi)容的有序呈現(xiàn)。瀏覽器中止呈現(xiàn)是為了避免樣式改變引起的頁(yè)面元素重繪。用戶不得不面對(duì)一個(gè)空白頁(yè)面。

HTML規(guī)范清楚指出樣式表要放包含在頁(yè)面的區(qū)域內(nèi):"和不同,<link/>只能出現(xiàn)在文檔的區(qū)域內(nèi),盡管它可以多次使用它"。無(wú)論是引起白屏還是出現(xiàn)沒(méi)有樣式化的內(nèi)容都不值得去嘗試。最好的方案就是按照HTML規(guī)范在文檔內(nèi)加載你的樣式表。

18、避免使用CSS表達(dá)式(Expression)

CSS表達(dá)式是動(dòng)態(tài)設(shè)置CSS屬性的強(qiáng)大(但危險(xiǎn))方法。Internet Explorer從第5個(gè)版本開始支持CSS表達(dá)式。下面的例子中,使用CSS表達(dá)式可以實(shí)現(xiàn)隔一個(gè)小時(shí)切換一次背景顏色:

background-color: expression( (new Date()).getHours()%2 ? "#B8D4FF" : "#F08A00" );

如上所示,expression中使用了JavaScript表達(dá)式。CSS屬性根據(jù)JavaScript表達(dá)式的計(jì)算結(jié)果來(lái)設(shè)置。expression方法在其它瀏覽器中不起作用,因此在跨瀏覽器的設(shè)計(jì)中單獨(dú)針對(duì)Internet Explorer設(shè)置時(shí)會(huì)比較有用。

表達(dá)式的問(wèn)題就在于它的計(jì)算頻率要比我們想象的多。不僅僅是在頁(yè)面顯示和縮放時(shí),就是在頁(yè)面滾動(dòng)、乃至移動(dòng)鼠標(biāo)時(shí)都會(huì)要重新計(jì)算一次。給CSS表達(dá)式增加一個(gè)計(jì)數(shù)器可以跟蹤表達(dá)式的計(jì)算頻率。在頁(yè)面中隨便移動(dòng)鼠標(biāo)都可以輕松達(dá)到10000次以上的計(jì)算量。

一個(gè)減少CSS表達(dá)式計(jì)算次數(shù)的方法就是使用一次性的表達(dá)式,它在第一次運(yùn)行時(shí)將結(jié)果賦給指定的樣式屬性,并用這個(gè)屬性來(lái)代替CSS表達(dá)式。如果樣式屬性必須在頁(yè)面周期內(nèi)動(dòng)態(tài)地改變,使用事件句柄來(lái)代替CSS表達(dá)式是一個(gè)可行辦法。如果必須使用CSS表達(dá)式,一定要記住它們要計(jì)算成千上萬(wàn)次并且可能會(huì)對(duì)你頁(yè)面的性能產(chǎn)生影響。

19、使用外部JavaScript和CSS

很多性能規(guī)則都是關(guān)于如何處理外部文件的。但是,在你采取這些措施前你可能會(huì)問(wèn)到一個(gè)更基本的問(wèn)題:JavaScript和CSS是應(yīng)該放在外部文件中呢還是把它們放在頁(yè)面本身之內(nèi)呢?

在實(shí)際應(yīng)用中使用外部文件可以提高頁(yè)面速度,因?yàn)镴avaScript和CSS文件都能在瀏覽器中產(chǎn)生緩存。內(nèi)置在HTML文檔中的JavaScript和CSS則會(huì)在每次請(qǐng)求中隨HTML文檔重新下載。這雖然減少了HTTP請(qǐng)求的次數(shù),卻增加了HTML文檔的大小。從另一方面來(lái)說(shuō),如果外部文件中的JavaScript和CSS被瀏覽器緩存,在沒(méi)有增加HTTP請(qǐng)求次數(shù)的同時(shí)可以減少HTML文檔的大小。

關(guān)鍵問(wèn)題是,外部JavaScript和CSS文件緩存的頻率和請(qǐng)求HTML文檔的次數(shù)有關(guān)。雖然有一定的難度,但是仍然有一些指標(biāo)可以一測(cè)量它。如果一個(gè)會(huì)話中用戶會(huì)瀏覽你網(wǎng)站中的多個(gè)頁(yè)面,并且這些頁(yè)面中會(huì)重復(fù)使用相同的腳本和樣式表,緩存外部文件就會(huì)帶來(lái)更大的益處。

許多網(wǎng)站沒(méi)有功能建立這些指標(biāo)。對(duì)于這些網(wǎng)站來(lái)說(shuō),最好的堅(jiān)決方法就是把JavaScript和CSS作為外部文件引用。比較適合使用內(nèi)置代碼的例外就是網(wǎng)站的主頁(yè),如Yahoo!主頁(yè)和My Yahoo!。主頁(yè)在一次會(huì)話中擁有較少(可能只有一次)的瀏覽量,你可以發(fā)現(xiàn)內(nèi)置JavaScript和CSS對(duì)于終端用戶來(lái)說(shuō)會(huì)加快響應(yīng)時(shí) 間。

對(duì)于擁有較大瀏覽量的首頁(yè)來(lái)說(shuō),有一種技術(shù)可以平衡內(nèi)置代碼帶來(lái)的HTTP請(qǐng)求減少與通過(guò)使用外部文件進(jìn)行緩存帶來(lái)的好處。其中一個(gè)就是在首頁(yè)中內(nèi)置JavaScript和CSS,但是在頁(yè)面下載完成后動(dòng)態(tài)下載外部文件,在子頁(yè)面中使用到這些文件時(shí),它們已經(jīng)緩存到瀏覽器了。

20、削減JavaScript和CSS

精簡(jiǎn)是指從去除代碼不必要的字符減少文件大小從而節(jié)省下載時(shí)間。消減代碼時(shí),所有的注釋、不需要的空白字符(空格、換行、tab縮進(jìn))等都要去掉。在JavaScript中,由于需要下載的文件體積變小了從而節(jié)省了響應(yīng)時(shí)間。精簡(jiǎn)JavaScript中目前用到的最廣泛的兩個(gè)工具是JSMin和YUI Compressor。YUI Compressor還可用于精簡(jiǎn)CSS。

混淆是另外一種可用于源代碼優(yōu)化的方法。這種方法要比精簡(jiǎn)復(fù)雜一些并且在混淆的過(guò)程更易產(chǎn)生問(wèn)題。在對(duì)美國(guó)前10大網(wǎng)站的調(diào)查中發(fā)現(xiàn),精簡(jiǎn)也可以縮小原來(lái)代碼體積的21%,而混淆可以達(dá)到25%。盡管混淆法可以更好地縮減代碼,但是對(duì)于JavaScript來(lái)說(shuō)精簡(jiǎn)的風(fēng)險(xiǎn)更小。

除消減外部的腳本和樣式表文件外,

在PHP中可以通過(guò)創(chuàng)建名為insertScript的方法來(lái)替代:

為了防止多次重復(fù)引用腳本,這個(gè)方法中還應(yīng)該使用其它機(jī)制來(lái)處理腳本,如檢查所屬目錄和為腳本文件名中增加版本號(hào)以用于Expire文件頭等。

25、減少DOM訪問(wèn)

使用JavaScript訪問(wèn)DOM元素比較慢,因此為了獲得更多的應(yīng)該頁(yè)面,應(yīng)該做到:

緩存已經(jīng)訪問(wèn)過(guò)的有關(guān)元素

線下更新完節(jié)點(diǎn)之后再將它們添加到文檔樹中

避免使用JavaScript來(lái)修改頁(yè)面布局

有關(guān)此方面的更多信息請(qǐng)查看Julien Lecomte在YUI專題中的文章"高性能Ajax應(yīng)該程序"。

26、開發(fā)智能事件處理程序

有時(shí)候我們會(huì)感覺(jué)到頁(yè)面反應(yīng)遲鈍,這是因?yàn)镈OM樹元素中附加了過(guò)多的事件句柄并且些事件句病被頻繁地觸發(fā)。這就是為什么說(shuō)使用event delegation(事件代理)是一種好方法了。如果你在一個(gè)div中有10個(gè)按鈕,你只需要在div上附加一次事件句柄就可以了,而不用去為每一個(gè)按鈕增加一個(gè)句柄。事件冒泡時(shí)你可以捕捉到事件并判斷出是哪個(gè)事件發(fā)出的。

你同樣也不用為了操作DOM樹而等待onload事件的發(fā)生。你需要做的就是等待樹結(jié)構(gòu)中你要訪問(wèn)的元素出現(xiàn)。你也不用等待所有圖像都加載完畢。

你可能會(huì)希望用DOMContentLoaded事件來(lái)代替onload,但是在所有瀏覽器都支持它之前你可使用YUI 事件應(yīng)用程序中的onAvailable方法。

27、減小Cookie體積

HTTP coockie可以用于權(quán)限驗(yàn)證和個(gè)性化身份等多種用途。coockie內(nèi)的有關(guān)信息是通過(guò)HTTP文件頭來(lái)在web服務(wù)器和瀏覽器之間進(jìn)行交流的。因此保持coockie盡可能的小以減少用戶的響應(yīng)時(shí)間十分重要。

有關(guān)更多信息可以查看Tenni Theurer和Patty Chi的文章"When the Cookie Crumbles"。這們研究中主要包括:

  • 去除不必要的coockie

  • 使coockie體積盡量小以減少對(duì)用戶響應(yīng)的影響

  • 注意在適應(yīng)級(jí)別的域名上設(shè)置coockie以便使子域名不受影響

  • 設(shè)置合理的過(guò)期時(shí)間。較早地Expire時(shí)間和不要過(guò)早去清除coockie,都會(huì)改善用戶的響應(yīng)時(shí)間。

28、對(duì)于頁(yè)面內(nèi)容使用無(wú)coockie域名

當(dāng)瀏覽器在請(qǐng)求中同時(shí)請(qǐng)求一張靜態(tài)的圖片和發(fā)送coockie時(shí),服務(wù)器對(duì)于這些coockie不會(huì)做任何地使用。因此他們只是因?yàn)槟承┴?fù)面因素而創(chuàng)建的網(wǎng)絡(luò)傳輸。所有你應(yīng)該確定對(duì)于靜態(tài)內(nèi)容的請(qǐng)求是無(wú)coockie的請(qǐng)求。創(chuàng)建一個(gè)子域名并用他來(lái)存放所有靜態(tài)內(nèi)容。

如果你的域名是www.example.org,你可以在static.example.org上存在靜態(tài)內(nèi)容。但是,如果你不是在www.example.org上而是在頂級(jí)域名example.org設(shè)置了coockie,那么所有對(duì)于static.example.org的請(qǐng)求都包含coockie。在這種情況下,你可以再重新購(gòu)買一個(gè)新的域名來(lái)存在靜態(tài)內(nèi)容,并且要保持這個(gè)域名是無(wú)coockie的。m等等。

使用無(wú)coockie域名存在靜態(tài)內(nèi)容的另外一個(gè)好處就是一些代理(服務(wù)器)可能會(huì)拒絕對(duì)coockie的內(nèi)容請(qǐng)求進(jìn)行緩存。一個(gè)相關(guān)的建議就是,如果你想確定應(yīng)該使用example.org還是www.example.org作為你的一主頁(yè),你要考慮到coockie帶來(lái)的影響。忽略掉www會(huì)使你除了把coockie設(shè)置到*.example.org(*是泛域名解析,代表了所有子域名譯者dudo注)外沒(méi)有其它選擇,因此出于性能方面的考慮最好是使用帶有www的子域名并且在它上面設(shè)置coockie。

29、優(yōu)化圖像

設(shè)計(jì)人員完成對(duì)頁(yè)面的設(shè)計(jì)之后,不要急于將它們上傳到web服務(wù)器,這里還需要做幾件事:

你可以檢查一下你的GIF圖片中圖像顏色的數(shù)量是否和調(diào)色板規(guī)格一致。 使用imagemagick中下面的命令行很容易檢查:

identify -verbose image.gif

如果你發(fā)現(xiàn)圖片中只用到了4種顏色,而在調(diào)色板的中顯示的256色的顏色槽,那么這張圖片就還有壓縮的空間。

嘗試把GIF格式轉(zhuǎn)換成PNG格式,看看是否節(jié)省空間。大多數(shù)情況下是可以壓縮的。由于瀏覽器支持有限,設(shè)計(jì)者們往往不太樂(lè)意使用PNG格式的圖片,不過(guò)這都是過(guò)去的事情了。現(xiàn)在只有一個(gè)問(wèn)題就是在真彩PNG格式中的alpha通道半透明問(wèn)題,不過(guò)同樣的,GIF也不是真彩格式也不支持半透明。因此GIF能做到的,PNG(PNG8)同樣也能做到(除了動(dòng)畫)。下面這條簡(jiǎn)單的命令可以安全地把GIF格式轉(zhuǎn)換為PNG格式:

convert image.gif image.png

"我們要說(shuō)的是:給PNG一個(gè)施展身手的機(jī)會(huì)吧!"

在所有的PNG圖片上運(yùn)行pngcrush(或者其它PNG優(yōu)化工具)。例如:

pngcrush image.png -rem alla -reduce -brute result.png

在所有的JPEG圖片上運(yùn)行jpegtran。這個(gè)工具可以對(duì)圖片中的出現(xiàn)的鋸齒等做無(wú)損操作,同時(shí)它還可以用于優(yōu)化和清除圖片中的注釋以及其它無(wú)用信息(如EXIF信息):

jpegtran -copy none -optimize -perfect src.jpg dest.jpg

30、優(yōu)化CSS Spirite

在Spirite中水平排列你的圖片,垂直排列會(huì)稍稍增加文件大小;

Spirite中把顏色較近的組合在一起可以降低顏色數(shù),理想狀況是低于256色以便適用PNG8格式;

便于移動(dòng),不要在Spirite的圖像中間留有較大空隙。這雖然不大會(huì)增加文件大小但對(duì)于用戶代理來(lái)說(shuō)它需要更少的內(nèi)存來(lái)把圖片解壓為像素地圖。100x100的圖片為1萬(wàn)像素,而1000x1000就是100萬(wàn)像素。

31、不要在HTML中縮放圖像

不要為了在HTML中設(shè)置長(zhǎng)寬而使用比實(shí)際需要大的圖片。那么你的圖片(mycat.jpg)就應(yīng)該是100x100像素而不是把一個(gè)500x500像素的圖片縮小使用。

32、favicon.ico要小而且可緩存

favicon.ico是位于服務(wù)器根目錄下的一個(gè)圖片文件。它是必定存在的,因?yàn)榧词鼓悴魂P(guān)心它是否有用,瀏覽器也會(huì)對(duì)它發(fā)出請(qǐng)求,因此最好不要返回一個(gè)404 not found的響應(yīng)。由于是在同一臺(tái)服務(wù)器上,它每被請(qǐng)求一次coockie就會(huì)被發(fā)送一次。這個(gè)圖片文件還會(huì)影響下載順序,例如在IE中當(dāng)你在onload中請(qǐng)求額外的文件時(shí),favicon會(huì)在這些額外內(nèi)容被加載前下載。

因此,為了減少favicon.ico帶來(lái)的弊端,要做到:文件盡量地小,最好小于1K 在適當(dāng)?shù)臅r(shí)候(也就是你不要打算再換favicon.ico的時(shí)候,因?yàn)楦鼡Q新文件時(shí)不能對(duì)它進(jìn)行重命名)為它設(shè)置Expires文件頭。你可以很安全地把Expires文件頭設(shè)置為未來(lái)的幾個(gè)月。你可以通過(guò)核對(duì)當(dāng)前favicon.ico的上次編輯時(shí)間來(lái)作出判斷。 Imagemagick可以幫你創(chuàng)建小巧的favicon。

33、保持單個(gè)內(nèi)容小于25K

這條限制主要是因?yàn)閕Phone不能緩存大于25K的文件。注意這里指的是解壓縮后的大小。由于單純gizp壓縮可能達(dá)不要求,因此精簡(jiǎn)文件就顯得十分重要。

查看更多信息,請(qǐng)參閱Wayne Shea和Tenni Theurer的文件"Performance Research, Part 5: iPhone Cacheability - Making it Stick"。

34、打包組件成復(fù)合文本

把頁(yè)面內(nèi)容打包成復(fù)合文本就如同帶有多附件的Email,它能夠使你在一個(gè)HTTP請(qǐng)求中取得多個(gè)組件(切記:HTTP請(qǐng)求是很奢侈的)。當(dāng)你使用這條規(guī)則時(shí),首先要確定用戶代理是否支持(iPhone就不支持)。

35、多出的一條,也就是最重要的一條。降龍十八掌最后一掌"亢經(jīng)有悔":在項(xiàng)目中落實(shí)以上準(zhǔn)則,學(xué)以致用。

想了解更多網(wǎng)站技術(shù)的內(nèi)容,請(qǐng)?jiān)L問(wèn):網(wǎng)站技術(shù)

本文來(lái)源:http://gagu89.com/seodongtai/7926.html

免責(zé)聲明:部分文章信息來(lái)源于網(wǎng)絡(luò)以及網(wǎng)友投稿,本網(wǎng)站只負(fù)責(zé)對(duì)文章進(jìn)行整理、排版、編輯,是出于傳遞更多信息之目的,并不意味著贊同其觀點(diǎn)或證實(shí)其內(nèi)容的真實(shí)性,不承擔(dān)任何法律責(zé)任。
亚洲色一日本高清色 97色偷偷色噜噜狠狠爱网站 成人国产精品免费网站 久久综合AⅤ免费 久久久精品波多野结衣 日本一区二区视频在线 国产黄色三级片网址大全 久久人人爽人人爽人人片aV直播 亚洲天堂网性爱视频 成人小视频在线观看 香蒸焦蕉伊在线 99RE6热视频这里只精品首页 在线是国产精品毛片频 色妞综合一区二区三区 小仙女自慰呻吟出白浆 国产第一页限制I浮利院 成·人免费午夜无码视频 亚洲综合春色另类久久 加勒比人妻交换在线无码AV 91青青草原线免费观看不卡 欧美在线高清视频一区 韩国免费a级作爱片 凹凸国产精品视频 国产亚洲AV片在线观看午夜福利 最近中文字幕在线的mv视频 欧美激情一区二区三区视频 制服白领无码专区一级 一级a一片免费久久 6080国产日韩一卡二卡3卡四 日韩欧美动漫国产另类中文字幕 婷婷六月久久综合丁香一二 两人世界高清完整版免费观看 青椒午夜剧场重磅影院 亚洲综合欧美日韩国产一区二区桃 婷婷综合久久中文字幕一本 国产自偷在线拍精品热 国产在线观看18岁 亚洲图片日韩欧美网站黄色 国产午夜免费视频秋霞电影院 天美大象果冻星空 亚洲欧美激情另类 精品成人av一区二区三区 日本一区电影 色先锋av中文 A毛看片免费观看视频 欧美熟妇另类久久综合久 国产三级久久 无码人妻人妻经典视频 国产极品美女无套内射 特级无码毛片免费视频尤物 无码无套少妇18P在线直播 国产午夜一级鲁丝片 亚洲一级在线中文字幕 高清手机电影电视剧免费在线观看 色五月丁香五月综合五月亚洲 亚洲无码激情视频在线观看 最新高清无码专区 亚洲大成色WWW永久网站 亚洲国产精品国产自在在线 91av免费在线观看 久99久热只有精品国产 日日噜狠狠噜天天噜A∨ 国产精品91视频 亚洲一二三久久 欧美日韩中文理论 欧美人与禽zoz0性伦交 亚洲无码一区金先生 国内精品免费久久影院 国产欧美成人 24小时日本在线WWW免费的 成人无码区免费αⅤ片丝瓜视频 久久99免费视频 惠民福利99久久久国产精品免费 手机自拍视频精品1000 日日噜狠狠噜天天噜A∨ 偷自拍亚洲视频在线观看 97在线视频免费人妻 6699嫩草久久久精品 久久亚洲春色中文字幕久久久 2012中文字幕高清在线中文字幕 欧美大黑帍在线播放 亚洲va韩国va欧美va综合 久热爱精品视频在线综合网 最近韩国日本免费高清观看 无码日韩人妻精品久久 蜜臀色欲av一区二区三区麻豆 亚洲午夜福利在线视频 97视频热人人精品免费 亚洲国产高清在线观看视频 91精品国产色综合久久成人 日韩毛片在线视频X 色欲av无码在线观看 黄色视频网站网址在线观看 在线观看的免费网站 窝窝午夜看片国产精品 日本视频免费欧美啪啪啪视频 免费看又黄又猛又粗又爽的毛片 老子影院无码午夜伦不卡 精品极品三级久久久久 阿v视频观看免费国产最新 国产精品亚洲а∨天堂2020 大学生寝室白袜自慰gay网站 不卡无码av免费观看 未满十八18禁止午夜免费网站 被消防员c哭高h野外糙汉动漫 久久受WWW免费人成看片 欧洲日韩免费视频网站 日韩成人av在线 亚洲精品乱码久久久久久中文字幕 成 人 网 站 免 费 AV 91精品在线免费 亚洲综合伊人色一区 人妻洗澡被强公日日澡 精品国产天堂综合一区在线 国家一级内射高清视频 999zyz玖玖资源站最新 又粗又黄又爽的国产视频 思思久久精品免费视频 av网站免费在线观看免费 三上悠亚国产精品一区 香蕉菠萝蜜视频在线入口 国产沙发午睡对白高清 中文字幕久久久久人妻 久久性爱视频 久久99国产成人欧美 免费a在线观看 一区二区精品久久 国产精品91视频 日韩福利小视频 免费三级日本高清 午夜精品久久久久久不卡 91亚洲精品无码久久久久 日韩欧美国产精品成人 国产精品区免费视频 免费欢看自慰喷水www久久久 亚洲性爱之亚洲无码 91色偷偷综合久久噜噜 日韩三级黄色在线观看 亚洲伊人久久一次 国产精品亚洲综合色区 精品久久久久久久一区二区不卡 精品无码国产一区二区三区51 美女狂揉尿口揉到失禁 天天在线视频精品分类 无码版AV网站在线看 免费国产精品一区二区三区在线观看 午夜A级黄色网站大全 99人人模人人爽人人喊 最近新中文字幕大全高清 亚洲AV无码久久精品一区二区三区 国产成人精品午夜福利2021 人妻少妇中文在线视频 久久精品国产69国产精品亚洲 久久精品亚洲中文字幕无码 久久久久女教师免费一区 国产精品久久久久久福利 色天堂软件 青草久久人人97超碰 亚欧美一本视频在线观看 一级毛片AAAAAA免费看v 日本艳妓BBW高潮一19 四虎成人久久精品无码 成全视频在线观看免费看 国产成人综合欧美亚洲 av麻豆免费一区 免费在线观看新片 亚洲AV人人澡人夜夜人爽人人 亚洲欧洲美洲无码精品va a∨在线视频播放 一级A级毛片大全在线观看 AV剧情麻豆映画国产在线观看 呦女人与动人物A级毛片 国产在线观看精品无码不卡 国产精品国产亚洲区久久 亚洲成人色 xxxxx大片在线观看 91麻豆成人国产在线观看 午夜无码人妻AV大片色欲 久久久一本精品99久久精品66 色综合色综合 八戒八戒www免费观看 人人爱人人操人人摸 国产精品综合色一区 婷婷色怡春院 a4yy欧美一区二区三区 欧美日韩精品在线播放 亚洲日韩欧美综合网 国产丝袜在线精品丝袜 免费高清自慰区 少妇高潮惨叫久久久久电影69 91人成网站色www免费 亚洲中字精品不卡一本 人妻丰满多毛熟妇免费区 A级成人片一区二区三区 玩弄中年熟妇正在播放 在线观看亚洲avav免费免费 中文字幕第一页制服中字 成年午夜无码AV片在线观看 色欲久久久中文字幕综合 国产精品亚洲专区无码一区 天天躁日日躁狠狠躁裸体 五月天桃色社区欧美天美在线 在线观看国产成人av片 日韩免费一区 国产偷国产偷亚洲精品日韩 99热在线只要精品 亚洲一区二区免费在线观看 日韩一区不卡 中出仑乱中文字幕在线 亚洲第一男人天堂 免费A级毛片无码免费视频APP 在线观看三级精品高清 欧美精品专区免费观看 激情小五月天中文无码AV 亚洲中文无码天堂一区二区三区 不卡AV中文字幕手机看 成品片a免人看免费 国产天堂网一区二区三区 国产大神高清视频在线观看 精品国偷自产在线不卡短视频 无码AV无码免费一区二区 一级毛片私人影院 日韩AV天堂无码一区二区三区 午夜最新福利电影 好姑娘6电影在线观看 老熟女多次高潮露脸视频 亚洲无码手机在线观看 8X亚洲视频久久综合一区 国产精品婷婷午夜 亚洲国产av无码综合 亚洲色精品aⅴ一区区三区 无码中文精品视视在线观看 亚洲AV无码成人精品区在线观看 免费看三级片人网站 久久只这里是精品66 插插好爽爽爽啊 日韩综合天堂蜜臀在线 91精品国产91久久久无码医生 97精品国产97久久久久久免费 亚洲成av人片在线观看天堂无 尤物视频在线播放网址 亚洲高清视频一区 最好看免费观看高清视频了 欧美V国产在线一区二区三区 久久精品熟女欧洲av麻豆中出 国产高潮流白浆免费观看不卡 欧美一级www片免费观看 亚洲中文无韩国r级电影 99色色天天操 在线视频一区二区三区在线播放 性色的免费视频在线观看 精品视频无码一区二区三区 一二三四影视在线看片免费 91在线亚洲第一区精品 国产AV无码专区亚洲精品 最美女人体内射精一区二区 国产亚洲欧美高清在线观看 国产精品色在线播放 91精品国产国语对白视 亚洲裸男gv网站 亚洲 中文字幕在线播 在线亚洲一区网站 性久久久久久 国产乱码一二三区精品 国产夫妇精品自在线 色欲天天婬色婬香视频综合网站 国产91在线视频观看 一区二区三区四区无码精品视频 毛片av在线免费 婷婷五月精品中文字幕 国产成人精品cao在线 日韩精品亚洲精品 国产亚洲精品无码成人 91香蕉国产线在线观看免费 天天色天天爱 亚洲中文字幕无码爆乳av伊人 91精品国产手机在线版 大地资源在线观看官网第三页 国产综合精品久久亚洲 伊人久久精品亚洲午夜 无码毛片手机在线观看 狂躁美女大BBBBBB糟蹋 国产成人91高清精品免费 久久人妻制服乱码中文字幕 亚洲一级欧美一级日韩电影 欧美国产日韩一区二区不卡免费 久久中文字幕久久亚洲精品 JIZZYOU中国少妇 国产精品亚洲АV无码播放 哔哩哔哩高清免费观看 91香蕉视频在线播放 午夜男人福利深夜影院 国产精品久久无码一区 成人黄色免费网址 亚洲国产黄片观看 中文字字幕人妻中文 最近最新免费手机中文 Av片在线在哪看 国产精品极品露脸清纯 在线观看视频一区二区三区 国产人成91精品免费观看 JZZIJZZIJ亚洲成熟少妇 国产一区二区在线观看完整版 五十路六十路老熟妇a片 欧美拍拍视频免费大全 91色在线观看 WW国产内射精品后入国产 91亚洲精品户外中文在线 人人爱人人操人人摸 亚洲欧美日韩一级片 少妇饥渴偷公乱第一章全文 欧美日韩久久另类高清综合 久久精品久久久久久 日韩精品1024永久免费 超碰人人超碰人人 国产放荡对白视频在线观看 日本精品欧美中文字幕 国产中文字幕91在线 亚欧在线精品免费观看一区 亚洲无码中文字幕亚洲 亚洲欧美成aⅴ人在线观看 精品无码av一区二区三区 99在线观看视频 99中文字幕久久 无码免费的亚洲视频 国产精品亚洲日韩AⅤ在线 亚洲日韩在线免费观看 欧美一级特黄乱妇高清视频 AV永久天堂一区二区三区 永久观看国产裸体美女在线播放 福利姬液液酱喷水 金手指2023免费完整版在线观看 日本无遮挡在线观看 欧美性猛交XXXX乱大交极品 一级AV片久久精品 99在线国产不卡一级毛片tv 偷窥性别瘾xxxxx XXXX18HD亚洲HD护士 一级欧美日逼视频 成全高清电影免费观看国语 先锋影音每日AV资源 久久久久噜噜噜亚洲熟女综合 1原创国产AV剧情情欲放纵 色欲av自慰一区二区三区 国产精品一级毛片无码 亚洲无码观看视频 午夜精品久久久久久 国产精品一区二区手机看片 亚洲一卡2卡3卡4卡精品分类 成人午夜精品无码区久久试看 精品亚洲欧美高清不卡高清 2020欧洲一区二区三区免费观看 男人的天堂三八在线观看 成人无码区免费AⅤ片WWW 免费高清欧美精品黄片 亚洲第一无码精品一区 亚洲无码在线中文 校花醉酒后被乞丐进入 亚洲男人的午夜天堂 免费国产va在线观看 亚洲图片视频欧美日韩 午夜视频福利在线 国产精品美女一区二区视频 欧美在线观看不卡 精品日韩欧美国产一区二区三区 色妹子影院 XXXX18HD亚洲HD护士 麻豆一区二区三区蜜桃免费 国色天香社区视频在线 无忧传媒MV国产在线观看 日韩经典午夜福利发布 国自产拍亚洲免费视频 国产成人a高清视频 丁香五月亚洲综合色婷婷 亚洲欧洲日产国码一级毛片 国产精品乡下勾搭老头 亚洲制服丝袜精品久久 亚洲综合伊人久久大杳蕉 久久亚洲色一区二区三区免费 日本高清视频www 成人自拍网 91久久网 啊啊啊好大好粗好爽国产视频 国产成人无码一区二区在线播放 欧美黄色一级大片免费 无码熟妇人妻AV在线影片 国产成人麻豆亚洲综合 末发育女av片一区二区 色片免费在线观看 久久香蕉国产线看观看网 中文字幕91视频 海量毛片免费看 维修工人的绝遇视频 99精品久久久中文字幕 亚州一区二区三区中文字幕国产精品 中文字幕人伦无码 无码人妻精品一区二区三区下载 东京无码熟妇人妻AV在线网址 国产极品美女高潮无套 在线免费a级毛片 欧美色金8天国在线视频 99热国产这里只有精品免费 三级无码在线观看 乱子伦一区二区三区 国产内射极品中文字幕 无码三级在线看中文字幕 日本mv高清在线成人高清 欧美亚洲精品日韩国产 手机在线观看av片 国产高清一级片av 97视频热人人精品免费 国产成人综合色在线观看网站 无码人妻21p 91色综合综合热五月激情 日本尤物a优视频在线观看 成年大片无蔗当免费在线观看 香蕉在线影院 天天弄天天操 91香蕉福利一区二区三区 欧美成在线手机版1003 新狼窝色AV性久久久久久 中文字幕日本一区 精品国产黄色免费观看 亚洲综合久久无码中文字幕 在线观看一区无码专区 伊人久久大香线蕉综合7 久久精品女人天堂 国产精品VA在线观看无码电影麻 国内精品久久久久影院薰衣草 日日躁夜夜躁狠狠久久AV 成年人在线视频第一页 最美情侣中文字幕mv百度 少妇人妻偷人精品无码视频 久久久久久綜合88 欧美巨大XXXX做受l 日韩中文字幕一区 中文精品一卡2卡3卡4卡 午夜精品久久久久久毛片 欧美激情精品久久久久久 亚洲av无码不卡 日韩在线视频网站伊人网国产 日韩欧美国产综合 国产不卡在线 亚洲国产91在线精品国自产拍 女人喷水图内射美女18p 麻豆av最新在线播放 男女日bb视频 99机热国产在线观看 天天干成人网 最好中文字幕视频 韩国主播福利网一区二区三区 亚洲欧美综合国产精品一区 草草视频在线播放 国产精品第一区揄拍无码 国产成人综合激情伦成人综合小说 黑人玩弄人妻中文在线 91香蕉短视频 国产一精品在线一区在线观看 WWW无套内射高清免费 亚洲av麻豆aⅴ无码电影 国产理论剧情大片在线播放 国内精品久久久久久久试看 国产在线高清视频 yellow视频在线观看免费 无码专区亚洲综合另 亚洲成a人v在线观看 手机日韩精品视频在线看网站 国产黄在线播放免费观看 青青草视频在线观看 久久久精品人妻一区二区三区蜜桃 欧美大香线蕉线伊人久久 蜜桃AV国内精品自在线拍 成人黄色在线视频 国产成人片视频一区二区 男女一级a爱做视频 夜夜夜夜猛噜噜噜噜噜试看 免费一区二区精品无码视频 女儿的朋友5中汉字晋通话 久久人人97超碰中文 一本色道久久综合亚洲精品加 三级国产新婚之夜完整版 在线观看精品福利片香蕉 亚洲 日韩 激情 无码 中出 大桥久未无码吹潮在线观看 日韩国产精品专区一区性色 国产亚洲精品自在久久不卡 日韩精品一区不卡 性色欲情网站iwww 国产又大又粗又长免费视频 国产成a人亚洲精v品无码不卡 先锋影音人妻啪啪va资源网站 国产午夜福利精品 在线看亚洲AV成人片无码网站网 青柠影院电视剧电影 国产普通话黄色视频在线观看 污污内射在线观看一区二区少妇 亚洲天然素人无码专区亚洲 欧美 国产 综合 欧美 视频 国产日韩亚洲不卡高清在线观看 色先锋资源久久综合5566
漯河市| 元江| 佛学| 夏邑县| 河西区| 大田县| 夏河县| 晋中市| 江山市| 科尔| 武义县| 新巴尔虎右旗| 房产| 阿鲁科尔沁旗| 谷城县| 灵武市| 博乐市| 湘西| 曲麻莱县| 吕梁市| 秀山| 榆社县| 双辽市| 吉林省| 龙江县| 根河市| 科技| 塘沽区| 梓潼县| 措勤县| 东乡族自治县| 逊克县| 闻喜县| 祁东县| 炎陵县| 寿光市| 塔河县| 巴塘县| 九江市| 额济纳旗| 镇康县|