已閱讀5頁,還剩2頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
Web 應(yīng)用性能優(yōu)化黃金法則:先優(yōu)化前端程序 (front-end)的性能,因?yàn)檫@是 80%或以上的最終用戶響應(yīng)時間的花費(fèi)所在。 法則 1. 減少 HTTP 請求次數(shù) 80%的最終用戶響應(yīng)時間花在前端程序上,而其大部分時間則花在各種頁面元素,如圖像、樣式表、腳本和 Flash 等,的下載上。減少頁面元素將會減少 HTTP 請求次數(shù)。這是快速顯示頁面的關(guān)鍵所在。 一種減少頁面元素個數(shù)的方法是簡化頁面設(shè)計。但是否存在其他方式,能做到既有豐富內(nèi)容,又能獲得快速響應(yīng)時間呢?以下是這樣一些技術(shù): Image maps 組合多個圖片到一張圖片中??偽募笮∽兓淮?,但減少了 HTTP請求次數(shù)從而加快了頁面顯示速度。該方式只適合圖片連續(xù)的情況;同時坐標(biāo)的定義是煩人又容易出錯的工作。 CSS Sprites 是更好的方法。它可以組合頁面中的圖片到單個文件中,并使用 CSS的 background-image 和 background-position 屬性來現(xiàn)實(shí)所需的部分圖片。 Inline images 使用 data: URL scheme 來在頁面中內(nèi)嵌圖片。這將增大 HTML 文件的大小。組合 inline images 到你的(緩存)樣式表是既能較少 HTTP 請求,又能避免加大 HTML 文件大小的方法。 Combined files 通過組合多個腳本文件到單一文件來減少 HTTP 請求次數(shù)。樣式表也可采用類似方法處理。這個方法雖然簡單,但沒有得到大規(guī)模的使用。 10大美國網(wǎng)站每頁平均有 7 個腳本文件和 2 個樣式表。當(dāng)頁面之間腳本和樣式表變化很大時,該方式將遇到很大的挑戰(zhàn),但如果做到的話,將能加快響應(yīng)時間。 減少 HTTP 請求次數(shù)是性能優(yōu)化的起 點(diǎn)。這最提高首次訪問的效率起到很重要的作用。據(jù) Tenni Theurer 的文章 Browser Cache Usage - Exposed!描述, 40-60%的日常訪問是首次訪問,因此為首次訪問者加快頁面訪問速度是用 戶體驗(yàn)的關(guān)鍵。 法則 2. 使用 CDN(Content Delivery Network, 內(nèi)容分發(fā)網(wǎng)絡(luò) ) 用戶離 web server 的遠(yuǎn)近對響應(yīng)時間也有很大影響。從用戶角度看,把內(nèi)容部署到多個地理位置分散的服務(wù)器上將有效提高頁面裝載速度。但是該從哪里開始呢? 作為實(shí)現(xiàn)內(nèi)容地理分布的第一步,不要試圖重構(gòu) web 應(yīng)用以適應(yīng)分布架構(gòu)。改變架構(gòu)將導(dǎo)致多個周期性任務(wù),如同步 session 狀態(tài),在多個 server 之間復(fù)制數(shù)據(jù)庫交易。這樣縮短用戶與內(nèi)容距離的嘗試可能被應(yīng)用架構(gòu)改版所延遲,或阻止。 我們還記得 80-90%的最 終用戶響應(yīng)時間花在下載頁面中的各種元素上,如圖像文件、樣式表、腳本和 Flash 等。與其花在重構(gòu)系統(tǒng)這個困難的任務(wù)上,還不如先分布靜態(tài)內(nèi)容。這不僅能大大減少響應(yīng)時間,而且由于 CDN 的存在,分布靜態(tài)內(nèi)容非常容易實(shí)現(xiàn)。 CDN 是地理上分布的 web server 的集合,用于更高效地發(fā)布內(nèi)容。通?;诰W(wǎng)絡(luò)遠(yuǎn)近來選擇給具體用戶服務(wù)的 web server。 一些大型網(wǎng)站擁有自己的 CDN,但是使用如 Akamai Technologies, Mirror Image Internet, 或 Limelight Networks 等 CDN 服務(wù)提供商的服務(wù)將是劃算的。在Yahoo!把靜態(tài)內(nèi)容分布到 CDN 減少了用戶影響時間 20%或更多。切換到 CDN 的代碼修改工作是很容易的,但能達(dá)到提高網(wǎng)站的速度。 法則 3. 增加 Expires Header 網(wǎng)頁內(nèi)容正變得越來越豐富,這意味著更多的腳本文件、樣式表、圖像文件和Flash。首次訪問者將不得不面臨多次 HTTP 請求,但通過使用 Expires header,您可以在客戶端緩存這些元素。這在后續(xù)訪問中避免了不必要的 HTTP 請求。Expires header 最常用于圖像文件,但是它也應(yīng)該用于腳本文件、樣式表和Flash。 瀏覽器(和代理) 使用緩存來減少 HTTP 請求的次數(shù)和大小,使得網(wǎng)頁加速裝載。Web server 通過 Expires header 告訴客戶端一個元素可以緩存的時間長度。 如果服務(wù)器是 Apache 的話,您可以使用 ExpiresDefault 基于當(dāng)期日期來設(shè)置過期日期,如: ExpiresDefault “access plus 10 years” 設(shè)置過期時間為從請求時間開始計算的 10 年。 請記住,如果使用超長的過期時間,則當(dāng)內(nèi)容改變時,您必須修改文件名稱。在Yahoo!我們經(jīng)常把改名作為 release 的一個步驟:版本號內(nèi)嵌在 文件名中,如yahoo_2.0.6.js。 法則 4. 壓縮頁面元素 通過壓縮 HTTP 響應(yīng)內(nèi)容可減少頁面響應(yīng)時間。從 HTTP/1.1 開始, web 客戶端在HTTP 請求中通過 Accept-Encoding 頭來表明支持的壓縮類型,如: Accept-Encoding: gzip, deflate. 如果 Web server 檢查到 Accept-Encoding 頭,它會使用客戶端支持的方法來壓縮 HTTP 響應(yīng),會設(shè)置 Content-Encoding 頭,如: Content-Encoding: gzip。 Gzip 是目前最流 行及有效的壓縮方法。其他的方式如 deflate,但它效果較差,也不夠流行。通過 Gzip,內(nèi)容一般可減少 70%。如果是 Apache,在 1.3 版本下需使用 mod_gzip 模塊,而在 2.x 版本下,則需使用 mod_deflate。 Web server 根據(jù)文件類型來決定是否壓縮。大部分網(wǎng)站對 HTML 文件進(jìn)行壓縮。但對腳本文件和樣式表進(jìn)行壓縮也是值得的。實(shí)際上,對包括 XML 和 JSON 在內(nèi)的任務(wù)文本信息進(jìn)行壓縮都是值得的。圖像文件和 PDF 文件不應(yīng)該被壓縮,因?yàn)樗鼈儽緛砭褪菈嚎s格式保存的。對它們進(jìn)行壓縮,不但浪費(fèi) CPU,而且還可能增加文件的大小。 因此,對盡量多的 文件類型進(jìn)行壓縮是一種減少頁面大小和提高用戶體驗(yàn)的簡便方法。 法則 5. 把樣式表放在頭上 我們發(fā)現(xiàn)把樣式表移到 HEAD 部分可以提高界面加載速度,因此這使得頁面元素可以順序顯示。 在很多瀏覽器下,如 IE,把樣式表放在 document 的底部的問題在于它禁止了網(wǎng)頁內(nèi)容的順序顯示。瀏覽器阻止顯示以免重畫頁面元素,那用戶只能看到空白頁了。 Firefox 不會阻止顯示,但這意味著當(dāng)樣式表下載后,有些頁面元素可能需要重畫,這導(dǎo)致閃爍問題。 HTML 規(guī)范 明確要求樣式表被定義在 HEAD 中,因此,為避免空白屏幕或閃爍問題,最好的辦法是遵循 HTML 規(guī)范,把樣式表放在 HEAD 中。 法則 6. 把腳本文件放在底部 與樣式文件一樣,我們需要注意腳本文件的位置。我們需盡量把它們放在頁面的底部,這樣一方面能順序顯示,另方面可達(dá)到最大的并行下載。 瀏覽器會阻塞顯示直到樣式表下載完畢,因此我們 需要把樣式表放在 HEAD 部分。而對于腳本來說,腳本后面內(nèi)容的順序顯示將被阻塞,因此把腳本盡量放在底部意味著更多內(nèi)容能被快速顯示。 腳本引起的第二個問題是它阻塞并行下載數(shù)量。 HTTP/1.1 規(guī)范 建議瀏覽器每個主機(jī)的并行下載數(shù)不超過 2 個。因此如果您把圖像文件分布到多臺機(jī)器的話,您可以達(dá)到超過 2 個的并行下載。但是當(dāng)腳本文件下載時,瀏覽器不會啟動其他的并行下載,甚至其他主機(jī)的下載也不啟動。 在某些情況下,不是很容易就能把腳本移到底部的。如,腳本使用document.write 方法來插入頁面內(nèi)容。同時可能還存在域的問題。不過在很多情況下,還是有一些方法的。 一個備選方法是使用延遲腳本( deferred script)。 DEFER 屬性表明腳本未包含 document.write,指示瀏覽器刻繼續(xù)顯示。不幸的是 , Firefox 不支持 DEFER屬性。在 IE 中,腳本可能被延遲執(zhí)行,但不一定得到需要的長時間延遲。不過從另外角度來說,如果腳本能被延遲執(zhí)行,那它就可以被放在底部了。 法則 7. 避免 CSS表達(dá)式 CSS 表達(dá)式是功能強(qiáng)大的 (同時也是危險的 )用于動態(tài)設(shè)置 CSS 屬性的方式。 IE,從版本 5 開始支持 CSS 表達(dá)式,如 backgourd-color: expression(new Date().getHours()%2?”#B8D4FF”:”#F08A00”) ,即背景色每個小時切換一次。 CSS 表達(dá)式的問題是其執(zhí)行次數(shù) 超過大部分人的期望。不僅頁面顯示和 resize時計算表達(dá)式,而且當(dāng)頁面滾屏,甚至當(dāng)鼠標(biāo)在頁面上移動時都會重新計算表達(dá)式。 一種減少 CSS 表達(dá)式執(zhí)行次數(shù)的方法是一次性表達(dá)式,即當(dāng)?shù)谝淮螆?zhí)行時就以明確的數(shù)值代替表達(dá)式。如果必須動態(tài)設(shè)置的話,可使用事件處理函數(shù)代替。如果您必須使用 CSS 表達(dá)式的話,請記住它們可能被執(zhí)行上千次,從而影響頁面性能。 法則 8. 把 JavaScript 和 CSS 放到外部文件中 上述很多性能優(yōu)化法則都基于外部文件進(jìn)行優(yōu)化。現(xiàn)在,我們必須問一個問題:JavaScript 和 CSS 應(yīng)該包括在外部文件 ,還是在頁面文件中? 在現(xiàn)實(shí)世界中,使用外部文件會加快頁面顯示速度,因?yàn)橥獠课募粸g覽器緩存。如果內(nèi)置 JavaScript 和 CSS 在頁面中雖然會減少 HTTP 請求次數(shù),但增大了頁面的大小。另外一方面,使用外部文件,會被瀏覽器緩存,則頁面大小會減小,同時又不增加 HTTP 請求次數(shù)。 因此,一般來說,外部文件是更可行的方式。唯一的例外是內(nèi)嵌方式對主頁更有效,如 Yahoo!和 My Yahoo!都使用內(nèi)嵌方式。一般來說,在一個 session 中,主頁訪問此時較少,因此內(nèi)嵌方式可以取得更快的用戶響應(yīng)時間。 法則 9. 減少 DNS查詢次數(shù) DNS 用于映射主機(jī)名和 IP 地址,一般一次解析需要 20 120 毫秒。為達(dá)到更高的性能, DNS 解析通常被多級別地緩存,如由 ISP 或局域網(wǎng)維護(hù)的 caching server,本地機(jī)器操作系統(tǒng)的緩存(如 windows 上的 DNS Client Service),瀏覽器。 IE 的缺省 DNS 緩存時間為 30 分鐘, Firefox 的缺省緩沖時間是 1 分鐘。 減少主機(jī)名可減少 DNS 查詢的次數(shù),但可能造成并行下載數(shù)的減少。避免 DNS查詢可減少響應(yīng)時間,而減少并行下載數(shù)可能增加響應(yīng)時間。一個可行的折中是把內(nèi)容分布到至少 2 個,最多 4 個不同的主機(jī)名上。 法則 10. 最小化 JavaScript 代碼 最小化 JavaScript 代碼指在 JS 代碼中刪除不必要的字符,從而降低下載時間。兩個流行的工具是 JSMin 和 YUI Compressor。 混淆是最小化于源碼的備選方式。象最小化一樣,它通過刪除注釋和空格來減少源碼大小,同時它還可以對代碼進(jìn)行混淆處理。作為混淆的一部分,函數(shù)名和變量名 被替換成短的字符串,這使得代碼更緊湊,同時也更難讀,使得難于被反向工程。 Dojo Compressor (ShrinkSafe)是最常見的混淆工具。 最小化是安全的、直白的過程,而混淆則更復(fù)雜,而且容易產(chǎn)生問題。從對美國10 大網(wǎng)站的調(diào)查來看,通過最小化,文件可減少 21%,而混淆則可減少 25%。 除了最小化外部腳本 文件外,內(nèi)嵌的腳本代碼也應(yīng)該被最小化。即使腳本根據(jù)法則 4 被壓縮后傳輸,最小化腳本刻減少文件大小 5%或更高。 法則 11. 避免重定向 重定向功能是通過 301 和 302 這兩個 HTTP 狀態(tài)碼完成的,如: HTTP/1.1 301 Moved Permanently Location: /newuri Content-Type: text/html 瀏覽器自動重定向請求到 Location 指定的 URL 上,重定向的主要問題是降低了用戶體驗(yàn)。 一種最耗 費(fèi)資源、經(jīng)常發(fā)生而很容易被忽視的重定向是 URL 的最后缺少 /,如訪問 /astrology 將被重定向到/astrology/。在 Apache 下,可以通過 Alias,mod_rewrite 或 DirectorySlash 等方式來解決該問題。 法則 12. 刪除重復(fù)的腳本文件 在一個頁面中包含重復(fù)的 JS 腳本文件會影響性能,即它會建立不必要的 HTTP請求和額外的 JS 執(zhí)行。 不必要的 HTTP 請求發(fā)生在 IE 下,而 Firefox 不會產(chǎn)生多余的 HTTP 請求。額外的 JS 執(zhí)行,不管在 IE 下,還是在 Firefox 下,都會發(fā)生。 一個避免重復(fù)的腳本文件的方式是 使用模板系統(tǒng)來建立腳本管理模塊。除了防止重復(fù)的腳本文件外,該模塊還可以實(shí)現(xiàn)依賴性檢查和增加版本號到腳本文件名中,從而實(shí)現(xiàn)超長的過期時間。 法則 13. 配置 ETags ETags 是用于確定瀏覽器緩存中元素是否與 Web server 中的元素相匹配的機(jī)制,它是比 last-modified date 更靈活的元素驗(yàn)證機(jī)制。 ETag 是用于唯一表示元素版本的字符串,它需被包括在引號中。 Web server 首先在 response 中指定 ETag: HTTP/1.1 200 OK 10c24bc-4ab-457e1c1f Content-Length: 12195 后來,如果瀏覽器需要驗(yàn)證某元素,它使用 If-None-Match 頭回傳 ETag 給 Web server,如果 ETag 匹配,則服務(wù)器返回 304 代
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年武漢船舶職業(yè)技術(shù)學(xué)院馬克思主義基本原理概論期末考試筆試題庫
- 2025年二級建造師法規(guī)專項測試卷含答案
- 康復(fù)兒童家長培訓(xùn)課件
- 應(yīng)知應(yīng)會安全培訓(xùn)題課件
- 企業(yè)常年法律顧問服務(wù)協(xié)議
- 母嬰社群運(yùn)營服務(wù)方案
- 應(yīng)急預(yù)案救援培訓(xùn)課件
- 城市公園亮化工程方案
- 產(chǎn)品組合營銷合同協(xié)議
- 租房協(xié)議合同范本模板
- 小紅書2025年9-10月保險行業(yè)雙月報
- 2025至2030中國電腦繡花機(jī)行業(yè)深度研究及發(fā)展前景投資評估分析
- 高二電磁學(xué)考試題及答案
- 養(yǎng)老托管合同協(xié)議
- 安徽省蕪湖市2024-2025學(xué)年度第一學(xué)期期末考試八年級數(shù)學(xué)試卷
- 2025成都易付安科技有限公司第一批次招聘15人參考考試試題及答案解析
- 云南民族大學(xué)附屬高級中學(xué)2026屆高三聯(lián)考卷(四)英語+答案
- 2025年翔安區(qū)社區(qū)專職工作者招聘備考題庫及一套參考答案詳解
- 2025年融資融券業(yè)務(wù)模擬考試題庫及答案
- 湖南省長郡二十校聯(lián)盟2025-2026學(xué)年高三上學(xué)期12月考試數(shù)學(xué)試卷
- 教育培訓(xùn)機(jī)構(gòu)招生方案設(shè)計與落地執(zhí)行
評論
0/150
提交評論