fix: 同步时出现特殊key时, 加载进度始终显示, 且无法继续解析后续内容

perf: 大量使用相同组件时, 提升createComponent性能
This commit is contained in:
ly-chn 2023-08-17 09:38:30 +08:00
parent 95b50c7d76
commit 51ba52ae45
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

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