沈陽工學(xué)院信息與控制學(xué)院 趙浩翔 韓飛
隨著微信小程序的崛起,開發(fā)者對小程序API 的性能要求度越來越高,API 的性能直接影響的是用戶在運行時的速率與效能。用戶加載壓力過大,會導(dǎo)致系統(tǒng)癱瘓甚至用戶端出現(xiàn)加載延時或加載失敗等不健康狀態(tài)的系統(tǒng)表現(xiàn),因此需要對其進行一系列測試,依此用于開發(fā)時決定使用的方案。
依照官方文檔可知,db.RegExp()是小程序云開發(fā)內(nèi)對集合進行模糊查詢,此類查詢與JavaScript 原方法查詢方式類似,但原方法查詢flag 僅支持i(不區(qū)分大小寫)、m(跨行匹配;讓開始匹配符^或結(jié)束匹配符時除了匹配字符串的開頭和結(jié)尾外,還匹配行的開頭和結(jié)尾)還支持s(讓.可以匹配包括換行符在內(nèi)的所有字符)。在小程序開發(fā)時,系統(tǒng)可能無法辨別一些正則符號,因此在編寫程序時盡量避免使用正則。
依然就db.RegExp()函數(shù)來講const db=wx.cloud.database(), //初始化數(shù)據(jù)庫函數(shù)db.collction(‘database’).where({ //調(diào)用數(shù)據(jù)庫database word_value:db.RegExp({ //匹配方法字段值:模糊查詢函數(shù)
regexp:this.data.search, //模糊查詢條件,并監(jiān)視輸入內(nèi)容進行對數(shù)據(jù)庫調(diào)用
opinions:i, //flag 值 不區(qū)分大小寫
})
.get({ //獲取數(shù)據(jù)庫內(nèi)與其輸入匹配的值
success:res=>{ //匹配成功
this.setData({ //刷新頁面數(shù)據(jù)
data=res.data, //返回data 值
})
console.log (“[查詢成功]:”,res) //查詢成功打印匹配值至控制臺
}
})
})
首先查詢數(shù)據(jù)量小于15w大于10w的數(shù)據(jù),并每次以5w次數(shù)據(jù)累加測試,在數(shù)據(jù)累加到25w左右后,明顯在使用模糊查詢構(gòu)造器后性能有所降低并出現(xiàn)少許的加載速率延遲,雖然云端檢索器內(nèi)沒有命中記錄,但卻開始對系統(tǒng)性能有了明顯的影響,再當(dāng)數(shù)據(jù)量達到28.7w 時系統(tǒng)性能已經(jīng)有了明顯的影響,可知在數(shù)據(jù)量達到29w后,已經(jīng)不能再次進行進一層的深度查詢了,在此可以粗略計算在小程序推廣以后,假設(shè)平均每天訪問量共有10w人次,數(shù)據(jù)量為2w,根據(jù)模擬測試的結(jié)果得知,最大不得超過5000 人次/s。
在使用db.RegExp()API 函數(shù)時,首先需要看數(shù)據(jù)量的大小,如果數(shù)據(jù)量較小,則不必考慮系統(tǒng)性能的影響,當(dāng)數(shù)據(jù)量非常大的情況下,可以嘗試使用分塊儲存為靜態(tài)文件以減小系統(tǒng)負擔(dān)。