mirror of https://github.com/vuejs/core.git
test: add test case for #11928
This commit is contained in:
parent
e2c19c20cf
commit
60c2029f77
|
@ -1057,4 +1057,54 @@ describe('reactivity/computed', () => {
|
||||||
obj.flag = 1
|
obj.flag = 1
|
||||||
expect(foo).toBe(2)
|
expect(foo).toBe(2)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
// #11928
|
||||||
|
test('should not lead to exponential perf cost with deeply chained computed', () => {
|
||||||
|
const start = {
|
||||||
|
prop1: shallowRef(1),
|
||||||
|
prop2: shallowRef(2),
|
||||||
|
prop3: shallowRef(3),
|
||||||
|
prop4: shallowRef(4),
|
||||||
|
}
|
||||||
|
|
||||||
|
let layer = start
|
||||||
|
|
||||||
|
const LAYERS = 1000
|
||||||
|
|
||||||
|
for (let i = LAYERS; i > 0; i--) {
|
||||||
|
const m = layer
|
||||||
|
const s = {
|
||||||
|
prop1: computed(() => m.prop2.value),
|
||||||
|
prop2: computed(() => m.prop1.value - m.prop3.value),
|
||||||
|
prop3: computed(() => m.prop2.value + m.prop4.value),
|
||||||
|
prop4: computed(() => m.prop3.value),
|
||||||
|
}
|
||||||
|
effect(() => s.prop1.value)
|
||||||
|
effect(() => s.prop2.value)
|
||||||
|
effect(() => s.prop3.value)
|
||||||
|
effect(() => s.prop4.value)
|
||||||
|
|
||||||
|
s.prop1.value
|
||||||
|
s.prop2.value
|
||||||
|
s.prop3.value
|
||||||
|
s.prop4.value
|
||||||
|
|
||||||
|
layer = s
|
||||||
|
}
|
||||||
|
|
||||||
|
const t = performance.now()
|
||||||
|
start.prop1.value = 4
|
||||||
|
start.prop2.value = 3
|
||||||
|
start.prop3.value = 2
|
||||||
|
start.prop4.value = 1
|
||||||
|
expect(performance.now() - t).toBeLessThan(process.env.CI ? 100 : 30)
|
||||||
|
|
||||||
|
const end = layer
|
||||||
|
expect([
|
||||||
|
end.prop1.value,
|
||||||
|
end.prop2.value,
|
||||||
|
end.prop3.value,
|
||||||
|
end.prop4.value,
|
||||||
|
]).toMatchObject([-2, -4, 2, 3])
|
||||||
|
})
|
||||||
})
|
})
|
||||||
|
|
Loading…
Reference in New Issue