封裝全局緩存--支持命名空間、過期時間

\bullet 前言

? ? 去年就已經(jīng)開發(fā)并應用大半年了,但是最近又被提出優(yōu)化項,故趁此機會完整記錄下

\bullet 分析

? ? 過期時間的比較可以在獲取時,當過期時直接刪除

? ? 可以借助Reflect.defineProperty設置get為每一次訪問做攔截,并在此做過期校驗

? ? 為了保證數(shù)據(jù)的"干凈",將過期時間單獨保存起來,并去監(jiān)聽瀏覽器的刷新事件,在發(fā)生刷新行為后,存儲過期時間,并在下次重新實例化時從localStorage中獲取,并根據(jù)過期時間重新校驗一次,這樣配合每次校驗的能力,就不需要設置定時器了

\bullet 實現(xiàn)

? ??\ast 初始化

? ? ? ? 我個人是傾向于全局統(tǒng)一的,所以一開始是做成了單例模式,但是后續(xù)使用過程中發(fā)現(xiàn)都不這么用,故去除了

? ? ? ? 初始化主要就是生產(chǎn)一個根命名作為store,并注冊瀏覽器的beforeunload事件將過期信息保存后讀取到該信息做一遍過期校驗以省略定時器的使用

? ??\ast 設置(可批量)

? ? ? ? 這里主要就是做一些參數(shù)處理,比如對批量時接收對象,非批量接收對象合并成數(shù)組,根據(jù)是否提供name屬性決定設置的值是在命名下的對象下還是直接掛在命名下

? ? def方法則是為過期時間設置校驗攔截

? ??\ast clear、getItem、removeItem

? ? ? ? 均要支持僅清空當前命名空間下的值或清空所有

? ??\ast 過期時間也要支持單獨設置

\bullet 使用

? ??\bullet 存儲效果

\bullet 寫在最后

? ? 一開始在未摒棄定時器的情況下,我的思路是監(jiān)聽瀏覽器刷新,本地存儲已經(jīng)過的時間,當刷新后計算差值時間后重新設置定時器,然后通過如下偽代碼獲取所有key后遍歷由redis控制的部分并校驗過期

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容