一種基于HTML5應(yīng)用緩存的移動(dòng)Web緩存優(yōu)化方法
【技術(shù)領(lǐng)域】
[0001 ]本發(fā)明是一種基于HTML5應(yīng)用緩存的移動(dòng)Web緩存優(yōu)化方法,屬于軟件技術(shù)領(lǐng)域。
【背景技術(shù)】
[0002] Web應(yīng)用是采用HTML、JavaScriptXSS等Web技術(shù)開發(fā)的、通過瀏覽器訪問的應(yīng)用 軟件,是移動(dòng)設(shè)備上最主要的軟件形態(tài)之一。與傳統(tǒng)的個(gè)人計(jì)算機(jī)相比,移動(dòng)設(shè)備計(jì)算能力 有限、網(wǎng)絡(luò)環(huán)境差,移動(dòng)Web應(yīng)用的訪問速度慢、消耗數(shù)據(jù)流量多,嚴(yán)重影響移動(dòng)Web應(yīng)用的 用戶體驗(yàn)。緩存是提高Web應(yīng)用性能的一種重要技術(shù)手段。一個(gè)Web應(yīng)用由眾多Web資源構(gòu) 成,緩存是將已經(jīng)下載過的Web資源存儲(chǔ)在本地空間,當(dāng)緩存的資源被再次請(qǐng)求時(shí)可以直接 從本地加載。緩存可以減少網(wǎng)絡(luò)請(qǐng)求數(shù)量,從而減少Web應(yīng)用訪問時(shí)的數(shù)據(jù)流量消耗,進(jìn)而 提高Web應(yīng)用的加載速度;同時(shí),本地獲取資源也節(jié)省了移動(dòng)設(shè)備的計(jì)算資源,符合移動(dòng)設(shè) 備輕量級(jí)計(jì)算的要求。
[0003] 傳統(tǒng)的Web緩存是基于HTTP協(xié)議提供的緩存機(jī)制。該機(jī)制具體提供了兩種模型:過 期模型要求開發(fā)者給Web資源配置一個(gè)過期時(shí)間,當(dāng)過期時(shí)間未到時(shí),瀏覽器可直接從緩存 加載資源;驗(yàn)證模型要求開發(fā)者給Web資源配置一個(gè)標(biāo)識(shí),該標(biāo)識(shí)可以為修改時(shí)間或唯一標(biāo) 識(shí)符,當(dāng)資源過期時(shí),瀏覽器將配置的資源標(biāo)識(shí)發(fā)送給服務(wù)器,服務(wù)器通過標(biāo)識(shí)來判定相應(yīng) 的資源是否發(fā)生變化,如果沒有變化則只返回一個(gè)頭部信息,否則就將更新的資源返回給 瀏覽器。在實(shí)踐中,由于Web開發(fā)者緩存配置不當(dāng)以及大量動(dòng)態(tài)資源的存在,移動(dòng)Web緩存的 性能存在問題,導(dǎo)致了大量的冗余請(qǐng)求,影響移動(dòng)Web應(yīng)用的性能。
[0004] HTML5的發(fā)展和普及,為移動(dòng)Web應(yīng)用的體驗(yàn)優(yōu)化帶來了新的技術(shù)思路。應(yīng)用緩存 (Application Cache)是HTML5提供的離線應(yīng)用接口 :Web開發(fā)者可創(chuàng)建Manifest文件,聲明 可被緩存在本地的資源列表,并將Manifest文件配置到Web應(yīng)用的主HTML頁面上。由此,當(dāng) 用戶離線訪問Web應(yīng)用時(shí),Manif est文件中聲明的資源可直接從本地讀??;當(dāng)用戶在線訪問 時(shí),瀏覽器會(huì)自動(dòng)檢查Manifest文件的更新狀況,當(dāng)Manifest發(fā)生變化時(shí),瀏覽器可自動(dòng)更 新Man i fe s t所聲明的所有資源。HTML5應(yīng)用緩存實(shí)際上提供了 一種對(duì)Web應(yīng)用緩存的細(xì)粒度 控制接口。因此,本發(fā)明提出一種自動(dòng)化的開發(fā)技術(shù)來幫助開發(fā)者優(yōu)化移動(dòng)Web應(yīng)用的緩 存。
【發(fā)明內(nèi)容】
[0005] 針對(duì)現(xiàn)有移動(dòng)Web應(yīng)用緩存中存在的問題,本發(fā)明的目的是基于HTML5應(yīng)用緩存提 供一種優(yōu)化移動(dòng)Web緩存的方法,其核心思想為:針對(duì)一個(gè)移動(dòng)Web應(yīng)用,在服務(wù)器端通過自 動(dòng)獲取該應(yīng)用所包含資源的更新狀態(tài),預(yù)測(cè)各資源的更新時(shí)間,從而選取較穩(wěn)定的一組資 源配置到HTML5應(yīng)用緩存的Manifest文件中,并且在Manifest文件中的資源內(nèi)容發(fā)生變化 時(shí)更新Manifest;在客戶端瀏覽器提供一個(gè)JavaScript運(yùn)行庫(kù),開發(fā)者可將運(yùn)行庫(kù)加入到 其移動(dòng)Web應(yīng)用之中,使得移動(dòng)Web應(yīng)用可利用HTML5應(yīng)用緩存;本發(fā)明支持開發(fā)者方便快捷 地改造其應(yīng)用。
[0006] 本發(fā)明主要分為三個(gè)部分:
[0007] 1.-個(gè)運(yùn)行在服務(wù)器端,自動(dòng)生成、維護(hù)、更新Manifest文件的工具。
[0008] 2.運(yùn)行在客戶端瀏覽器的JavaScript庫(kù)。
[0009] 3. -套部署方案。
[0010]本發(fā)明的核心在于利用一個(gè)工具分析移動(dòng)Web應(yīng)用的資源數(shù)據(jù),維護(hù)Manifest列 表,從而為客戶端提供有效的緩存服務(wù)。核心工具包含四個(gè)步驟:
[0011] 1,自動(dòng)爬取。工具首先按照一定間隔不斷爬取給定移動(dòng)Web應(yīng)用下的所有資源,獲 取每個(gè)時(shí)間點(diǎn)的資源信息。
[0012] 2,資源映射。工具將每個(gè)資源的URL映射為一個(gè)正則表達(dá)式。匹配到同一正則表達(dá) 式的資源視為同一資源。即對(duì)于URL不同但內(nèi)容相同的資源(如a. jpg?123和a. jpg?345),通 過服務(wù)器爬取之后知道它們是同一個(gè)圖片(內(nèi)容一樣),所以會(huì)生成一個(gè)表達(dá)式來代替這兩 個(gè)資源。通過將這些本來內(nèi)容一樣的資源的URL生成一個(gè)正則表達(dá)式,從而使得這些資源可 以不被重復(fù)下載。
[0013] 3,預(yù)測(cè)時(shí)間。根據(jù)每個(gè)時(shí)間點(diǎn)的資源信息,學(xué)習(xí)識(shí)別資源變化規(guī)律,預(yù)測(cè)資源維持 不變的時(shí)間。
[0014] 4,選擇資源。根據(jù)預(yù)測(cè)時(shí)間的結(jié)果判斷選取最佳的資源集合,生成或更新HTML5應(yīng) 用緩存的Manifest配置文件。
[0015] 上述步驟的具體技術(shù)方案如下:
[0016] 1.自動(dòng)爬取。工具首先按照一定間隔不斷爬取目標(biāo)移動(dòng)Web應(yīng)用的資源,獲取每個(gè) 時(shí)間點(diǎn)的資源信息。工具按照指定的URL和訪問間隔不斷訪問并渲染頁面,解析網(wǎng)頁包含的 資源,獲取資源信息,如資源的大小、資源內(nèi)容的MD5值、資源的緩存時(shí)間配置情況等。訪問 間隔可以由開發(fā)者結(jié)合網(wǎng)站實(shí)際情況給出,也可以由工具自動(dòng)選擇。
[0017] 2.資源映射。工具支持識(shí)別URL動(dòng)態(tài)變化的資源。由第一步獲得的資源中,有很多 資源是動(dòng)態(tài)生成的。這些資源即使內(nèi)容完全一樣,也會(huì)有不同的URL,工具會(huì)把他們映射為 同一資源。比如由AJAX動(dòng)態(tài)請(qǐng)求的資源往往會(huì)帶有AJAX的時(shí)間戳而主機(jī)名、路徑名、端口號(hào) 完全一樣,在映射中,這些帶時(shí)間戳的資源都會(huì)被映射為同一個(gè)資源。值得注意的是,URL和 正則表達(dá)式的對(duì)應(yīng)關(guān)系是相對(duì)模糊的,如果一組URL對(duì)應(yīng)的正則表達(dá)式涵義太廣泛,則正則 表達(dá)式之間可能產(chǎn)生沖突。工具默認(rèn)選用比較嚴(yán)格的正則表達(dá)式生成方法,即通過從資源 內(nèi)容一樣但URL不一樣的這些URL中識(shí)別一組URL的最長(zhǎng)公共子串生成映射目標(biāo)。資源映射 使用的算法偽代碼如下:
[0019] 算法的輸入是t-1時(shí)刻的正則化的資源列表Ht-jPt時(shí)刻的具體資源列表Rt,生成t 時(shí)刻的正則化資源列表Ht。正則化是指H中的資源是可以用正則表達(dá)式唯一確定的。算法首 先完成初始化的工作(L1-L4),將t時(shí)刻的正則化資源列表H t初始化為t-Ι時(shí)刻的正則化資 源列表,并設(shè)置每個(gè)資源的狀態(tài)為"inexistence"(不存在)。主體部分(L5-L20)是對(duì)于 每個(gè)R中的資源r,得到它的URL和H t中的正則表達(dá)式的映射關(guān)系。如果Ht中沒有資源和r對(duì) 應(yīng),則在Ht中新添加關(guān)于r的記錄(L12-L15)。如果H t中有唯一資源和r對(duì)應(yīng),則將r映射到Ht 并重新計(jì)算正則表達(dá)式(L8-L11)。如果Ht中有多個(gè)資源和r對(duì)應(yīng),則原有的映射失敗,刪除 原有映射,并且重新在H t中新添加關(guān)于r的記錄(L16-L19)。
[0020] 3.預(yù)測(cè)時(shí)間。通過爬取的歷史信息預(yù)測(cè)每個(gè)資源維持不變的時(shí)間,只有長(zhǎng)期不變 的資源配置到應(yīng)用緩存中才能帶來可觀的收益;相反,如果放入應(yīng)用緩存的資源變化過于 頻繁,那么會(huì)導(dǎo)致整個(gè)應(yīng)用緩存不斷被刷新,進(jìn)而抵消了其帶來的優(yōu)化效果,得不償失。技 術(shù)實(shí)現(xiàn)上,工具從歷史信息中提取每個(gè)資源在每個(gè)時(shí)刻的MD5,獲取變化情況的時(shí)間序列, 最后借助時(shí)間序列下的線性回歸完成預(yù)測(cè)。預(yù)測(cè)時(shí)間使用的算法偽代碼如下:
[0022] 算法的輸入是一個(gè)資源所有的歷史狀態(tài)信息。歷史狀態(tài)可能有三種,未改變、改 變、不存在。根據(jù)網(wǎng)絡(luò)資源的特性,某一時(shí)刻資源消失,下一時(shí)刻該資源出現(xiàn)的可能性比較 小,因此,對(duì)于當(dāng)前時(shí)刻狀態(tài)為"不存在"的資源,算法預(yù)測(cè)時(shí)間為0(L1-L3)。對(duì)于其他資源, 算法使用線性回歸預(yù)測(cè)變化的時(shí)間。GDM是線性回歸中常用的梯度下降算法,是一種高效的 在線算法(L4-L9)。最后該算法還負(fù)責(zé)刪除那些預(yù)測(cè)時(shí)間很短的資源,減少需要處理的資源 數(shù)目,提高運(yùn)算效率(L10-L12)。
[0023] 4選擇資源。在這一步,工具將綜合考慮一個(gè)資源的各方面性質(zhì),權(quán)衡利弊決定放 入應(yīng)用緩存中的資源。影響一個(gè)資源是否被緩存的因素有:資源的大小,預(yù)測(cè)維持不變的時(shí) 間,緩存的配置,移動(dòng)Web應(yīng)用本身用戶分布。比較大的資源,以及長(zhǎng)期保持穩(wěn)定不變的資源 往往能獲得更好的效益。緩存配置也會(huì)對(duì)資源緩存有很大的影響:本身配置緩存時(shí)間較長(zhǎng) 的資源通過HTTP緩存協(xié)議就可以很好的工作;相應(yīng)的,資源本身的緩存配置時(shí)間越短,獲得 的額外效益越大。最后,應(yīng)用的用戶訪問分布也會(huì)影響到資源的選取。工具綜合考慮權(quán)衡各 種影響因素,計(jì)算出最佳資源集合,配置到HTML5應(yīng)用緩存的Manifest文件中。選擇資源使 用的