[inula]<bugfix> 大数组合并使用 concat
This commit is contained in:
parent
4481c9f241
commit
1bb0478883
|
@ -55,6 +55,9 @@ import { getPathArr } from './utils/vNodePath';
|
||||||
import { injectUpdater } from '../external/devtools';
|
import { injectUpdater } from '../external/devtools';
|
||||||
import { popCurrentRoot, pushCurrentRoot } from './RootStack';
|
import { popCurrentRoot, pushCurrentRoot } from './RootStack';
|
||||||
|
|
||||||
|
// 使用 push 扩展语法合并数组场景下被合并数组元素的上限(经验值)
|
||||||
|
const MAX_NUM_PUSH_MERGE_ARRAY = 1000;
|
||||||
|
|
||||||
// 不可恢复错误
|
// 不可恢复错误
|
||||||
let unrecoverableErrorDuringBuild: any = null;
|
let unrecoverableErrorDuringBuild: any = null;
|
||||||
|
|
||||||
|
@ -81,7 +84,12 @@ function collectDirtyNodes(vNode: VNode, parent: VNode): void {
|
||||||
if (parent.dirtyNodes === null) {
|
if (parent.dirtyNodes === null) {
|
||||||
parent.dirtyNodes = dirtyNodes;
|
parent.dirtyNodes = dirtyNodes;
|
||||||
} else {
|
} 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;
|
dirtyNodes.length = 0;
|
||||||
}
|
}
|
||||||
vNode.dirtyNodes = null;
|
vNode.dirtyNodes = null;
|
||||||
|
|
Loading…
Reference in New Issue