perf: 缓存迁移

This commit is contained in:
kuaifan 2022-12-10 13:35:10 +08:00
parent 1b23b4621a
commit 529b8b682f
2 changed files with 131 additions and 28 deletions

View File

@ -1239,7 +1239,7 @@ const localforage = require("localforage");
}, },
IDBSet(key, value) { IDBSet(key, value) {
return localforage.setItem(key, value).then(_ => {}) return localforage.setItem(key, value)
}, },
IDBRemove(key) { IDBRemove(key) {
@ -1282,30 +1282,44 @@ const localforage = require("localforage");
/** /**
* ============================================================================= * =============================================================================
* ***************************** sessionStorage **************************** * ***************************** localStorage ******************************
* ============================================================================= * =============================================================================
*/ */
$.extend({ $.extend({
setSessionStorage(key, value) { setStorage(key, value) {
return this.operationSessionStorage(key, value); return this.__operationStorage(key, value);
}, },
getSessionStorage(key, def = null) { getStorageValue(key) {
let value = this.operationSessionStorage(key); return this.__operationStorage(key);
return value || def;
}, },
getSessionStorageString(key, def = '') { getStorageString(key, def = '') {
let value = this.operationSessionStorage(key); let value = this.__operationStorage(key);
return typeof value === "string" || typeof value === "number" ? value : def; return typeof value === "string" || typeof value === "number" ? value : def;
}, },
getSessionStorageInt(key, def = 0) { getStorageInt(key, def = 0) {
let value = this.operationSessionStorage(key); let value = this.__operationStorage(key);
return typeof value === "number" ? value : def; 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) { if (!key) {
return; return;
} }
@ -1314,31 +1328,103 @@ const localforage = require("localforage");
keyName = '__state:' + key + '__'; keyName = '__state:' + key + '__';
} }
if (typeof value === 'undefined') { if (typeof value === 'undefined') {
return this.loadFromlSession(key, '', keyName); return this.__loadFromlLocal(key, '', keyName);
} else { } else {
this.savaToSession(key, value, keyName); this.__savaToLocal(key, value, keyName);
} }
}, },
savaToSession(key, value, keyName) { __savaToLocal(key, value, keyName) {
try { try {
if (typeof keyName === 'undefined') keyName = '__seller__'; if (typeof keyName === 'undefined') keyName = '__seller__';
let seller = window.sessionStorage[keyName]; let seller = window.localStorage[keyName];
if (!seller) { if (!seller) {
seller = {}; seller = {};
} else { } else {
seller = JSON.parse(seller); seller = JSON.parse(seller);
} }
seller[key] = value; seller[key] = value;
window.sessionStorage[keyName] = JSON.stringify(seller); window.localStorage[keyName] = JSON.stringify(seller);
} catch (e) { } catch (e) {
} }
}, },
loadFromlSession(key, def, keyName) { __loadFromlLocal(key, def, keyName) {
try { try {
if (typeof keyName === 'undefined') keyName = '__seller__'; 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) { if (!seller) {
return def; return def;
} }

View File

@ -10,6 +10,21 @@ export default {
*/ */
init({state, dispatch}) { init({state, dispatch}) {
return new Promise(async resolve => { 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.cacheServerUrl = await $A.IDBString("cacheServerUrl")
state.cacheUserBasic = await $A.IDBArray("cacheUserBasic") state.cacheUserBasic = await $A.IDBArray("cacheUserBasic")
@ -570,32 +585,34 @@ export default {
handleClearCache({state, dispatch}, userInfo) { handleClearCache({state, dispatch}, userInfo) {
return new Promise(async resolve => { return new Promise(async resolve => {
try { try {
// state
state.cacheUserBasic = []; state.cacheUserBasic = [];
state.cacheDialogs = []; state.cacheDialogs = [];
state.cacheProjects = []; state.cacheProjects = [];
state.cacheColumns = []; state.cacheColumns = [];
state.cacheTasks = []; state.cacheTasks = [];
//
const cacheLoginEmail = await $A.IDBString("cacheLoginEmail"); // localStorage
const cacheFileSort = await $A.IDBJson("cacheFileSort");
const languageType = window.localStorage.getItem("__language:type__"); const languageType = window.localStorage.getItem("__language:type__");
const keyboardData = window.localStorage.getItem("__keyboard:data__"); const keyboardData = window.localStorage.getItem("__keyboard:data__");
const themeMode = window.localStorage.getItem("__theme:mode__"); const themeMode = window.localStorage.getItem("__theme:mode__");
//
window.localStorage.clear(); window.localStorage.clear();
await $A.IDBClear();
//
window.localStorage.setItem("__language:type__", languageType) window.localStorage.setItem("__language:type__", languageType)
window.localStorage.setItem("__keyboard:data__", keyboardData) window.localStorage.setItem("__keyboard:data__", keyboardData)
window.localStorage.setItem("__theme:mode__", themeMode) 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("cacheServerUrl", state.cacheServerUrl);
await $A.IDBSet("cacheProjectParameter", state.cacheProjectParameter); await $A.IDBSet("cacheProjectParameter", state.cacheProjectParameter);
await $A.IDBSet("cacheLoginEmail", cacheLoginEmail); await $A.IDBSet("cacheLoginEmail", cacheLoginEmail);
await $A.IDBSet("cacheFileSort", cacheFileSort); await $A.IDBSet("cacheFileSort", cacheFileSort);
await $A.IDBSet("cacheTaskBrowse", state.cacheTaskBrowse); await $A.IDBSet("cacheTaskBrowse", state.cacheTaskBrowse);
dispatch("saveUserInfo", $A.isJson(userInfo) ? userInfo : state.userInfo);
// // userInfo
resolve() dispatch("saveUserInfo", $A.isJson(userInfo) ? userInfo : state.userInfo).then(resolve);
} catch (e) { } catch (e) {
resolve() resolve()
} }