專利名稱:一種基于flex的圖形數(shù)據(jù)客戶端緩存方法
技術領域:
本發(fā)明涉及一種B/S結(jié)構(gòu)系統(tǒng)下的數(shù)據(jù)緩存技術,尤其是涉及一種基于FLEX的富客戶端圖形應用的數(shù)據(jù)緩存方法。
背景技術:
在傳統(tǒng)的FLEX圖形應用中,客戶端從服務端讀取所有圖形渲染需要的數(shù)據(jù),在一般情況下,降低了邏輯的復雜性,減少開發(fā)難度。但是在本發(fā)明所處的應用環(huán)境中,圖形渲染繪制用到的數(shù)據(jù)量大,每次都從服務端讀取會導致加載時間較長,并且加重網(wǎng)絡帶寬利用和服務器負擔,而服務端存儲的圖形數(shù)據(jù)更新頻率并不高。本發(fā)明利用一種圖形數(shù)據(jù)的客戶端緩存技術,減少客戶端和服務端的通信數(shù)據(jù)量,減少數(shù)據(jù)傳輸時間,降低服務器消
^^ ο
發(fā)明內(nèi)容
本發(fā)明的目的在于針對FLEX圖形應用中服務端需要向客戶端傳輸大量圖形數(shù)據(jù)時,提出的一種客戶端緩存技術??蛻舳苏埱髨D形數(shù)據(jù)時附加本地緩存信息,服務端分析出客戶端緩存中沒有或者過時的圖形數(shù)據(jù),封裝好要返回給客戶端的數(shù)據(jù)后序列化為二進制數(shù)據(jù)傳送到客戶端,客戶端反序列化后更新本地緩存,并使用最新的圖形數(shù)據(jù)進行渲染繪制。本發(fā)明中的數(shù)據(jù)結(jié)構(gòu)包括對渲染畫面和圖形數(shù)據(jù)的定義,渲染畫面和圖形數(shù)據(jù)都有唯一編號,渲染畫面包含一個或多個圖形數(shù)據(jù),數(shù)據(jù)庫中保存了每個圖形數(shù)據(jù)所屬的畫面編號、圖形渲染數(shù)據(jù)和最后更新時間。本發(fā)明基于服務端的數(shù)據(jù)結(jié)構(gòu),在客戶端定義了緩存的數(shù)據(jù)結(jié)構(gòu),存儲圖形數(shù)據(jù)的唯一編號、渲染數(shù)據(jù)和最后更新時間,通過編號可以讀取渲染數(shù)據(jù)和最后更新時間。本發(fā)明首先在客戶端遍歷所有的圖形緩存數(shù)據(jù),讀取唯一編號和最后更新時間, 并加上需要渲染的畫面編號,進行對象化封裝,使用AMF協(xié)議發(fā)送給服務端。服務端將收到的二進制數(shù)據(jù)進行反序列化,得到渲染客戶端圖形緩存數(shù)據(jù)和畫面編號。從客戶端圖形緩存信息中解析出緩存的圖形數(shù)據(jù)編號和最后更新時間,此部分數(shù)據(jù)定義為A,編號定義為A. id,最后更新時間定義為A. lastUpdateTime。從數(shù)據(jù)庫中查詢到該畫面包含的所有圖形數(shù)據(jù)編號以及這些圖形數(shù)據(jù)的最后更新時間,此部分數(shù)據(jù)定義為B,編號定義為B. id,最后更新時間定義為B. lastUpdateTime。定義一個用于返回給客戶端的數(shù)據(jù)結(jié)構(gòu)C,包括編號C. id,是否使用緩存C. useCache,渲染數(shù)據(jù)C. ui,最后更新時間C. lastUpdateTime。遍歷B中的每一個B. id,如果存在A. id=B. id,則比較 A. lastUpdateTime 禾口 B. lastUpdateTime,如果 B. lastUpdateTime>A. lastUpdateTime, 則在 C 中加入一條新數(shù)據(jù),值為C. id=A. id, C. useCache=false,C. IastUpdateTime=B. lastUpdateTime ;如果 B. lastUpdateTime<=A. lastUpdateTime,則在 C 中加入一條新數(shù)據(jù), 值為:C. id=A. id, C. useCache=true ;如果沒有任何一個A. id與B. id相等,則在C中加入一條新數(shù)據(jù),值為:C. id=B. id, C. useCache=false, C. IastUpdateTime=B. IastUpdateTime0 遍歷B完成后,遍歷C,對于C中每一條C. useCache=false的數(shù)據(jù),根據(jù)C. id從數(shù)據(jù)庫中查詢出渲染數(shù)據(jù),放入C. ui。服務端將C通過AMF協(xié)議傳送給客戶端??蛻舳送ㄟ^反序列化操作得到C,遍歷C中每一條數(shù)據(jù),如果C. useCache=true, 則從本地圖形緩存數(shù)據(jù)中讀出編號為C. id的圖形渲染數(shù)據(jù),放入C. ui ;如果 C. useCache=false,則將C. id、C. ui和C. IastUpdateTime存入圖形緩存數(shù)據(jù),如果已存在編號與C. id相等的緩存數(shù)據(jù),則先刪除該條數(shù)據(jù)再存入??蛻舳嗽俅伪闅vC,按順序?qū). Ui進行解析渲染,形成最終的渲染畫面。
圖1 本發(fā)明實施流程2:本發(fā)明功能結(jié)構(gòu)圖
圖3 客戶端封裝的查詢參數(shù)圖4 從數(shù)據(jù)庫中檢索出的圖形數(shù)據(jù)圖5 對圖形緩存信息和數(shù)據(jù)庫記錄進行比較圖6 根據(jù)比較結(jié)果對返回數(shù)據(jù)進行的封裝圖7 客戶端更新后的圖形緩存數(shù)據(jù)。
具體實施例方式
以下結(jié)合附圖,舉一具體實例對本發(fā)明的客戶端緩存技術做進一步說明。圖1所示為實施流程圖,圖2為功能結(jié)構(gòu)圖。本實例中,客戶端已緩存5條圖形數(shù)據(jù),包括圖形編號、圖形渲染數(shù)據(jù)、最后更新時間,通過圖形編號可定位到對應的圖形數(shù)據(jù)。這5條圖形緩存數(shù)據(jù)的編號為1、2、3、4、5, 定義這5條緩存圖形數(shù)據(jù)為A1、A2、A3、A4、A5,要渲染的畫面編號為P1,客戶端將畫面編號和緩存數(shù)據(jù)封裝為如圖3所示的數(shù)據(jù)結(jié)構(gòu),包含畫面編號Pl和圖形緩存數(shù)據(jù)編號id與最后更新時間IastUpdateTime的鍵值對。服務端解析參數(shù),得到畫面編號P1,到數(shù)據(jù)庫中查詢到屬于Pl的所有圖形數(shù)據(jù)的編號id為1、2、4、6,這4條圖形數(shù)據(jù)定義為Bi、B2、B4、B6,同時查出這4條圖形數(shù)據(jù)的最后更新時間IastUpdateTime,如圖4所示。服務器端將客戶端緩存信息A與數(shù)據(jù)庫中查詢到的記錄B按編號進行比較,如圖 5所示,其中編號為1和4的最后更新時間相同,編號為2的數(shù)據(jù)庫中的最后更新時間大于緩存中的最后更新時間,另外數(shù)據(jù)庫記錄中有編號6的圖形數(shù)據(jù),而緩存信息中沒有。根據(jù)對比結(jié)果,將緩存數(shù)據(jù)中沒有的和緩存中最后更新時間比數(shù)據(jù)庫記錄中的小的圖形渲染數(shù)據(jù),封裝到要返回給客戶端的數(shù)據(jù)結(jié)構(gòu)C中,緩存中已經(jīng)存在并且是最新數(shù)據(jù)的,只在數(shù)據(jù)結(jié)構(gòu)中加入使用緩存的標識,如圖6所示??蛻舳说玫椒祷氐臄?shù)據(jù)C后,將useCache為true的編號1和4的渲染數(shù)據(jù)從本地緩存中讀出,補充到C中。將useCache為false的編號2和6的圖形渲染數(shù)據(jù)和最后更新時間存入到本地緩存中,形成如圖7所示的新的緩存。最后客戶端使用編號1、2、4、6的最新圖形渲染數(shù)據(jù)渲染畫面,完成顯示。該實例中,按照所處實際應用環(huán)境下每條圖形渲染數(shù)據(jù)平均大小1KB來計算,如果采用傳統(tǒng)做法,將要從服務端讀取大約4KB的數(shù)據(jù),而采用本發(fā)明的方法,只要讀取大約 2KB的數(shù)據(jù)。而且在本實例所處的應用場景下,數(shù)據(jù)庫中圖形數(shù)據(jù)的更新頻率小,在客戶端讀取過最新的圖形渲染數(shù)據(jù)后,在較長的一段時間內(nèi)都不需要再從服務端讀取渲染數(shù)據(jù), 只會產(chǎn)生很小的數(shù)據(jù)庫讀取消耗和網(wǎng)絡通信量,大幅度的提高了性能。
權利要求
1.一種基于FLEX的圖形數(shù)據(jù)客戶端緩存方法,其特征在于,包括以下步驟 客戶端將要渲染的畫面編號和本地圖形緩存信息封裝為查詢參數(shù);客戶端使用AMF協(xié)議將封裝的參數(shù)發(fā)送到服務端;服務端根據(jù)畫面編號從數(shù)據(jù)庫中檢索出屬于此畫面的每條圖形數(shù)據(jù)的最后更新時間;服務端將上一步中檢索出的圖形數(shù)據(jù)最后更新時間與客戶端發(fā)送的圖形緩存信息中每條圖形緩存數(shù)據(jù)的更新時間進行比較;服務端根據(jù)比較結(jié)果從數(shù)據(jù)庫中讀取客戶端需要更新的圖形渲染數(shù)據(jù),并進行結(jié)構(gòu)化封裝;服務端使用AMF協(xié)議將封裝好的數(shù)據(jù)返回給客戶端; 客戶端解析數(shù)據(jù),更新本地圖形緩存數(shù)據(jù); 客戶端使用更新后的圖形緩存數(shù)據(jù)進行圖形渲染顯示。
2.根據(jù)權利要求1所述的一種基于FLEX的圖形數(shù)據(jù)客戶端緩存方法,其特征在于,所述步驟1)進一步包括封裝查詢參數(shù)時,將本地緩存的所有圖形數(shù)據(jù)的編號和最后更新時間組合為鍵值對,和渲染畫面編號一起發(fā)送給服務端。
3.根據(jù)權利要求1所述的一種基于FLEX的圖形數(shù)據(jù)客戶端緩存方法,其特征在于,所述步驟5)進一步包括封裝的返回給客戶端的數(shù)據(jù)結(jié)構(gòu)中,包含三種圖形數(shù)據(jù)一是屬于要顯示的畫面而客戶端緩存數(shù)據(jù)中并沒有的圖形數(shù)據(jù),會封裝圖形數(shù)據(jù)編號、渲染數(shù)據(jù)和最后更新時間;二是屬于此畫面并且在數(shù)據(jù)庫中存儲的最后更新時間大于在客戶端緩存數(shù)據(jù)中的最后更新時間的圖形數(shù)據(jù),也會封裝圖形數(shù)據(jù)編號、渲染數(shù)據(jù)和最后更新時間;三是屬于此畫面并且在數(shù)據(jù)庫中存儲的最后更新時間等于或小于在客戶端緩存數(shù)據(jù)中的最后更新時間的圖形數(shù)據(jù),會只封裝圖形數(shù)據(jù)編號并加上使用客戶端緩存的標志。
全文摘要
本發(fā)明公開了一種基于FLEX的圖形數(shù)據(jù)客戶端緩存方法,解決了B/S結(jié)構(gòu)系統(tǒng)下富客戶端圖形應用加載大量圖形數(shù)據(jù)的效率問題。本發(fā)明充分利用FLEX的客戶端數(shù)據(jù)緩存功能,將大量的圖形數(shù)據(jù)保存在客戶端,通過比較客戶端與服務端數(shù)據(jù)的更新時間,判斷是從客戶端直接讀取緩存數(shù)據(jù),還是從服務端重新讀取數(shù)據(jù)并更新緩存。本發(fā)明通過這樣的緩存技術,減少了圖形數(shù)據(jù)加載時服務端對數(shù)據(jù)庫的讀取次數(shù)以及客戶端和服務端的數(shù)據(jù)傳輸量,降低了服務端的消耗和對網(wǎng)絡帶寬的利用,提高了加載效率。
文檔編號G06F17/30GK102413170SQ201110316660
公開日2012年4月11日 申請日期2011年10月18日 優(yōu)先權日2011年10月18日
發(fā)明者劉嘉華, 康睿, 楊旭斌, 蔣元晨, 陳玉慧 申請人:南京南瑞集團公司, 國網(wǎng)電力科學研究院