| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144 |
- import { bench } from 'vitest'
- import type { ComputedRef } from '../src'
- import { computed, reactive } from '../dist/reactivity.esm-browser.prod'
- function createMap(obj: Record<string, any>) {
- const map = new Map()
- for (const key in obj) {
- if (obj.hasOwnProperty(key)) {
- map.set(key, obj[key])
- }
- }
- return map
- }
- bench('create reactive map', () => {
- reactive(createMap({ a: 1 }))
- })
- {
- let i = 0
- const r = reactive(createMap({ a: 1 }))
- bench('write reactive map property', () => {
- r.set('a', i++)
- })
- }
- {
- const r = reactive(createMap({ a: 1 }))
- computed(() => {
- return r.get('a') * 2
- })
- let i = 0
- bench("write reactive map, don't read computed (never invoked)", () => {
- r.set('a', i++)
- })
- }
- {
- const r = reactive(createMap({ a: 1 }))
- const c = computed(() => {
- return r.get('a') * 2
- })
- c.value
- let i = 0
- bench("write reactive map, don't read computed (invoked)", () => {
- r.set('a', i++)
- })
- }
- {
- const r = reactive(createMap({ a: 1 }))
- const c = computed(() => {
- return r.get('a') * 2
- })
- let i = 0
- bench('write reactive map, read computed', () => {
- r.set('a', i++)
- c.value
- })
- }
- {
- const _m = new Map()
- for (let i = 0; i < 10000; i++) {
- _m.set(i, i)
- }
- const r = reactive(_m)
- const c = computed(() => {
- let total = 0
- r.forEach((value, key) => {
- total += value
- })
- return total
- })
- bench("write reactive map (10'000 items), read computed", () => {
- r.set(5000, r.get(5000) + 1)
- c.value
- })
- }
- {
- const r = reactive(createMap({ a: 1 }))
- const computeds: any[] = []
- for (let i = 0, n = 1000; i < n; i++) {
- const c = computed(() => {
- return r.get('a') * 2
- })
- computeds.push(c)
- }
- let i = 0
- bench("write reactive map, don't read 1000 computeds (never invoked)", () => {
- r.set('a', i++)
- })
- }
- {
- const r = reactive(createMap({ a: 1 }))
- const computeds: any[] = []
- for (let i = 0, n = 1000; i < n; i++) {
- const c = computed(() => {
- return r.get('a') * 2
- })
- c.value
- computeds.push(c)
- }
- let i = 0
- bench("write reactive map, don't read 1000 computeds (invoked)", () => {
- r.set('a', i++)
- })
- }
- {
- const r = reactive(createMap({ a: 1 }))
- const computeds: ComputedRef<number>[] = []
- for (let i = 0, n = 1000; i < n; i++) {
- const c = computed(() => {
- return r.get('a') * 2
- })
- computeds.push(c)
- }
- let i = 0
- bench('write reactive map, read 1000 computeds', () => {
- r.set('a', i++)
- computeds.forEach(c => c.value)
- })
- }
- {
- const reactives: Map<any, any>[] = []
- for (let i = 0, n = 1000; i < n; i++) {
- reactives.push(reactive(createMap({ a: i })))
- }
- const c = computed(() => {
- let total = 0
- reactives.forEach(r => (total += r.get('a')))
- return total
- })
- let i = 0
- const n = reactives.length
- bench('1000 reactive maps, 1 computed', () => {
- reactives[i++ % n].set('a', reactives[i++ % n].get('a') + 1)
- c.value
- })
- }
|