From 529b8b682f9f56622038c8a00dbd4adeb029278c Mon Sep 17 00:00:00 2001 From: kuaifan Date: Sat, 10 Dec 2022 13:35:10 +0800 Subject: [PATCH] =?UTF-8?q?perf:=20=E7=BC=93=E5=AD=98=E8=BF=81=E7=A7=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resources/assets/js/functions/common.js | 124 ++++++++++++++++++++---- resources/assets/js/store/actions.js | 35 +++++-- 2 files changed, 131 insertions(+), 28 deletions(-) diff --git a/resources/assets/js/functions/common.js b/resources/assets/js/functions/common.js index e12341790..137c4e4e0 100755 --- a/resources/assets/js/functions/common.js +++ b/resources/assets/js/functions/common.js @@ -1239,7 +1239,7 @@ const localforage = require("localforage"); }, IDBSet(key, value) { - return localforage.setItem(key, value).then(_ => {}) + return localforage.setItem(key, value) }, IDBRemove(key) { @@ -1282,30 +1282,44 @@ const localforage = require("localforage"); /** * ============================================================================= - * ***************************** sessionStorage **************************** + * ***************************** localStorage ****************************** * ============================================================================= */ $.extend({ - setSessionStorage(key, value) { - return this.operationSessionStorage(key, value); + setStorage(key, value) { + return this.__operationStorage(key, value); }, - getSessionStorage(key, def = null) { - let value = this.operationSessionStorage(key); - return value || def; + getStorageValue(key) { + return this.__operationStorage(key); }, - getSessionStorageString(key, def = '') { - let value = this.operationSessionStorage(key); + getStorageString(key, def = '') { + let value = this.__operationStorage(key); return typeof value === "string" || typeof value === "number" ? value : def; }, - getSessionStorageInt(key, def = 0) { - let value = this.operationSessionStorage(key); + getStorageInt(key, def = 0) { + let value = this.__operationStorage(key); return typeof value === "number" ? value : def; }, - operationSessionStorage(key, value) { + getStorageBoolean(key, def = false) { + let value = this.__operationStorage(key); + return typeof value === "boolean" ? value : def; + }, + + getStorageArray(key, def = []) { + let value = this.__operationStorage(key); + return this.isArray(value) ? value : def; + }, + + getStorageJson(key, def = {}) { + let value = this.__operationStorage(key); + return this.isJson(value) ? value : def; + }, + + __operationStorage(key, value) { if (!key) { return; } @@ -1314,31 +1328,103 @@ const localforage = require("localforage"); keyName = '__state:' + key + '__'; } if (typeof value === 'undefined') { - return this.loadFromlSession(key, '', keyName); + return this.__loadFromlLocal(key, '', keyName); } else { - this.savaToSession(key, value, keyName); + this.__savaToLocal(key, value, keyName); } }, - savaToSession(key, value, keyName) { + __savaToLocal(key, value, keyName) { try { if (typeof keyName === 'undefined') keyName = '__seller__'; - let seller = window.sessionStorage[keyName]; + let seller = window.localStorage[keyName]; if (!seller) { seller = {}; } else { seller = JSON.parse(seller); } seller[key] = value; - window.sessionStorage[keyName] = JSON.stringify(seller); + window.localStorage[keyName] = JSON.stringify(seller); } catch (e) { } }, - loadFromlSession(key, def, keyName) { + __loadFromlLocal(key, def, keyName) { try { if (typeof keyName === 'undefined') keyName = '__seller__'; - let seller = window.sessionStorage[keyName]; + let seller = window.localStorage[keyName]; + if (!seller) { + return def; + } + seller = JSON.parse(seller); + if (!seller || typeof seller[key] === 'undefined') { + return def; + } + return seller[key]; + } catch (e) { + return def; + } + }, + }); + + /** + * ============================================================================= + * ***************************** sessionStorage **************************** + * ============================================================================= + */ + $.extend({ + setSessionStorage(key, value) { + return this.__operationSessionStorage(key, value); + }, + + getSessionStorageValue(key) { + return this.__operationSessionStorage(key); + }, + + getSessionStorageString(key, def = '') { + let value = this.__operationSessionStorage(key); + return typeof value === "string" || typeof value === "number" ? value : def; + }, + + getSessionStorageInt(key, def = 0) { + let value = this.__operationSessionStorage(key); + return typeof value === "number" ? value : def; + }, + + __operationSessionStorage(key, value) { + if (!key) { + return; + } + let keyName = '__state__'; + if (key.substring(0, 5) === 'cache') { + keyName = '__state:' + key + '__'; + } + if (typeof value === 'undefined') { + return this.__loadFromlSession(key, '', keyName); + } else { + this.__savaToSession(key, value, keyName); + } + }, + + __savaToSession(key, value, keyName) { + try { + if (typeof keyName === 'undefined') keyName = '__seller__'; + let seller = window.sessionStorage.getItem(keyName); + if (!seller) { + seller = {}; + } else { + seller = JSON.parse(seller); + } + seller[key] = value; + window.sessionStorage.setItem(keyName, JSON.stringify(seller)) + } catch (e) { + } + }, + + __loadFromlSession(key, def, keyName) { + try { + if (typeof keyName === 'undefined') keyName = '__seller__'; + let seller = window.sessionStorage.getItem(keyName); if (!seller) { return def; } diff --git a/resources/assets/js/store/actions.js b/resources/assets/js/store/actions.js index 40ce9b29e..1379b0d94 100644 --- a/resources/assets/js/store/actions.js +++ b/resources/assets/js/store/actions.js @@ -10,6 +10,21 @@ export default { */ init({state, dispatch}) { return new Promise(async resolve => { + // 迁移缓存 + const initTag = await $A.IDBBoolean("initTag") + if (!initTag) { + await $A.IDBSet("initTag", true) + const userInfo = $A.getStorageJson("userInfo") + const cacheServerUrl = $A.getStorageString("cacheServerUrl") + window.localStorage.clear() + if (userInfo.userid > 0) { + await $A.IDBSet("userInfo", userInfo) + } + if (/^https*:\/\//i.test(cacheServerUrl)) { + await $A.IDBSet("cacheServerUrl", cacheServerUrl) + } + } + // 读取缓存 state.cacheServerUrl = await $A.IDBString("cacheServerUrl") state.cacheUserBasic = await $A.IDBArray("cacheUserBasic") @@ -570,32 +585,34 @@ export default { handleClearCache({state, dispatch}, userInfo) { return new Promise(async resolve => { try { + // state state.cacheUserBasic = []; state.cacheDialogs = []; state.cacheProjects = []; state.cacheColumns = []; state.cacheTasks = []; - // - const cacheLoginEmail = await $A.IDBString("cacheLoginEmail"); - const cacheFileSort = await $A.IDBJson("cacheFileSort"); + + // localStorage const languageType = window.localStorage.getItem("__language:type__"); const keyboardData = window.localStorage.getItem("__keyboard:data__"); const themeMode = window.localStorage.getItem("__theme:mode__"); - // window.localStorage.clear(); - await $A.IDBClear(); - // window.localStorage.setItem("__language:type__", languageType) window.localStorage.setItem("__keyboard:data__", keyboardData) window.localStorage.setItem("__theme:mode__", themeMode) + + // localForage + const cacheLoginEmail = await $A.IDBString("cacheLoginEmail"); + const cacheFileSort = await $A.IDBJson("cacheFileSort"); + await $A.IDBClear(); await $A.IDBSet("cacheServerUrl", state.cacheServerUrl); await $A.IDBSet("cacheProjectParameter", state.cacheProjectParameter); await $A.IDBSet("cacheLoginEmail", cacheLoginEmail); await $A.IDBSet("cacheFileSort", cacheFileSort); await $A.IDBSet("cacheTaskBrowse", state.cacheTaskBrowse); - dispatch("saveUserInfo", $A.isJson(userInfo) ? userInfo : state.userInfo); - // - resolve() + + // userInfo + dispatch("saveUserInfo", $A.isJson(userInfo) ? userInfo : state.userInfo).then(resolve); } catch (e) { resolve() }