!200 性能提升, 未知key时处理逻辑调整

Merge pull request !200 from ly-chn/ly-chn
This commit is contained in:
奔跑的面条 2023-09-03 09:59:15 +00:00 committed by Gitee
commit a492ed2440
3 changed files with 27 additions and 14 deletions

2
.gitignore vendored
View File

@ -3,4 +3,6 @@ node_modules
dist
dist-ssr
*.local
pnpm-lock.yaml
.vscode
.idea

View File

@ -1,9 +1,9 @@
import { ChartList } from '@/packages/components/Charts/index'
import { DecorateList } from '@/packages/components/Decorates/index'
import { InformationList } from '@/packages/components/Informations/index'
import { TableList } from '@/packages/components/Tables/index'
import { PhotoList } from '@/packages/components/Photos/index'
import { IconList } from '@/packages/components/Icons/index'
import {ChartList} from '@/packages/components/Charts/index'
import {DecorateList} from '@/packages/components/Decorates/index'
import {InformationList} from '@/packages/components/Informations/index'
import {TableList} from '@/packages/components/Tables/index'
import {PhotoList} from '@/packages/components/Photos/index'
import {IconList} from '@/packages/components/Icons/index'
import { PackagesCategoryEnum, PackagesType, ConfigType, FetchComFlagType } from '@/packages/index.d'
const configModules: Record<string, { default: string }> = import.meta.glob('./components/**/config.vue', {
@ -26,6 +26,16 @@ export let packagesList: PackagesType = {
[PackagesCategoryEnum.ICONS]: IconList
}
// 组件缓存, 可以大幅度提升组件加载速度
const componentCacheMap = new Map<string, any>()
const loadConfig = (packageName: string, categoryName: string, keyName: string) => {
const key = packageName + categoryName + keyName
if (!componentCacheMap.has(key)) {
componentCacheMap.set(key, import(`./components/${packageName}/${categoryName}/${keyName}/config.ts`))
}
return componentCacheMap.get(key)
}
/**
* *
* @param targetData
@ -35,10 +45,10 @@ export const createComponent = async (targetData: ConfigType) => {
// redirectComponent 是给图片组件库和图标组件库使用的
if (redirectComponent) {
const [packageName, categoryName, keyName] = redirectComponent.split('/')
const redirectChart = await import(`./components/${packageName}/${categoryName}/${keyName}/config.ts`)
const redirectChart = await loadConfig(packageName, categoryName, keyName)
return new redirectChart.default()
}
const chart = await import(`./components/${targetData.package}/${category}/${key}/config.ts`)
const chart = await loadConfig(targetData.package, category, key)
return new chart.default()
}
@ -62,7 +72,7 @@ const fetchComponent = (chartName: string, flag: FetchComFlagType) => {
* @param {ConfigType} dropData
*/
export const fetchChartComponent = (dropData: ConfigType) => {
const { key } = dropData
const {key} = dropData
return fetchComponent(key, FetchComFlagType.VIEW)?.default
}
@ -71,7 +81,7 @@ export const fetchChartComponent = (dropData: ConfigType) => {
* @param {ConfigType} dropData
*/
export const fetchConfigComponent = (dropData: ConfigType) => {
const { key } = dropData
const {key} = dropData
return fetchComponent(key, FetchComFlagType.CONFIG)?.default
}
@ -84,7 +94,10 @@ export const fetchImages = async (targetData?: ConfigType) => {
// 正则判断图片是否为 url是则直接返回该 url
if (/^(http|https):\/\/([\w.]+\/?)\S*/.test(targetData.image)) return targetData.image
// 新数据动态处理
const { image, package: targetDataPackage } = targetData
const {
image,
package: targetDataPackage
} = targetData
// 兼容旧数据
if (image.includes('@') || image.includes('base64')) return image

View File

@ -196,9 +196,7 @@ export const useSync = () => {
chartHistoryStore.clearForwardStack()
}
}
} else {
// 非组件(顺便排除脏数据)
if (key !== 'editCanvasConfig' && key !== 'requestGlobalConfig') return
} else if (key === ChartEditStoreEnum.EDIT_CANVAS_CONFIG || key === ChartEditStoreEnum.REQUEST_GLOBAL_CONFIG) {
componentMerge(chartEditStore[key], projectData[key], true)
}
}