pheongap混合應(yīng)用,跨平臺(tái),做應(yīng)用加工廠提供應(yīng)用模板編輯器。本地應(yīng)用,完全是模擬IOS,安卓原生應(yīng)用的實(shí)現(xiàn),所以支持14種手勢(shì),所有PPT動(dòng)畫,視覺差效果,等等功能組合,這是IDE的功能設(shè)置。
HTML5本地?cái)?shù)據(jù)庫(kù)就是用SQLite,這是我們應(yīng)用的數(shù)據(jù)庫(kù)。
通過數(shù)據(jù)動(dòng)態(tài)生成頁面,這個(gè)應(yīng)用有30頁,有些應(yīng)用上千頁,所以頁面全是動(dòng)態(tài)生成的,只會(huì)維持在2-3頁, 這里用到了模擬多線程任務(wù) ,用于實(shí)現(xiàn)無緩沖翻頁,效果還是不錯(cuò)。
一個(gè)頁面涉及N多數(shù)據(jù)的的查詢,可能關(guān)聯(lián)很多表,幾十上百條記錄,如何優(yōu)化?
數(shù)據(jù)查詢方式
1:sql數(shù)據(jù)
拼sql語句是不行的,你可以試試一條SQL語句耗費(fèi)的時(shí)間是多少? 基本上1條語句就是100毫秒了,安卓下面實(shí)測(cè),F(xiàn)在一個(gè)頁面就可能存在幾百條數(shù)據(jù)的關(guān)聯(lián),那么直接通過語句查詢是行不通的。
2:緩存哈希
通過HTML5的executeSql查詢出來的是一個(gè),SQLResultSetRowList 類型的 rows 是數(shù)據(jù)集的“行”,rows 有兩個(gè)屬性:length、item ,故獲取查詢結(jié)果的第一行列名為name的值 :result.rows.item(0).name 那么如果緩存數(shù)據(jù)為哈希的格式,這樣就不需要查詢數(shù)據(jù)了,每次找內(nèi)存中的緩存即可了。
就是這樣
vardata = {} each(result,function(r,index){ data[r.id] = r.item(index); })但是忽略一個(gè)問題,瀏覽器分配給每一個(gè)應(yīng)用的內(nèi)存是有限的,所以這樣緩存的表數(shù)據(jù)一多,內(nèi)存會(huì)溢出,應(yīng)用直接崩潰。
3:緩存數(shù)據(jù)集
目前使用的就是html5返回的緩存數(shù)據(jù)集SQLResultSetRowList了,因?yàn)槲覀兛梢灾苯觬esult.rows.item(0) 通過索引下表找到對(duì)應(yīng)的數(shù)據(jù)。
這樣只需要算出數(shù)據(jù)庫(kù)中每一個(gè)id對(duì)應(yīng)的下標(biāo)索引就可以大大加快查詢數(shù)據(jù)了。
目前項(xiàng)目三種都嘗試過,目前使用的最后一種數(shù)據(jù)查找,項(xiàng)目越來越大,這樣數(shù)據(jù)結(jié)構(gòu)的問題也很嚴(yán)峻,如果你有做SPA應(yīng)用,如果有用HTML5數(shù)據(jù)交互,希望能幫助到你。