!35 [inula]<bugfix> 大数组合并使用 concat

Merge pull request !35 from 涂旭辉/master
This commit is contained in:
涂旭辉 2023-10-12 07:58:53 +00:00 committed by Gitee
commit 34cde4c499
No known key found for this signature in database
GPG Key ID: 173E9B9CA92EEF8F
1 changed files with 9 additions and 1 deletions

View File

@ -55,6 +55,9 @@ import { getPathArr } from './utils/vNodePath';
import { injectUpdater } from '../external/devtools';
import { popCurrentRoot, pushCurrentRoot } from './RootStack';
// 使用 push 扩展语法合并数组场景下被合并数组元素的上限(经验值)
const MAX_NUM_PUSH_MERGE_ARRAY = 1000;
// 不可恢复错误
let unrecoverableErrorDuringBuild: any = null;
@ -81,7 +84,12 @@ function collectDirtyNodes(vNode: VNode, parent: VNode): void {
if (parent.dirtyNodes === null) {
parent.dirtyNodes = dirtyNodes;
} else {
parent.dirtyNodes.push(...vNode.dirtyNodes!);
// 超过上限继续使用 push 方法合并数组将导致性能劣化/调用栈溢出
if (dirtyNodes.length > MAX_NUM_PUSH_MERGE_ARRAY) {
parent.dirtyNodes = parent.dirtyNodes.concat(dirtyNodes);
} else {
parent.dirtyNodes.push(...dirtyNodes);
}
dirtyNodes.length = 0;
}
vNode.dirtyNodes = null;