!35 [inula]<bugfix> 大数组合并使用 concat
Merge pull request !35 from 涂旭辉/master
This commit is contained in:
commit
34cde4c499
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue