日本免费精品_最新日韩一区_亚洲视频一区在线_a在线视频观看_天天射夜夜骑_粉嫩av一区二区三区_欧美中日韩免费视频_综合图区欧美_国内精品美女在线观看_午夜精品久久久久久久男人的天堂

首頁 > 編程 > HTML > 正文

淺談雅虎前端優(yōu)化的35條軍規(guī)

2024-08-26 00:20:42
字體:
供稿:網(wǎng)友

摘要:無論是在工作中,還是在面試中,web前端性能的優(yōu)化都是很重要的,那么我們進(jìn)行優(yōu)化需要從哪些方面入手呢?可以遵循雅虎的前端優(yōu)化34條軍規(guī),不過現(xiàn)在已經(jīng)是35條了,所以可以說是雅虎前端優(yōu)化的35條軍規(guī)。已分類,挺好的,這樣對于優(yōu)化有一個比較清晰的方向

內(nèi)容部分

1.盡量減少HTTP請求數(shù)

80%的終端用戶響應(yīng)時間都花在了前端上,其中大部分時間都在下載頁面上的各種組件:圖片,樣式表,腳本,F(xiàn)lash等等。減少組件數(shù)必然能夠減少頁面提交的HTTP請求數(shù)。這是讓頁面更快的關(guān)鍵。

減少頁面組件數(shù)的一種方式是簡化頁面設(shè)計(jì)。但有沒有一種方法可以在構(gòu)建復(fù)雜的頁面同時加快響應(yīng)時間呢?嗯,確實(shí)有魚和熊掌兼得的辦法。

合并文件是通過把所有腳本放在一個文件中的方式來減少請求數(shù)的,當(dāng)然,也可以合并所有的CSS。如果各個頁面的腳本和樣式不一樣的話,合并文件就是一項(xiàng)比較麻煩的工作了,但把這個作為站點(diǎn)發(fā)布過程的一部分確實(shí)可以提高響應(yīng)時間。

CSS Sprites是減少圖片請求數(shù)量的首選方式。把背景圖片都整合到一張圖片中,然后用CSS的background-image和background-position屬性來定位要顯示的部分。

圖像映射可以把多張圖片合并成單張圖片,總大小是一樣的,但減少了請求數(shù)并加速了頁面加載。圖片映射只有在圖像在頁面中連續(xù)的時候才有用,比如導(dǎo)航條。給image map設(shè)置坐標(biāo)的過程既無聊又容易出錯,用image map來做導(dǎo)航也不容易,所以不推薦用這種方式。

行內(nèi)圖片(Base64編碼)用data: URL模式來把圖片嵌入頁面。這樣會增加HTML文件的大小,把行內(nèi)圖片放在(緩存的)樣式表中是個好辦法,而且成功避免了頁面變“重”。但目前主流瀏覽器并不能很好地支持行內(nèi)圖片。

減少頁面的HTTP請求數(shù)是個起點(diǎn),這是提升站點(diǎn)首次訪問速度的重要指導(dǎo)原則。

2.減少DNS查找

域名系統(tǒng)建立了主機(jī)名和IP地址間的映射,就像電話簿上人名和號碼的映射一樣。當(dāng)你在瀏覽器輸入www.yahoo.com的時候,瀏覽器就會聯(lián)系DNS解析器返回服務(wù)器的IP地址。DNS是有成本的,它需要20到120毫秒去查找給定主機(jī)名的IP地址。在DNS查找完成之前,瀏覽器無法從主機(jī)名下載任何東西。

DNS查找被緩存起來更高效,由用戶的ISP(網(wǎng)絡(luò)服務(wù)提供商)或者本地網(wǎng)絡(luò)存在一個特殊的緩存服務(wù)器上,但還可以緩存在個人用戶的計(jì)算機(jī)上。DNS信息被保存在操作系統(tǒng)的DNS cache(微軟Windows上的”DNS客戶端服務(wù)”)里。大多數(shù)瀏覽器有獨(dú)立于操作系統(tǒng)的自己的cache。只要瀏覽器在自己的cache里還保留著這條記錄,它就不會向操作系統(tǒng)查詢DNS。

IE默認(rèn)緩存DNS查找30分鐘,寫在DnsCacheTimeout注冊表設(shè)置中。Firefox緩存1分鐘,可以用network.dnsCacheExpiration配置項(xiàng)設(shè)置。(Fasterfox把緩存時間改成了1小時 P.S. Fasterfox是FF的一個提速插件)

如果客戶端的DNS cache是空的(包括瀏覽器的和操作系統(tǒng)的),DNS查找數(shù)等于頁面上不同的主機(jī)名數(shù),包括頁面URL,圖片,腳本文件,樣式表,F(xiàn)lash對象等等組件中的主機(jī)名,減少不同的主機(jī)名就可以減少DNS查找。

減少不同主機(jī)名的數(shù)量同時也減少了頁面能夠并行下載的組件數(shù)量,避免DNS查找削減了響應(yīng)時間,而減少并行下載數(shù)量卻增加了響應(yīng)時間。我的原則是把組件分散在2到4個主機(jī)名下,這是同時減少DNS查找和允許高并發(fā)下載的折中方案。

3.避免重定向

重定向用301和302狀態(tài)碼,下面是一個有301狀態(tài)碼的HTTP頭:

HTTP/1.1 301 Moved PermanentlyLocation: http://example.com/newuriContent-Type: text/html

瀏覽器會自動跳轉(zhuǎn)到Location域指明的URL。重定向需要的所有信息都在HTTP頭部,而響應(yīng)體一般是空的。其實(shí)額外的HTTP頭,比如Expires和Cache-Control也表示重定向。除此之外還有別的跳轉(zhuǎn)方式:refresh元標(biāo)簽和JavaScript,但如果你必須得做重定向,最好用標(biāo)準(zhǔn)的3xxHTTP狀態(tài)碼,主要是為了讓返回按鈕能正常使用。

牢記重定向會拖慢用戶體驗(yàn),在用戶和HTML文檔之間插入重定向會延遲頁面上的所有東西,頁面無法渲染,組件也無法開始下載,直到HTML文檔被送達(dá)瀏覽器。

有一種常見的極其浪費(fèi)資源的重定向,而且web開發(fā)人員一般都意識不到這一點(diǎn),就是URL尾部缺少一個斜線的時候。例如,跳轉(zhuǎn)到http://astrology.yahoo.com/astrology會返回一個重定向到http://astrology.yahoo.com/astrology/的301響應(yīng)(注意添在尾部的斜線)。在Apache中可以用Alias,mod_rewrite或者DirectorySlash指令來取消不必要的重定向。

重定向最常見的用途是把舊站點(diǎn)連接到新的站點(diǎn),還可以連接同一站點(diǎn)的不同部分,針對用戶的不同情況(瀏覽器類型,用戶帳號類型等等)做一些處理。用重定向來連接兩個網(wǎng)站是最簡單的,只需要少量的額外代碼。雖然在這些時候使用重定向減少了開發(fā)人員的開發(fā)復(fù)雜度,但降低了用戶體驗(yàn)。一種替代方案是用Alias和mod_rewrite,前提是兩個代碼路徑都在相同的服務(wù)器上。如果是因?yàn)橛蛎兓褂昧酥囟ㄏ颍涂梢詣?chuàng)建一條CNAME(創(chuàng)建一個指向另一個域名的DNS記錄作為別名)結(jié)合Alias或者mod_rewrite指令。

4.讓Ajax可緩存

Ajax的一個好處是可以給用戶提供即時反饋,因?yàn)樗軌驈暮笈_服務(wù)器異步請求信息。然而,用了Ajax就無法保證用戶在等待異步JavaScript和XML響應(yīng)返回期間不會非常無聊。在很多應(yīng)用程序中,用戶能夠一直等待取決于如何使用Ajax。例如,在基于web的電子郵件客戶端中,用戶為了尋找符合他們搜索標(biāo)準(zhǔn)的郵件消息,將會保持對Ajax請求返回結(jié)果的關(guān)注。重要的是,要記得“異步”并不意味著“即時”。

要提高性能,優(yōu)化這些Ajax響應(yīng)至關(guān)重要。最重要的提高Ajax性能的方法就是讓響應(yīng)變得可緩存,就像在添上Expires或者Cache-Control HTTP頭中討論的一樣。下面適用于Ajax的其它規(guī)則:

  1. Gzip組件
  2. 減少DNS查找
  3. 壓縮JavaScript
  4. 避免重定向
  5. 配置ETags

我們一起看看例子,一個Web 2.0的電子郵件客戶端用了Ajax來下載用戶的通訊錄,以便實(shí)現(xiàn)自動完成功能。如果用戶從上一次使用之后再沒有修改過她的通訊錄,而且Ajax響應(yīng)是可緩存的,有尚未過期的Expires或者Cache-Control HTTP頭,那么之前的通訊錄就可以從緩存中讀出。必須通知瀏覽器,應(yīng)該繼續(xù)使用之前緩存的通訊錄響應(yīng),還是去請求一個新的。可以通過給通訊錄的Ajax URL里添加一個表明用戶通訊錄最后修改時間的時間戳來實(shí)現(xiàn),例如&t=1190241612。如果通訊錄從上一次下載之后再沒有被修改過,時間戳不變,通訊錄就將從瀏覽器緩存中直接讀出,從而避免一次額外的HTTP往返消耗。如果用戶已經(jīng)修改了通訊錄,時間戳也可以確保新的URL不會匹配緩存的響應(yīng),瀏覽器將請求新的通訊錄條目。

即使Ajax響應(yīng)是動態(tài)創(chuàng)建的,而且可能只適用于單用戶,它們也可以被緩存,而這樣會讓你的Web 2.0應(yīng)用更快。

5.延遲加載組件

可以湊近看看頁面并問自己:什么才是一開始渲染頁面所必須的?其余內(nèi)容都可以等會兒。

JavaScript是分隔onload事件之前和之后的一個理想選擇。例如,如果有JavaScript代碼和支持拖放以及動畫的庫,這些都可以先等會兒,因?yàn)橥戏旁厥窃陧撁孀畛蹁秩局蟮摹F渌梢匝舆t加載的部分包括隱藏內(nèi)容(在某個交互動作之后才出現(xiàn)的內(nèi)容)和折疊的圖片。

工具可幫你減輕工作量:YUI Image Loader可以延遲加載折疊的圖片,還有YUI Get utility是一種引入JS和CSS的簡單方法。Yahoo!主頁就是一個例子,可以打開Firebug的網(wǎng)絡(luò)面板仔細(xì)看看。

最好讓性能目標(biāo)符合其它web開發(fā)最佳實(shí)踐,比如“漸進(jìn)增強(qiáng)”。如果客戶端支持JavaScript,可以提高用戶體驗(yàn),但必須確保頁面在不支持JavaScript時也能正常工作。所以,在確定頁面運(yùn)行正常之后,可以用一些延遲加載腳本增強(qiáng)它,以支持一些拖放和動畫之類的華麗效果。

6.預(yù)加載組件

預(yù)加載可能看起來和延遲加載是相反的,但它其實(shí)有不同的目標(biāo)。通過預(yù)加載組件可以充分利用瀏覽器空閑的時間來請求將來會用到的組件(圖片,樣式和腳本)。用戶訪問下一頁的時候,大部分組件都已經(jīng)在緩存里了,所以在用戶看來頁面會加載得更快。

實(shí)際應(yīng)用中有以下幾種預(yù)加載的類型:

  1. 無條件預(yù)加載——盡快開始加載,獲取一些額外的組件。google.com就是一個sprite圖片預(yù)加載的好例子,這個sprite圖片并不是google.com主頁需要的,而是搜索結(jié)果頁面上的內(nèi)容。
  2. 條件性預(yù)加載——根據(jù)用戶操作猜測用戶將要跳轉(zhuǎn)到哪里并據(jù)此預(yù)加載。在search.yahoo.com的輸入框里鍵入內(nèi)容后,可以看到那些額外組件是怎樣請求加載的。
  3. 提前預(yù)加載——在推出新設(shè)計(jì)之前預(yù)加載。經(jīng)常在重新設(shè)計(jì)之后會聽到:“這個新網(wǎng)站不錯,但比以前更慢了”,一部分原因是用戶訪問先前的頁面都是有舊緩存的,但新的卻是一種空緩存狀態(tài)下的體驗(yàn)。可以通過在將要推出新設(shè)計(jì)之前預(yù)加載一些組件來減輕這種負(fù)面影響,老站可以利用瀏覽器空閑的時間來請求那些新站需要的圖片和腳本。

 7.減少DOM元素的數(shù)量

一個復(fù)雜的頁面意味著要下載更多的字節(jié),而且用JavaScript訪問DOM也會更慢。舉個例子,想要添加一個事件處理器的時候,循環(huán)遍歷頁面上的500個DOM元素和5000個DOM元素是有區(qū)別的。

大量的DOM元素是一種征兆——頁面上有些內(nèi)容無關(guān)的標(biāo)記需要清理。正在用嵌套表格來布局嗎?還是為了修復(fù)布局問題而添了一堆的<div>s?或許應(yīng)該用更好的語義化標(biāo)記。

YUI CSS utilities對布局有很大幫助:grids.css針對整體布局,fonts.css和reset.css可以用來去除瀏覽器的默認(rèn)格式。這是個開始清理和思考標(biāo)記的好機(jī)會,例如只在語義上有意義的時候使用<div>,而不是因?yàn)樗軌蜾秩疽粋€新行。

DOM元素的數(shù)量很容易測試,只需要在Firebug的控制臺里輸入:

document.getElementsByTagName('*').length

那么多少DOM元素才算是太多呢?可以參考其它類似的標(biāo)記良好的頁面,例如Yahoo!主頁是一個相當(dāng)繁忙的頁面,但只有不到700個元素(HTML標(biāo)簽)。

8.跨域分離組件

分離組件可以最大化并行下載,但要確保只用不超過2-4個域,因?yàn)榇嬖贒NS查找的代價。例如,可以把HTML和動態(tài)內(nèi)容部署在www.example.org,而把靜態(tài)組件分離到static1.example.org和static2.example.org。

9.盡量少用iframe

用iframe可以把一個HTML文檔插入到父文檔里,重要的是明白iframe是如何工作的并高效地使用它。

<iframe>的優(yōu)點(diǎn):

  1. 引入緩慢的第三方內(nèi)容,比如標(biāo)志和廣告
  2. 安全沙箱
  3. 并行下載腳本

<iframe>的缺點(diǎn):

  1. 代價高昂,即使是空白的iframe
  2. 阻塞頁面加載
  3. 非語義

10.杜絕404

HTTP請求代價高昂,完全沒有必要用一個HTTP請求去獲取一個無用的響應(yīng)(比如404 Not Found),只會拖慢用戶體驗(yàn)而沒有任何好處。

有些站點(diǎn)用的是有幫助的404——“你的意思是xxx?”,這樣做有利于用戶體驗(yàn),,但也浪費(fèi)了服務(wù)器資源(比如數(shù)據(jù)庫等等)。最糟糕的是鏈接到的外部JavaScript有錯誤而且結(jié)果是404。首先,這種下載將阻塞并行下載。其次,瀏覽器會試圖解析404響應(yīng)體,因?yàn)樗荍avaScript代碼,需要找出其中可用的部分。

css部分

11.避免使用CSS表達(dá)式

用CSS表達(dá)式動態(tài)設(shè)置CSS屬性,是一種強(qiáng)大又危險的方式。從IE5開始支持,但從IE8起就不推薦使用了。例如,可以用CSS表達(dá)式把背景顏色設(shè)置成按小時交替的:

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

12.選擇<link>舍棄@import

前面提到了一個最佳實(shí)踐:為了實(shí)現(xiàn)逐步渲染,CSS應(yīng)該放在頂部。

在IE中用@import與在底部用<link>效果一樣,所以最好不要用它。

13.避免使用濾鏡

IE專有的AlphaImageLoader濾鏡可以用來修復(fù)IE7之前的版本中半透明PNG圖片的問題。在圖片加載過程中,這個濾鏡會阻塞渲染,卡住瀏覽器,還會增加內(nèi)存消耗而且是被應(yīng)用到每個元素的,而不是每個圖片,所以會存在一大堆問題。

最好的方法是干脆不要用AlphaImageLoader,而優(yōu)雅地降級到用在IE中支持性很好的PNG8圖片來代替。如果非要用AlphaImageLoader,應(yīng)該用下劃線hack:_filter來避免影響IE7及更高版本的用戶。

14.把樣式表放在頂部

在Yahoo!研究性能的時候,我們發(fā)現(xiàn)把樣式表放到文檔的HEAD部分能讓頁面看起來加載地更快。這是因?yàn)榘褬邮奖矸旁趆ead里能讓頁面逐步渲染。

關(guān)注性能的前端工程師想讓頁面逐步渲染。也就是說,我們想讓瀏覽器盡快顯示已有內(nèi)容,這在頁面上有一大堆內(nèi)容或者用戶網(wǎng)速很慢時顯得尤為重要。給用戶顯示反饋(比如進(jìn)度指標(biāo))的重要性已經(jīng)被廣泛研究過,并且被記錄下來了。在我們的例子中,HTML頁面就是進(jìn)度指標(biāo)!當(dāng)瀏覽器逐漸加載頁面頭部,導(dǎo)航條,頂部logo等等內(nèi)容的時候,這些都被正在等待頁面加載的用戶當(dāng)作反饋,能夠提高整體用戶體驗(yàn)。

js部分

15.去除重復(fù)腳本

頁面含有重復(fù)的腳本文件會影響性能,這可能和你想象的不一樣。在對美國前10大web站點(diǎn)的評審中,發(fā)現(xiàn)只有2個站點(diǎn)含有重復(fù)腳本。兩個主要原因增加了在單一頁面中出現(xiàn)重復(fù)腳本的幾率:團(tuán)隊(duì)大小和腳本數(shù)量。在這種情況下,重復(fù)腳本會創(chuàng)建不必要的HTTP請求,執(zhí)行無用的JavaScript代碼,而影響頁面性能。

IE會產(chǎn)生不必要的HTTP請求,而Firefox不會。在IE中,如果一個不可緩存的外部腳本被頁面引入了兩次,它會在頁面加載時產(chǎn)生兩個HTTP請求。即使腳本是可緩存的,在用戶重新加載頁面時也會產(chǎn)生額外的HTTP請求。

除了產(chǎn)生沒有意義的HTTP請求之外,多次對腳本求值也會浪費(fèi)時間。因?yàn)闊o論腳本是否可緩存,在Firefox和IE中都會執(zhí)行冗余的JavaScript代碼。

避免不小心把相同腳本引入兩次的一種方法就是在模版系統(tǒng)中實(shí)現(xiàn)腳本管理模塊。典型的腳本引入方法就是在HTML頁面中用SCRIPT標(biāo)簽:

 <script type="text/javascript" src="menu_1.0.17.js"></script> 

16.盡量減少DOM訪問

用JavaScript訪問DOM元素是很慢的,所以,為了讓頁面反應(yīng)更迅速,應(yīng)該:

  1. 緩存已訪問過的元素的索引
  2. 先“離線”更新節(jié)點(diǎn),再把它們添到DOM樹上
  3. 避免用JavaScript修復(fù)布局問題 

17.用智能的事件處理器

有時候感覺頁面反映不夠靈敏,是因?yàn)橛刑囝l繁執(zhí)行的事件處理器被添加到了DOM樹的不同元素上,這就是推薦使用事件委托的原因。如果一個div里面有10個按鈕,應(yīng)該只給div容器添加一個事件處理器,而不是給每個按鈕都添加一個。事件能夠冒泡,所以可以捕獲事件并得知哪個按鈕是事件源。

18.把腳本放在底部

腳本會阻塞并行下載,HTTP/1.1官方文檔建議瀏覽器每個主機(jī)名下并行下載的組件數(shù)不要超過兩個,如果圖片來自多個主機(jī)名,并行下載的數(shù)量就可以超過兩個。如果腳本正在下載,瀏覽器就不開始任何其它下載任務(wù),即使是在不同主機(jī)名下的。

有時候,并不容易把腳本移動到底部。舉個例子,如果腳本是用document.write插入到頁面內(nèi)容中的,就沒辦法再往下移了。還可能存在作用域問題,在多數(shù)情況下,這些問題都是可以解決的。

一個常見的建議是用推遲(deferred)腳本,有DEFER屬性的腳本意味著不能含有document.write,并且提示瀏覽器告訴他們可以繼續(xù)渲染。不幸的是,F(xiàn)irefox不支持DEFER屬性。在IE中,腳本可能被推遲,但不盡如人意。如果腳本可以推遲,我們就可以把它放到頁面底部,頁面就可以更快地載入。

javascript, css

19.把JavaScript和CSS放到外面

很多性能原則都是關(guān)于如何管理外部組件的,然而,在這些顧慮出現(xiàn)之前你應(yīng)該問一個更基礎(chǔ)的問題:應(yīng)該把JavaScript和CSS放到外部文件中還是直接寫在頁面里?

實(shí)際上,用外部文件可以讓頁面更快,因?yàn)镴avaScript和CSS文件會被緩存在瀏覽器。HTML文檔中的行內(nèi)JavaScript和CSS在每次請求該HTML文檔的時候都會重新下載。這樣做減少了所需的HTTP請求數(shù),但增加了HTML文檔的大小。另一方面,如果JavaScript和CSS在外部文件中,并且已經(jīng)被瀏覽器緩存起來了,那么我們就成功地把HTML文檔變小了,而且還沒有增加HTTP請求數(shù)。

20.壓縮JavaScript和CSS

壓縮具體來說就是從代碼中去除不必要的字符以減少大小,從而提升加載速度。代碼最小化就是去掉所有注釋和不必要的空白字符(空格,換行和tab)。在JavaScript中這樣做能夠提高響應(yīng)性能,因?yàn)橐螺d的文件變小了。兩個最常用的JavaScript代碼壓縮工具是JSMin和YUI Compressor,YUI compressor還可以壓縮CSS。

混淆是一種可選的源碼優(yōu)化措施,要比壓縮更復(fù)雜,所以混淆過程也更容易產(chǎn)生bug。在對美國前十的網(wǎng)站調(diào)查中,壓縮可以縮小21%,而混淆能縮小25%。雖然混淆的縮小程度更高,但比壓縮風(fēng)險更大。

除了壓縮外部腳本和樣式,行內(nèi)的<script>和<style>塊也可以壓縮。即使啟用了gzip模塊,先進(jìn)行壓縮也能夠縮小5%或者更多的大小。JavaScript和CSS的用處越來越多,所以壓縮代碼會有不錯的效果。

圖片

21.優(yōu)化圖片

嘗試把GIF格式轉(zhuǎn)換成PNG格式,看看是否節(jié)省空間。在所有的PNG圖片上運(yùn)行pngcrush(或者其它PNG優(yōu)化工具)

22.優(yōu)化CSS Sprite

  1. 在Sprite圖片中橫向排列一般都比縱向排列的最終文件小
  2. 組合Sprite圖片中的相似顏色可以保持低色數(shù),最理想的是256色以下PNG8格式
  3. “對移動端友好”,不要在Sprite圖片中留下太大的空隙。雖然不會在很大程度上影響圖片文件的大小,但這樣做可以節(jié)省用戶代理把圖片解壓成像素映射時消耗的內(nèi)存。100×100的圖片是1萬個像素,而1000×1000的圖片就是100萬個像素了。

23.不要用HTML縮放圖片

不要因?yàn)樵贖TML中可以設(shè)置寬高而使用本不需要的大圖。如果需要

<img width="100" height="100" src="mycat.jpg"      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

32.對Ajax用GET請求

Yahoo!郵箱團(tuán)隊(duì)發(fā)現(xiàn)使用XMLHttpRequest時,瀏覽器的POST請求是通過一個兩步的過程來實(shí)現(xiàn)的:先發(fā)送HTTP頭,在發(fā)送數(shù)據(jù)。所以最好用GET請求,它只需要發(fā)送一個TCP報文(除非cookie特別多)。IE的URL長度最大值是2K,所以如果要發(fā)送的數(shù)據(jù)超過2K就無法使用GET了。

POST請求的一個有趣的副作用是實(shí)際上沒有發(fā)送任何數(shù)據(jù),就像GET請求一樣。正如HTTP說明文檔中描述的,GET請求是用來檢索信息的。所以它的語義只是用GET請求來請求數(shù)據(jù),而不是用來發(fā)送需要存儲到服務(wù)器的數(shù)據(jù)。

33.盡早清空緩沖區(qū)

當(dāng)用戶請求一個頁面時,服務(wù)器需要用大約200到500毫秒來組裝HTML頁面,在這期間,瀏覽器閑等著數(shù)據(jù)到達(dá)。PHP中有一個flush()函數(shù),允許給瀏覽器發(fā)送一部分已經(jīng)準(zhǔn)備完畢的HTML響應(yīng),以便瀏覽器可以在后臺準(zhǔn)備剩余部分的同時開始獲取組件,好處主要體現(xiàn)在很忙的后臺或者很“輕”的前端頁面上(P.S. 也就是說,響應(yīng)時耗主要在后臺方面時最能體現(xiàn)優(yōu)勢)。

較理想的清空緩沖區(qū)的位置是HEAD后面,因?yàn)镠TML的HEAD部分通常更容易生成,并且允許引入任何CSS和JavaScript文件,這樣就可以讓瀏覽器在后臺還在處理的時候就開始并行獲取組件。

例如:

 ... <!-- css, js -->    </head>    <?php flush(); ?>    <body>      ... <!-- content -->

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

用戶與服務(wù)器的物理距離對響應(yīng)時間也有影響。把內(nèi)容部署在多個地理位置分散的服務(wù)器上能讓用戶更快地載入頁面。但具體要怎么做呢?

實(shí)現(xiàn)內(nèi)容在地理位置上分散的第一步是:不要嘗試去重新設(shè)計(jì)你的web應(yīng)用程序來適應(yīng)分布式結(jié)構(gòu)。這取決于應(yīng)用程序,改變結(jié)構(gòu)可能包括一些讓人望而生畏的任務(wù),比如同步會話狀態(tài)和跨服務(wù)器復(fù)制數(shù)據(jù)庫事務(wù)(翻譯可能不準(zhǔn)確)。縮短用戶和內(nèi)容之間距離的提議可能被推遲,或者根本不可能通過,就是因?yàn)檫@個難題。

記住終端用戶80%到90%的響應(yīng)時間都花在下載頁面組件上了:圖片,樣式,腳本,F(xiàn)lash等等,這是業(yè)績黃金法則。最好先分散靜態(tài)內(nèi)容,而不是一開始就重新設(shè)計(jì)應(yīng)用程序結(jié)構(gòu)。這不僅能夠大大減少響應(yīng)時間,還更容易表現(xiàn)出CDN的功勞。

內(nèi)容分發(fā)網(wǎng)絡(luò)(CDN)是一組分散在不同地理位置的web服務(wù)器,用來給用戶更高效地發(fā)送內(nèi)容。典型地,選擇用來發(fā)送內(nèi)容的服務(wù)器是基于網(wǎng)絡(luò)距離的衡量標(biāo)準(zhǔn)的。例如:選跳數(shù)(hop)最少的或者響應(yīng)時間最快的服務(wù)器。

35.添上Expires或者Cache-Control HTTP頭

這條規(guī)則有兩個方面:

  1. 對于靜態(tài)組件:通過設(shè)置一個遙遠(yuǎn)的將來時間作為Expires來實(shí)現(xiàn)永不失效
  2. 多余動態(tài)組件:用合適的Cache-ControlHTTP頭來讓瀏覽器進(jìn)行條件性的請求

網(wǎng)頁設(shè)計(jì)越來越豐富,這意味著頁面里有更多的腳本,圖片和Flash。站點(diǎn)的新訪客可能還是不得不提交幾個HTTP請求,但通過使用有效期能讓組件變得可緩存,這避免了在接下來的瀏覽過程中不必要的HTTP請求。有效期HTTP頭通常被用在圖片上,但它們應(yīng)該用在所有組件上,包括腳本、樣式和Flash組件。

瀏覽器(和代理)用緩存來減少HTTP請求的數(shù)目和大小,讓頁面能夠更快加載。web服務(wù)器通過有效期HTTP響應(yīng)頭來告訴客戶端,頁面的各個組件應(yīng)該被緩存多久。用一個遙遠(yuǎn)的將來時間做有效期,告訴瀏覽器這個響應(yīng)在2010年4月15日前不會改變。

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

如果你用的是Apache服務(wù)器,用ExpiresDefault指令來設(shè)置相對于當(dāng)前日期的有效期。下面的例子設(shè)置了從請求時間起10年的有效期:

ExpiresDefault "access plus 10 years"

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持VeVb武林網(wǎng)。

 

注:相關(guān)教程知識閱讀請移步到HTML教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
www.狠狠干| 在线看av的网址| 国产综合精品在线| 日韩精品一区二区三区视频播放| 国产欧美综合视频| 欧美日韩中文字幕视频| 亚洲一区精品在线| 日韩免费视频一区| 中文字幕欧美在线| 欧美午夜精品在线| 国产不卡视频在线| 国产 日韩 欧美 综合| 欧美中文字幕第一页| 欧美高清一级片在线| 国产乱国产乱300精品| 亚洲精品欧美二区三区中文字幕| 亚洲va韩国va欧美va精品| 日韩精品首页| 日韩免费电影网站| 国产欧美中文在线| 日韩精品 欧美| 国产福利第一页| 欧美日韩亚洲视频| 国产在线导航| 在线观看免费国产小视频| 久久婷婷国产| 日本精品国语自产拍在线观看| 欧美日韩综合不卡| 亚洲福利一区| 日韩精品综合在线| 亚洲一区日韩在线| 国产成人精品av久久| av一区在线观看| 一区二区91| 欧美国产一级片| 在线日韩精品视频| 欧美日韩在线国产| 中文字幕最新精品| 亚洲综合在线不卡| 91精品啪在线观看国产60岁| 婷婷精品进入| 欧美亚洲免费高清在线观看| 91久久中文| 高清中文字幕在线| 美日韩精品免费视频| 国产欧美三级| 蜜桃精品在线| 丰满少妇一区| 亚洲一区中文字幕在线观看| 精品久久久精品| 欧美日韩国产不卡在线看| 精品久久久久久综合日本欧美| 日韩国产成人精品| 国产91久久久久蜜臀青青天草二| 国产蜜臀在线| 中文 欧美 日韩| 日韩中文字幕在线视频观看| 日韩久久精品成人| 一级网站免费观看| 天天摸日日摸狠狠添| 91精品啪在线观看国产60岁 | 91精品高清| 久精品在线观看| 91精选在线| 国产劲爆久久| 日韩在线二区| 免费在线亚洲| 国产久卡久卡久卡久卡视频精品| 日韩免费视频一区| 欧美日韩精品欧美日韩精品| 在线不卡日本| 欧洲精品二区| 久久精品女人| 久久精品国产2020观看福利| 美女免费视频一区| 国产欧美久久久精品免费| 中文字幕在线导航| 午夜亚洲一区| 日韩三级视频在线播放| 在线视频观看日韩| 精品视频在线视频| 欧美成人精品在线| 欧美日韩免费精品| 欧美日韩国产影片| 午夜精品一区二区三区免费视频| 欧美日韩成人综合| 日韩精品不卡一区二区| 中文字幕久久精品| 亚洲 欧美 精品| 麻豆一区二区99久久久久| 欧美日韩在线综合| 日韩免费不卡avV| 亚洲深夜福利| 国产123在线| 高清国产一区| 九九视频精品免费| 91精品国产调教在线观看| 国产在线黄色片| 久久久99免费| 日韩中文首页| 中文字幕亚洲免费| 国产 欧美 日韩 在线| 日韩欧美一级在线播放| 日本xxxwww免费视频| 欧美中文字幕视频| 91精品网站| 欧美日韩中文在线| 久久麻豆视频| 欧美久久在线| 91精品国产色综合久久不卡蜜臀 | 91精品视频免费在线观看| 日韩精品免费观看视频 | 一区二区日韩免费看| 91久久久久久久久| 午夜伊人狠狠久久| 亚洲高清视频在线| 国产欧美日韩精品在线| 中文字幕欧美在线| 精品视频999| 欧美日韩亚洲系列| av手机天堂| 日韩精品在线私人| 亚洲第一页中文字幕| 99pao成人国产永久免费视频| 国产69精品久久久久孕妇国产69久久| 欧洲精品在线一区| 亚洲欧洲精品在线| 韩国v欧美v日本v亚洲| 亚洲综合在线视频| 国产伦精品免费视频| 人人做人人澡人人爽欧美| 国产小视频在线观看免费| 日韩欧美中文视频| 日韩亚洲欧美中文高清在线| 午夜黄色小视频| 91麻豆视频网站| 日韩视频第二页| 亚洲综合在线不卡| 久久久99精品久久| 久久精品蜜桃| 91日韩欧美| 日韩欧美高清在线视频| 亚洲欧洲日韩在线| 日韩国产亚洲欧美| 日韩欧美一二三| 日韩欧美不卡视频| 一区二区三区免费看视频 | 一区二区在线视频播放| 日韩精品视频在线| 中文字幕在线观看欧美| 日韩国产一区三区| 在线视频日韩欧美| 欧美日韩在线观看首页| 尤物av一区二区| 91精品国产调教在线观看| 亚洲国产91精品在线观看| 日韩欧美亚洲国产| 欧美日韩精品综合| 中文字幕在线视频日韩| 欧美日韩一二| 免费高清特黄a大片| 日韩亚洲不卡在线| 最新日韩中文字幕| 久久av免费| av三级在线播放| 日韩不卡在线播放| 日韩中文字幕视频在线观看| 日韩欧美三级| 国内精品不卡| 天天综合天天综合| 精品欧美日韩| 欧洲精品久久久| 久久精品夜夜夜夜久久| 国产欧美久久久精品免费| 国产一区在线精品| 日韩精品在线网站| 中文字幕国产亚洲| 久久精品99国产国产精| 久久视频免费看| 天堂在线视频中文网| 国产欧美日韩在线| 日韩精品在线观| 亚洲国产无线乱码在线观看 | 精品久久久久久综合日本欧美| 国产手机精品视频| 美日韩精品免费视频| 欧美日韩国产第一页| 精品日韩在线播放| 亚洲乱码在线观看| 香蕉视频亚洲一级| 日韩欧美在线字幕| 91精品在线国产| av免费在线不卡| 欧美日韩在线不卡一区| 久久99精品久久久久子伦| 91精品综合久久| 粉嫩喷白浆久久| 欧美国产小视频| 欧美日韩在线三级| 国产亚洲欧美中文| 精品人妻一区二区三区视频| 国产永久在线观看| 欧美日韩在线三级| 久久99久久久久久久噜噜| 欧美中文字幕精品| 国产三级做爰在线观看| 日韩欧美在线网址| 国产不卡的av| 欧美日韩国产亚洲一区| 中文亚洲免费| 国产绿帽一区二区三区| 中文字幕在线高清| 91精品视频播放| 久久夜色精品国产欧美乱极品| 亚洲免费观看在线观看| 国产一二三精品| www.中文字幕在线观看| 999精品色在线播放| 欧美日韩精品欧美日韩精品 | 91久久视频| 国内不卡的二区三区中文字幕| 在线视频不卡一区二区| 日韩国产专区| 中文字幕在线观看网址| 日韩视频国产视频| 精品日韩在线播放| 精品一二三四区| 深夜福利亚洲| 欧美日韩在线精品一区二区三区激情综| 99综合视频| 欧美日韩在线视频免费观看| 日韩欧美国产网站| 国产成人日日夜夜| 在线精品视频免费播放| 免费视频久久| 日韩中文字幕91| 香蕉av一区| 韩日中文字幕第一页| 欧美日韩国产999| 久久riav| 免费视频中文字幕| 亚洲男人在线| 久久精品网站免费观看| 久久综合久久综合九色| 亚洲高清中文字幕| 91精品国产综合久久精品app | 日韩av不卡在线观看| 欧美一级在线观看| 国产欧美日韩亚洲| 国产视频一区三区| 国产乱码在线观看| av高清一区| 色综合婷婷久久| 日韩中文字幕观看| 久久蜜桃精品| 91精品在线免费| 久久精品日韩欧美| 91一区二区| 欧美在线中文字幕| 日韩欧美在线看| 国产日韩综合| www.xxxx精品| 欧美日韩国产在线播放| 国产三级中文字幕| 白嫩少妇丰满一区二区| 国产一卡2卡3卡四卡网站| 中文字幕在线国产| 日韩av综合在线观看| 亚洲视频电影在线| 蜜桃视频一日韩欧美专区| 中文字幕在线高清| 久久久99久久精品欧美| 丰满少妇一区| 国产永久在线观看| 免费视频二区| 一区三区视频| xxxcom在线观看| 日韩精品乱码av一区二区| 被陌生人带去卫生间啪到腿软| 国产九九在线| 久久在线91| 国产午夜精品久久| 日韩欧美在线网址| 欧美三级日韩三级| 五月综合激情日本mⅴ| 亚洲三级网站| 日韩欧美中文字幕在线视频| 久草亚洲一区| 在线日韩中文字幕| 欧美日韩一二| 日韩精品视频在线观看视频| 亚州黄色一级| 午夜国产视频 | 亚洲经典中文字幕| 国产激情在线观看| 国产一级片网站| 亚洲高清中文字幕| 久久精品国产91精品亚洲| 黄色国产在线| 一区二区精品区| 精品日韩在线观看| 亚洲视频 中文字幕| 91欧美日韩麻豆精品| 亚亚洲欧洲精品| 在线视频不卡国产V| 中文字幕日韩国产| 国产福利免费观看| aaa免费看大片| 中文字幕在线视频日韩| 午夜福利一区二区三区| 亚洲国产无线乱码在线观看 | 在线免费视频一区二区| 国产在线视频一区二区| 成年人看的羞羞网站| 久久人人精品| 一本久久a久久精品亚洲| 久久久精品网| 亚洲一二三不卡| 香蕉视频亚洲一级| 久久综合久久综合九色| 精品日韩av| av中文在线资源| 午夜国产在线视频| 国产欧美综合在线观看第十页 | 91精品国产免费| 中文字幕欧美日韩在线| 在线日韩中文字幕| 欧美国产91| 中文字幕在线欧美| 中文字幕伊人| 国产日韩电影| 久久婷婷综合国产| 国产三级第一页| 99精品999| 日韩一级中文字幕| 一区二区三区在线播放欧美| 日韩精品一级| 精品在线一区二区三区| 日韩欧美国产网站| 在线视频亚洲| 亚洲第一精品在线| 欧美亚洲免费高清在线观看| 欧美日韩在线视频免费观看 | 91xxx在线观看| 日韩视频国产视频| 日韩字幕在线观看| 在线视频一区二区三区在线播放| 精品国产31久久久久久| 日韩一级视频在线观看| 亚洲一区在线观看免费| 日韩欧美亚洲国产一区| 免费高清在线一区| 成人一区二区不卡免费| 日韩精品在线免费看| 国产欧美日韩最新| 一级一片免费视频| 国产欧美日韩不卡| 中文精品电影| 精品国产免费观看一区| 日韩免费视频一区二区| 91精品国产高清久久久久久| 国产免费电影网站入口| 在线免费播放av| 精品日韩欧美在线| 欧美三级一区二区三区| 日韩国产欧美三级| 欧美日韩亚洲一区| 国产免费不卡av| 在线观看区一区二| 中文字幕成人乱码在线电影| 日本中文字幕在线观看| 99中文字幕一区| 日韩视频精品| 久久久精品日韩欧美| 免费看ww视频网站入口| 日韩欧美国产免费播放| 日本精品福利视频| 精品乱人伦一区二区三区| 二区中文字幕| 精品综合久久久久| 欧美日韩国产成人| 日本啊v在线| 韩日中文字幕第一页| 91麻豆免费视频网站| 亚洲免费精品视频| 久久久久久欧美| 国产精久久久久| 91精品婷婷国产综合久久| 久久精品卡一| 色欧美日韩亚洲| 欧美午夜影院在线视频| 国产欧美日韩亚州综合| 久久精品网站免费观看| 婷婷久久综合九色国产成人| 国产丝袜一区二区| 国产欧美日韩在线| 日韩中文字幕二区| 成人一区二区不卡免费| 日韩在线a电影| 中文字幕亚洲一区在线观看|