| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202 |
- import { bench, describe } from 'vitest'
- import type { ComputedRef, Ref } from '../src'
- import { computed, effect, ref } from '../dist/reactivity.esm-browser.prod'
- declare module '../dist/reactivity.esm-browser.prod' {
- function computed(...args: any[]): any
- }
- describe('computed', () => {
- bench('create computed', () => {
- computed(() => 100)
- })
- {
- const v = ref(100)
- computed(() => v.value * 2)
- let i = 0
- bench("write ref, don't read computed (without effect)", () => {
- v.value = i++
- })
- }
- {
- const v = ref(100)
- const c = computed(() => {
- return v.value * 2
- })
- effect(() => c.value)
- let i = 0
- bench("write ref, don't read computed (with effect)", () => {
- v.value = i++
- })
- }
- {
- const v = ref(100)
- const c = computed(() => {
- return v.value * 2
- })
- let i = 0
- bench('write ref, read computed (without effect)', () => {
- v.value = i++
- c.value
- })
- }
- {
- const v = ref(100)
- const c = computed(() => {
- return v.value * 2
- })
- effect(() => c.value)
- let i = 0
- bench('write ref, read computed (with effect)', () => {
- v.value = i++
- c.value
- })
- }
- {
- const v = ref(100)
- const computeds: ComputedRef<number>[] = []
- for (let i = 0, n = 1000; i < n; i++) {
- const c = computed(() => {
- return v.value * 2
- })
- computeds.push(c)
- }
- let i = 0
- bench("write ref, don't read 1000 computeds (without effect)", () => {
- v.value = i++
- })
- }
- {
- const v = ref(100)
- const computeds: ComputedRef<number>[] = []
- for (let i = 0, n = 1000; i < n; i++) {
- const c = computed(() => {
- return v.value * 2
- })
- effect(() => c.value)
- computeds.push(c)
- }
- let i = 0
- bench("write ref, don't read 1000 computeds (with multiple effects)", () => {
- v.value = i++
- })
- }
- {
- const v = ref(100)
- const computeds: ComputedRef<number>[] = []
- for (let i = 0, n = 1000; i < n; i++) {
- const c = computed(() => {
- return v.value * 2
- })
- computeds.push(c)
- }
- effect(() => {
- for (let i = 0; i < 1000; i++) {
- computeds[i].value
- }
- })
- let i = 0
- bench("write ref, don't read 1000 computeds (with single effect)", () => {
- v.value = i++
- })
- }
- {
- const v = ref(100)
- const computeds: ComputedRef<number>[] = []
- for (let i = 0, n = 1000; i < n; i++) {
- const c = computed(() => {
- return v.value * 2
- })
- computeds.push(c)
- }
- let i = 0
- bench('write ref, read 1000 computeds (no effect)', () => {
- v.value = i++
- computeds.forEach(c => c.value)
- })
- }
- {
- const v = ref(100)
- const computeds: ComputedRef<number>[] = []
- for (let i = 0, n = 1000; i < n; i++) {
- const c = computed(() => {
- return v.value * 2
- })
- effect(() => c.value)
- computeds.push(c)
- }
- let i = 0
- bench('write ref, read 1000 computeds (with multiple effects)', () => {
- v.value = i++
- computeds.forEach(c => c.value)
- })
- }
- {
- const v = ref(100)
- const computeds: ComputedRef<number>[] = []
- for (let i = 0, n = 1000; i < n; i++) {
- const c = computed(() => {
- return v.value * 2
- })
- effect(() => c.value)
- computeds.push(c)
- }
- effect(() => {
- for (let i = 0; i < 1000; i++) {
- computeds[i].value
- }
- })
- let i = 0
- bench('write ref, read 1000 computeds (with single effect)', () => {
- v.value = i++
- computeds.forEach(c => c.value)
- })
- }
- {
- const refs: Ref<number>[] = []
- for (let i = 0, n = 1000; i < n; i++) {
- refs.push(ref(i))
- }
- const c = computed(() => {
- let total = 0
- refs.forEach(ref => (total += ref.value))
- return total
- })
- let i = 0
- const n = refs.length
- bench('1000 refs, read 1 computed (without effect)', () => {
- refs[i++ % n].value++
- c.value
- })
- }
- {
- const refs: Ref<number>[] = []
- for (let i = 0, n = 1000; i < n; i++) {
- refs.push(ref(i))
- }
- const c = computed(() => {
- let total = 0
- refs.forEach(ref => (total += ref.value))
- return total
- })
- effect(() => c.value)
- let i = 0
- const n = refs.length
- bench('1000 refs, read 1 computed (with effect)', () => {
- refs[i++ % n].value++
- c.value
- })
- }
- })
|