網站性能優化五---yahoo網站頁面性能優化34條黃金守則---content

[color=red][b]1.Minimize HTTP Requests

儘量減少HTTP請求次數[/b][/color]

[url]http://developer.yahoo.com/performance/rules.html#num_http[/url]

[color=olive]CSS Sprites[/color]是減少圖像請求的有效方法。把所有的背景圖像都放到一個圖片文件中,然後通過CSS的background-image和 background-position屬性來顯示圖片的不同部分;
[color=olive]圖片地圖[/color]是把多張圖片整合到一張圖片中。雖然文件的總體大小不會改變,但是可以減少HTTP請求次數。圖片地圖只有在圖片的所有組成部分在頁面中是緊挨在一起的時候才能使用,如導航欄。確定圖片的座標和可能會比較繁瑣且容易出錯,同時使用圖片地圖導航也不具有可讀性,因此不推薦這種方法;
[color=olive]內聯圖像[/color]是使用data:URL scheme的方法把圖像數據加載頁面中。這可能會增加頁面的大小。把內聯圖像放到樣式表(可緩存)中可以減少HTTP請求同時又避免增加頁面文件的大小。但是內聯圖像現在還沒有得到主流瀏覽器的支持。
減少頁面的HTTP請求次數是你首先要做的一步。這是改進首次訪問用戶等待時間的最重要的方法。如同Tenni Theurer的他的博客Browser Cahe Usage - Exposed!中所說,HTTP請求在無緩存情況下佔去了40%到60%的響應時間。讓那些初次訪問你網站的人獲得更加快速的體驗吧!

[color=olive]CSS Sprites[/color]
[url]http://alistapart.com/articles/sprites[/url]

[color=olive]Image maps[/color]
[url]http://www.w3.org/TR/html401/struct/objects.html#h-13.6[/url]

[color=olive]data: URL scheme[/color]
[url]http://tools.ietf.org/html/rfc2397[/url]

[color=olive]Browser Cache Usage - Exposed[/color]
[url]http://yuiblog.com/blog/2007/01/04/performance-research-part-2/[/url]


[color=red][b]2.Reduce DNS Lookups

減少DNS查找次數[/b][/color]

[url]http://developer.yahoo.com/performance/rules.html#dns_lookups[/url]

DNS解析的過程同樣也是需要時間的。[color=olive]一般情況下返回給定域名對應的IP地址會花費20到120毫秒的時間。[/color]而且在這個過程中瀏覽器什麼都不會做直到DNS查找完畢。
緩存DNS查找可以改善頁面性能。這種緩存需要一個特定的緩存服務器,這種服務器一般屬於用戶的ISP提供商或者本地局域網控制,但是它同樣會在用戶使用的計算機上產生緩存。DNS信息會保留在操作系統的DNS緩存中(微軟Windows系統中DNS Client Service)。大多數瀏覽器有獨立於操作系統以外的自己的緩存。由於瀏覽器有自己的緩存記錄,因此在一次請求中它不會受到操作系統的影響。
Internet Explorer默認情況下對DNS查找記錄的緩存時間爲30分鐘,它在註冊表中的鍵值爲DnsCacheTimeout。Firefox對DNS的查找記錄緩存時間爲1分鐘,它在配置文件中的選項爲network.dnsCacheExpiration(Fasterfox把這個選項改爲了1小時)。
當客戶端中的DNS緩存都爲空時(瀏覽器和操作系統都爲空),DNS查找的次數和頁面中主機名的數量相同。這其中包括頁面中URL、圖片、腳本文件、樣式表、Flash對象等包含的主機名。減少主機名的數量可以減少DNS查找次數。
減少主機名的數量還可以減少頁面中並行下載的數量。[color=blue]減少DNS查找次數可以節省響應時間,但是減少並行下載卻會增加響應時間。我的指導原則是把這些頁面中的內容分割成至少兩部分但不超過四部分。這種結果就是在減少DNS查找次數和保持較高程度並行下載兩者之間的權衡了。[/color]


[color=red][b]3.Avoid Redirects

避免跳轉[/b][/color]

[url]http://developer.yahoo.com/performance/rules.html#redirects[/url]

有一種經常被網頁開發者忽略卻往往十分浪費響應時間的跳轉現象。這種現象發生在當[color=blue]URL本該有斜槓(/)卻被忽略掉[/color]時。例如,當[color=blue]我們要訪問http: //astrology.yahoo.com/astrology 時,實際上返回的是一個包含301代碼的跳轉,它指向的是http://astrology.yahoo.com/astrology/ (注意末尾的斜槓)。在Apache服務器中可以使用Alias 或者 mod_rewrite或者the DirectorySlash來避免。[/color]
連接新網站和舊網站是跳轉功能經常被用到的另一種情況。這種情況下往往要連接網站的不同內容然後根據用戶的不同類型(如瀏覽器類型、用戶賬號所屬類型)來進行跳轉。使用跳轉來實現兩個網站的切換十分簡單,需要的代碼量也不多。儘管使用這種方法對於開發者來說可以降低複雜程度,但是它同樣降低用戶體驗。[color=blue]一個可替代方法就是如果兩者在同一臺服務器上時使用Alias和mod_rewrite和實現。如果是因爲域名的不同而採用跳轉,那麼可以通過使用 Alias或者mod_rewirte建立CNAME(保存一個域名和另外一個域名之間關係的DNS記錄)來替代。[/color]


[color=red][b]4.Make Ajax Cacheable

可緩存的AJAX[/b][/color]

[url]http://developer.yahoo.com/performance/rules.html#cacheajax[/url]


[color=red][b]5.Post-load Components

推遲加載內容[/b][/color]

[url]http://developer.yahoo.com/performance/rules.html#postload[/url]

[color=olive]YUI Image Loader[/color]
[url]http://developer.yahoo.com/yui/imageloader/[/url]

[color=olive]YUI Get utility[/color]
[url]http://developer.yahoo.com/yui/get/[/url]


[color=red][b]6.Preload Components

預加載[/b][/color]

[url]http://developer.yahoo.com/performance/rules.html#preload[/url]

預加載是在瀏覽器空閒時請求將來可能會用到的頁面內容(如圖像、樣式表和腳本)。使用這種方法,當用戶要訪問下一個頁面時,頁面中的內容大部分已經加載到緩存中了,因此可以大大改善訪問速度。


[color=red][b]7.Reduce the Number of DOM Elements

減少DOM元素數量[/b][/color]

[url]http://developer.yahoo.com/performance/rules.html#min_dom[/url]

一個複雜的頁面意味着需要下載更多數據,同時也意味着JavaScript遍歷DOM的效率越慢。比如當你增加一個事件句柄時在500和5000個 DOM元素中循環效果肯定是不一樣的。
大量的DOM元素的存在意味着頁面中有可以不用移除內容只需要替換元素標籤就可以精簡的部分。你在頁面佈局中使用表格了嗎?你有沒有僅僅爲了佈局而引入更多的<div>元素呢?也許會存在一個適合或者在語意是更貼切的標籤可以供你使用。
[color=olive]YUI CSS utilities[/color]可以給你的佈局帶來巨大幫助:grids.css可以幫你實現整體佈局,[color=olive]font.css和reset.css[/color]可以幫助你移除瀏覽器默認格式。它提供了一個重新審視你頁面中標籤的機會,比如只有在語意上有意義時才使用<div>,而不是因爲它具有換行效果才使用它。
DOM元素數量很容易計算出來,只需要在Firebug的控制檯內輸入:
[color=blue]document.getElementsByTagName('*').length[/color]
那麼多少個DOM元素算是多呢?這可以對照有很好標記使用的類似頁面。比如Yahoo!主頁是一個內容非常多的頁面,但是它只使用了[color=olive]700個元素[/color](HTML標籤)。

[color=olive]YUI CSS utilities[/color]
[url]http://developer.yahoo.com/yui/[/url]


[color=red][b]8.Split Components Across Domains

根據域名劃分頁面內容[/b][/color]

[url]http://developer.yahoo.com/performance/rules.html#split[/url]

把頁面內容劃分成若干部分可以使你最大限度地實現平行下載。由於DNS查找帶來的影響你首先要確保你使用的域名數量在2個到4個之間。例如,你可以把用到的HTML內容和動態內容放在www.example.org上,而把頁面各種組件(圖片、腳本、CSS)分別存放在 static1.example.org和static2.example.org上。
你可在Tenni Theurer和Patty Chi合寫的文章Maximizing Parallel Downloads in the Carpool Lane找到更多相關信息。

[color=olive]Maximizing Parallel Downloads in the Carpool Lane[/color]
[url]http://yuiblog.com/blog/2007/04/11/performance-research-part-4/[/url]


[color=red][b]9.Minimize the Number of iframes

使iframe的數量最小[/b][/color]

[url]http://developer.yahoo.com/performance/rules.html#iframes[/url]

ifrmae元素可以在父文檔中插入一個新的HTML文檔。瞭解iframe的工作理然後才能更加有效地使用它,這一點很重要。

<iframe>優點:

解決加載緩慢的第三方內容如圖標和廣告等的加載問題
Security sandbox
並行加載腳本
<iframe>的缺點:

即時內容爲空,加載也需要時間
會阻止頁面加載
沒有語意


[color=red][b]10.No 404s

不要出現404錯誤[/b][/color]

[url]http://developer.yahoo.com/performance/rules.html#no404[/url]
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章