




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、網(wǎng)站性能直接影響訪問速度,從而影響訪問量。實(shí)現(xiàn)高性能Web應(yīng)用的重要性是不言而喻的。性能瓶頸主要體現(xiàn)在高延時(shí)、擁塞和服務(wù)器負(fù)載,專業(yè)的 解決方法往往成本較高。做好緩存的設(shè)計(jì)則可以在控制成本的情況下充分的 提高性能。過去幾年中,Web應(yīng)用程序已經(jīng)從簡單的HTML頁面堆積演變成使用各種 各樣的技術(shù)構(gòu)建高可擴(kuò)展性和交互式的富應(yīng)用程序。設(shè)計(jì)和開發(fā)這類應(yīng)用程 序變得越來越復(fù)雜,此外,決策者正越來越多地尋求構(gòu)建更豐富的互動功能 到這些應(yīng)用程序中,同時(shí)還要保證可維護(hù)性和高性能,但高性能意味著高成 本。為了構(gòu)建提供給最終用戶體驗(yàn)的是一個牢固的應(yīng)用程序,開發(fā)人員需要 解決潛在的性能瓶頸。本文側(cè)重于緩存一一它是交
2、付高性能 Web應(yīng)用程序急需的一一也簡要介 紹一下壓縮功能。有一些公司在生產(chǎn)和銷售專門的壓縮和性能產(chǎn)品。本文旨 在簡單介紹在尋求專業(yè)產(chǎn)品解決性能問題之前開發(fā)人員可以在客戶端和服 務(wù)器端對Web應(yīng)用程序做的一些性能改進(jìn)。性能瓶頸性能瓶頸主要體現(xiàn)在高延時(shí)、擁塞和服務(wù)器負(fù)載。緩存不能完全解決掉 這三個問題,但經(jīng)過詳細(xì)的設(shè)計(jì)考慮,緩存是可以提高性能的。在服務(wù)器端和客戶端都緩存內(nèi)容,據(jù)調(diào)查,平均而言,下載HTML只需要總的用戶響應(yīng)時(shí)間的10-20%,剩下的80-90%全部用于下載頁面中的其它組成內(nèi)容,這些 組成內(nèi)容通常包括圖像,如公司logo,緩存logo可以有效避免到服務(wù)器的 多次往返。在前日51CT
3、O上發(fā)布的加速,加速,再加速:來自 Google的網(wǎng)站加速技巧大全中,Google提到的提升網(wǎng)站速度和性能的低成本技巧中就包 括緩存這一條。至于架構(gòu)設(shè)計(jì)方面,則可參考 51CTC的視頻專題:大型網(wǎng)站 架構(gòu)專家談。簡單地講,緩存是臨時(shí)存儲。它將數(shù)據(jù)復(fù)制到不同的計(jì)算機(jī)或不同于原 始數(shù)據(jù)源的位置,有了正確的配置,訪問緩存數(shù)據(jù)的速度比訪問原始數(shù)據(jù)的 速度要快得多,使用緩存數(shù)據(jù)可以減小服務(wù)器負(fù)載和帶寬消耗,從最終用戶 的角度來看就是性能提高了。圖1顯示了 In ternet如何工作的快速總攬,以及緩存在哪里發(fā)生作用。n:聊磋 tir I * *4 not n acne ardraaues pa辭 sav
4、e*peering,dpeeringI itemei Hub MS1wHub3f 也e fro m rve r ga BQ the lame petn圖 1 In ternet緩存正如你在圖1上的緩存:這個圖顯示了常見的請求和檢索緩存信息的時(shí)機(jī)中所看到的,在服務(wù)器和客戶端上緩存數(shù)據(jù)既是可能的也 是有效的,圖2顯示了這三個緩存位置的不同視圖圖2緩存配置:此圖顯示了三個典型的緩存位置1客戶端瀏覽器緩存:瀏覽器緩存 Web對象后,可以對重復(fù)的請求直接 響應(yīng),不用再從In ternet請求數(shù)據(jù)了。2、服務(wù)器端轉(zhuǎn)發(fā)代理緩存:雖然可能有些變化,但這些緩存位置通常是 在最終用戶防火墻里面,可以對請求直接響應(yīng)
5、,不需要從原始來源請求數(shù)據(jù)。3、服務(wù)器端反向代理緩存:也被稱為網(wǎng)關(guān)或代理緩存,這些緩存服務(wù)器的操作代表了客戶的來源服務(wù)器,術(shù)語“內(nèi)容分發(fā)網(wǎng)絡(luò)(CDN ”就是這些反向代理緩存的集合。你可以緩存任何可能不止一次被請求的對象,但總有一個危險(xiǎn)就是緩存 的對象很可能變得陳舊,也就是說,沒有準(zhǔn)確地反應(yīng)原始數(shù)據(jù)。不過可以使 用兩個參數(shù)來控制所有可緩存的對象:freshness和validation 。freshness 和validation都可以使用HTTP請求和相應(yīng)組合來進(jìn)行確定。 Freshness確定某個對象是否可以從緩存中獲得,使用expires和cache-c on trol:max-age 頭
6、進(jìn)行控制。 Validation 確定某個對象是否已經(jīng)陳舊,使用last-modified 和if-modified-s ince頭進(jìn)行控制。設(shè)計(jì)高度緩存的Web應(yīng)用程序企業(yè)級Web應(yīng)用程序既有靜態(tài)部分又有動態(tài)部分,只要進(jìn)行了正確的設(shè) 計(jì)和架構(gòu),都能夠?qū)崿F(xiàn)靜態(tài)部分從緩存中獲取,動態(tài)部分從原始服務(wù)器獲取, 但第一步是確定要緩存什么,圖3提供了一個指南,可以幫助你確定哪些對 象是可緩存,哪些對象是動態(tài)的(不可緩存的)。圖 3 確定緩存能力:此圖提供了某個對象是否應(yīng)該緩存的指南應(yīng)用程序架構(gòu)在可緩存對象和不可緩存對象之間有一點(diǎn)差異,開發(fā)人員 應(yīng)該尋求最大限度的緩存命中率,同時(shí)要避免緩存動態(tài)對象。下面是
7、一些最 佳實(shí)踐:1、使用緩存控制( cache-control:max-age )和有效期( Expires )頭2、使用最后修改時(shí)間( last-modified )頭3、檢查 Web服務(wù)器是否支持If-Modified-Sinee4、 調(diào)查為小型站點(diǎn)使用轉(zhuǎn)向代理的可行性,或?yàn)榇笮推髽I(yè)網(wǎng)站從CDN廠 家獲得專業(yè)人員的幫助5、根據(jù)網(wǎng)站的可擴(kuò)展性思考是使用數(shù)據(jù)中心還是托管6、自己動手編碼常常需要大量的時(shí)間和精力,根據(jù)站點(diǎn)的規(guī)模,可以考 慮采用開源緩存方法,如使用 Squid 作為代理服務(wù)器7、為文件下載明確使用混合緩存機(jī)制8、確保那些無用戶 / 輸入依賴的動態(tài)事務(wù)可以獲得緩存,為不同對象創(chuàng) 建緩
8、存映像可以幫助將可緩存對象和不可緩存對象隔離開來9、小心完全忽略緩存頭的內(nèi)容管理系統(tǒng)( CMS)為緩存使用頭 (Header)本節(jié)覆蓋了為緩存目的最有用的頭??刂凭彺嬖贖TTP1.1規(guī)范中,服務(wù)器應(yīng)該為緩存控制頭發(fā)送一個無緩存響應(yīng),以 指出內(nèi)容不應(yīng)該被緩存,客戶端和服務(wù)器端都應(yīng)該遵守這個頭信息,以防止 頭中已經(jīng)聲明了的動態(tài)內(nèi)容,大多數(shù)開發(fā)語言都支持使用這個頭信息控制響 應(yīng)頭值。另一方面,你可以為cache-control頭返回一個public服務(wù)器端應(yīng)答來 允許緩存(即使沒有cache-control頭也可以指出對象是可以緩存的), cache-control頭的值為private是一個特殊情
9、況,表示瀏覽器可能會在本 地緩存對象,但代理服務(wù)器不會緩存它。圖4中的請求響應(yīng)工作流顯示了 Google如何通過cache-control頭通知代理服務(wù)器不要緩存的。圖4停止代理服務(wù)器緩存:請求-應(yīng)答流顯示服務(wù)器返回private阻止代理服務(wù)器緩存最后,服務(wù)器使用expires應(yīng)答時(shí)包括了一個表示有效期的日期/時(shí)間戳,直到有效期滿之前瀏覽器都可以緩存中的對象。如圖5所示。圖5過期內(nèi)容:Google的Gmail服務(wù)器返回一個expires頭,包括緩存頁面的過期日期和時(shí)間這一點(diǎn)你可以驗(yàn)證,Gmail允許瀏覽器緩存Gmail主頁,直到expires 頭中明確指定的時(shí)間到了為止。使用 Last-Mod
10、ified 頭瀏覽器使用這個頭信息來確定緩存對象生存期的有效性,瀏覽器請求這 個對象時(shí),服務(wù)器使用一個包含該對象最后修改時(shí)間的時(shí)間戳的 Last-Modified 頭進(jìn)行響應(yīng),當(dāng)用戶下次請求相同的對象時(shí),如果當(dāng)前的時(shí) 間戳超出了對象的使用期限,或者用戶是通過刷新方式請求該頁面的,瀏覽 器會向服務(wù)器發(fā)送一個 if_modified_since 請求確定對象是否發(fā)生了變化, 如果對象的確發(fā)生了變化,瀏覽器就發(fā)送一個完整的 GET青求以獲取新的對 象并將其再次緩存起來,否則,瀏覽器就從它的緩存中提取對象,并更新對 象的 last-modified 值。圖 6顯示了一個工作實(shí)例。圖6最后修改時(shí)間:la
11、st-modified時(shí)間戳讓瀏覽器確定是使用本地緩存內(nèi)容還是重新請求內(nèi)容舉一個例子,假設(shè)瀏覽器在請求時(shí),服務(wù)器使用 last-modified 時(shí)間戳 進(jìn)行響應(yīng),和使用if-modified-sinee 頭進(jìn)行響應(yīng)(參考圖7)時(shí)對比一下, 看行為有何不同。圖7檢查修改:通過發(fā)送if-modified-since 頭,服務(wù)器將會使用一個 表示自時(shí)間戳指定時(shí)間以來是否發(fā)生了變化的值進(jìn)行響應(yīng)在圖7中,瀏覽器使用if-modified-sinee頭發(fā)送一個請求,服務(wù)器使用304代碼進(jìn)行響應(yīng),表示瀏覽器可以使用緩存,不用發(fā)起一個完整的GET請求。為了全面理解這些頭信息的效果,最好的辦法是你自己動手實(shí)驗(yàn)
12、一翻, 使用各種不同的頭信息組合,并觀察它們的行為,分析頭信息的一個好工具 是 Wfeteh自己動手的方法正如前面給出的建議,自己動手(DIY)的方法并不總是捷徑,專門提供CDN加速的產(chǎn)品和解決方案可以滿足不同類型的需求。但如果你要開發(fā)的是 一個內(nèi)部使用的產(chǎn)品,可以提供幫助的可能只有Squid 了,Squid被用作許多產(chǎn)品的一個組成部分,許多ISP也在使用它。例如,在Java應(yīng)用程序中, Squid可以被用作Tomcat服務(wù)器的代理,Squid提供的不僅僅是HTTP緩存, 但關(guān)于它的完整介紹已經(jīng)超出了本文的范圍,請讀者自行搜索相關(guān)文章,可 以在 Wikimedia看到另一個使用Squid的例子。HTTP壓縮緩存僅僅是提高 Wet應(yīng)用程序性能的方法之一,壓縮是另一個關(guān)鍵方法, HTTP壓縮在內(nèi)容發(fā)送到客戶端之前將其壓縮,在客戶端和服務(wù)器端都有壓縮 功能,當(dāng)服務(wù)器交付的是壓縮內(nèi)容時(shí),由瀏覽器進(jìn)行解壓,這樣可以節(jié)約寶 貴的帶寬,減少成本和提高響應(yīng)時(shí)間。瀏覽器使用值為gzip的accept-encoding typically 頭宣稱它們支持壓縮,服務(wù)器使用content-encoding 頭指定應(yīng)答數(shù)據(jù)的編碼,例如,如果 使用的是gzip格式進(jìn)行壓縮,服務(wù)器應(yīng)該使用值為 gzip的 conten t-e ncodi n
溫馨提示
- 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 加盟保潔公司合同范本
- 2024年鹽城市濱??h招聘教師考試真題
- 農(nóng)村房屋共建合同范例
- 2024年梧州市龍圩區(qū)招錄公益性崗位人員考試真題
- 公司之間供貨合同范本
- 動產(chǎn)轉(zhuǎn)讓合同范本
- 2024年普洱市墨江縣教體系統(tǒng)所屬事業(yè)單位緊缺招聘考試真題
- 2024年綿陽市投資控股有限公司招聘筆試真題
- 第12課 宋元時(shí)期的都市和文化(教學(xué)設(shè)計(jì))七年級歷史下冊同步備課系列(部編版)
- 做代理合同范本
- 2023年新改版教科版科學(xué)五年級下冊全冊精編練習(xí)題(一課一練+單元+期中+期末)
- 新編英語語法教程第六版課后答案全
- 最新《橋梁工程》梁式橋和板式橋設(shè)計(jì)課件
- 化工廠員工電氣安全教育培訓(xùn)課件
- 專升本00226知識產(chǎn)權(quán)法試題題庫(考試必備)
- 供銷聯(lián)社審計(jì):問題發(fā)現(xiàn)與整改情況報(bào)告
- DB37-T 1854-2020 山東省化工裝置安全試車工作規(guī)范-(高清版)
- 建設(shè)項(xiàng)目竣工環(huán)境保護(hù)驗(yàn)收政策法規(guī)課件
- GA 814-2009 警用約束帶標(biāo)準(zhǔn)
- 釘釘考勤休假規(guī)定
- 海氏崗位價(jià)值評估法應(yīng)用實(shí)踐課件
評論
0/150
提交評論