From d27dd0a5a3e9f698d6bf288920d5e405347f9bc6 Mon Sep 17 00:00:00 2001 From: Xwite <1797350009@qq.com> Date: Sat, 6 May 2023 22:58:36 +0800 Subject: [PATCH] =?UTF-8?q?perf(web):=20=E4=BD=BF=E7=94=A8map=E6=9F=A5?= =?UTF-8?q?=E6=89=BE=E5=8B=BE=E9=80=89=E7=9A=84=E6=BA=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/web/src/components/SourceList.vue | 18 +++--------- modules/web/src/store/sourceStore.js | 35 +++++++---------------- 2 files changed, 15 insertions(+), 38 deletions(-) diff --git a/modules/web/src/components/SourceList.vue b/modules/web/src/components/SourceList.vue index f9d6f6942..bae4bf4d9 100644 --- a/modules/web/src/components/SourceList.vue +++ b/modules/web/src/components/SourceList.vue @@ -50,24 +50,14 @@ import SourceItem from "./SourceItem.vue"; const store = useSourceStore(); const sourceUrlSelect = ref([]); const searchKey = ref(""); -const { sources } = storeToRefs(store); +const { sources, sourcesMap, sourceUrlKey } = storeToRefs(store); const isBookSource = computed(() => { return /bookSource/.test(window.location.href); }); const sourceSelect = computed(() => { - let temp = sourceUrlSelect.value, - selectUrlsLength = temp.length; - if (selectUrlsLength == 0) return []; - let searchKey = "sourceUrl"; - if (isBookSource.value) searchKey = "bookSourceUrl"; - return sources.value.filter((source) => { - let searchIndex = temp.indexOf(source[searchKey]); - if (searchIndex > -1) { - temp.splice(searchIndex, 1); - return true; - } - return false; - }); + if (sourceUrlSelect.value.length == 0) return []; + let searchKey = sourceUrlKey.value; + return sourceUrlSelect.value.map(sourceUrl => sourcesMap.value.get(sourceUrl)); }); const deleteSelectSources = () => { API.deleteSource(sourceSelect.value).then(({ data }) => { diff --git a/modules/web/src/store/sourceStore.js b/modules/web/src/store/sourceStore.js index da29e935f..4dcca89a4 100644 --- a/modules/web/src/store/sourceStore.js +++ b/modules/web/src/store/sourceStore.js @@ -21,6 +21,12 @@ export const useSourceStore = defineStore("source", { }, getters: { sources: (state) => (isBookSource ? state.bookSources : state.rssSources), + sourceUrlKey: (state) => isBookSource ? "bookSourceUrl" : "sourceUrl", + sourcesMap: (state) => { + let map = new Map(); + state.sources.forEach(source => map.set(source[state.sourceUrlKey], source)); + return map; + }, currentSourceUrl: (state) => isBookSource ? state.currentSource.bookSourceUrl @@ -57,31 +63,13 @@ export const useSourceStore = defineStore("source", { }, //保存当前编辑源 saveCurrentSource() { - let source = this.currentSource, - sources, - searchKey; - if (isBookSource) { - sources = this.bookSources; - searchKey = "bookSourceUrl"; - } else { - sources = this.rssSources; - searchKey = "sourceUrl"; - } - let index = sources.findIndex( - (element) => element[searchKey] === source[searchKey] - ); - //去掉响应 toRaw? - source = JSON.parse(JSON.stringify(source)); - if (index > -1) { - sources.splice(index, 1, source); - } else { - sources.push(source); - } + let source = this.currentSource, map = this.sourcesMap; + map.set(source[this.sourceUrlKey], source); + this.saveSources(Array.from(map.values())); }, // 更改当前编辑的源 changeCurrentSource(source) { - const newContent = JSON.stringify(source); - this.currentSource = JSON.parse(newContent); + this.currentSource = JSON.parse(JSON.stringify((source))); }, async setPushReturnSources(returnSoures) { if (isBookSource) { @@ -104,8 +92,7 @@ export const useSourceStore = defineStore("source", { localStorage.setItem("tabName", tabName); }, changeEditTabSource(source) { - const newContent = JSON.stringify(source); - this.editTabSource = JSON.parse(newContent); + this.editTabSource = JSON.parse(JSON.stringify((source))); }, editHistory(history) { let historyObj;