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) {
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;
}

View File

@ -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()
}