11.避免重定向
重定向會(huì)減慢用戶體驗(yàn),它會(huì)延遲所有的東西直至到達(dá)新頁(yè)面。一個(gè)最浪費(fèi)的重定向經(jīng)常會(huì)發(fā)生而我們的開(kāi)發(fā)者又會(huì)經(jīng)常忽略的就是比如http://astrology.yahoo.com/astrology的結(jié)果是重定向到http://astrology.yahoo.com/astrology/ 在Apache里用Alias 或者mod_rewrite或者DirectorySlash解決。 從一個(gè)舊網(wǎng)站跳轉(zhuǎn)到新網(wǎng)站也是經(jīng)常要用到重定向,還有就是連接一個(gè)網(wǎng)站中的不同部分和在某些情況下(比如不同瀏覽器,不同的用戶帳號(hào)類型,等等)的用戶導(dǎo)向。用重定向很簡(jiǎn)單,而且只需要一點(diǎn)額外的代碼,雖然在這些情況下用重定向減少了開(kāi)發(fā)者的復(fù)雜度,但它降低了用戶的體驗(yàn),變通的做法是用Alias和mod_rewrite如果兩個(gè)部分是在同一主機(jī)上的話,如果是由域名變更引起的重定向,變通的做法是通過(guò)Alias或mod_rewrite創(chuàng)建一個(gè)CNAME(一個(gè)DNS記錄,創(chuàng)建一個(gè)別名,從一個(gè)域名指向另一個(gè)域名)
12.去掉重復(fù)的腳本
(按:簡(jiǎn)單的說(shuō),同一個(gè)腳本如果被調(diào)用多次,瀏覽器并不會(huì)忽略后續(xù)的腳本,而總是覆蓋加載,覆蓋運(yùn)行,這樣會(huì)增加開(kāi)銷)
13.配置ETags
ETags(Entity tags)是服務(wù)器和瀏覽器的一個(gè)功能,它用來(lái)判斷瀏覽器緩存里的元素是否和原來(lái)服務(wù)器上的一致。ETags比last-modified date更具有彈性,它用一個(gè)獨(dú)一無(wú)二的字符串來(lái)標(biāo)識(shí)一個(gè)元素的版本。 源服務(wù)器用響應(yīng)頭里的ETag來(lái)特定一個(gè)元素的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è)304狀態(tài)的代碼就會(huì)從源服務(wù)器返回到瀏覽器,這樣源服務(wù)器就節(jié)省了傳輸具體數(shù)據(jù)的開(kāi)銷。 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
用Etags的問(wèn)題就在于它會(huì)標(biāo)識(shí)那個(gè)特定的服務(wù)器,如果換了服務(wù)器,Etags也就失去了原有的功能,但是這種現(xiàn)在在網(wǎng)絡(luò)上太常見(jiàn)了,因?yàn)槲覀兘?jīng)常用服務(wù)器集群。默認(rèn)情況下,Apache和IIS會(huì)在Etag中內(nèi)嵌數(shù)據(jù),這樣會(huì)動(dòng)態(tài)減少驗(yàn)證成功的機(jī)會(huì)。
Apache1.3和2.x的ETag格式是inode-size-timestamp。雖然一個(gè)文件可能在不同服務(wù)器的同一個(gè)目錄,同樣的大小,安全級(jí),時(shí)間戳等等,它的inode會(huì)隨著服務(wù)器的不同而不同。
IIS5.0和6.0有同樣類似Etags的東西,叫時(shí)間戳:ChangeNumber(更改號(hào)),更改號(hào)是一個(gè)用來(lái)追蹤IIS配置變化的計(jì)數(shù)器,ChangeNumber在不同IIS服務(wù)器之間是不一樣的。
它最終的問(wèn)題就是,IIS和Apache產(chǎn)生的Etags會(huì)在不同服務(wù)器之間無(wú)法匹配,這樣我們的瀏覽器就無(wú)法得到我們期待的304響應(yīng),而給我們的是一個(gè)普通的200響應(yīng),和正常的數(shù)據(jù)流。如果你的網(wǎng)站只有一個(gè)服務(wù)器還無(wú)所謂,如果是集群,而你用的是默認(rèn)的ETag配置,你的用戶就會(huì)獲得更慢的頁(yè)面,你的服務(wù)器也會(huì)有更高的負(fù)載,消耗更大的帶寬資源,代理也無(wú)法高效緩存你的內(nèi)容,甚至即使你有一個(gè)長(zhǎng)時(shí)間過(guò)期的頭部(按:見(jiàn)第三條規(guī)則),也不會(huì)阻止它重新載入內(nèi)容。
如果你不想發(fā)揮Etags提供的這個(gè)彈性驗(yàn)證模型的優(yōu)勢(shì),你最好關(guān)掉它。Apache中關(guān)掉它的方法是在Apache的配置文件中寫這么一句: FileETag none
14.讓Ajax緩存
人們會(huì)問(wèn)這些規(guī)則同樣適用于web2.0嗎?當(dāng)然!這個(gè)規(guī)則是我在雅虎工作做web2.0后得出的第一條規(guī)則。
Ajax的一個(gè)好處是它會(huì)給你實(shí)時(shí)的回饋,因?yàn)樗秃笈_(tái)的服務(wù)器是異步傳輸?shù),然而,用Ajax并不能保證你的用戶不用無(wú)聊的撥弄手指頭來(lái)等待這個(gè)回饋,在很多應(yīng)用中,用戶是否需要等待取決于Ajax是怎么用的,舉例說(shuō),在一個(gè)基于網(wǎng)頁(yè)的郵件客戶端,用戶會(huì)持續(xù)等待Ajax的回饋來(lái)搜索符合他的標(biāo)準(zhǔn)的郵件信息。記住“異步”并不意味著“實(shí)時(shí)”。讓它緩存的方式同樣是加一個(gè)過(guò)期頭部。
按: 粗略的譯了一下,并非逐字的翻譯,就是讓大家有所了解了,翻譯不好的地方請(qǐng)見(jiàn)諒! 上面那個(gè)圖大家可以在firebug(firefox下運(yùn)行)的net選項(xiàng)卡中獲得服務(wù)器的響應(yīng)數(shù)據(jù)! 基于以上規(guī)則,yahoo出了一個(gè)延伸firebug插件的插件。在這里下載: http://developer.yahoo.com/yslow/ welcome to my blog http://www.156544634.cn
經(jīng)典論壇討論: http://bbs.blueidea.com/thread-2822893-1-1.html
本文鏈接:http://www.95time.cn/tech/web/2008/5413.asp
出處:藍(lán)色理想
責(zé)任編輯:bluehearts
上一頁(yè) 高性能表現(xiàn)的網(wǎng)站 [2] 下一頁(yè)
◎進(jìn)入論壇網(wǎng)頁(yè)制作、WEB標(biāo)準(zhǔn)化版塊參加討論,我還想發(fā)表評(píng)論。
|