computed.bench.ts 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. import { bench, describe } from 'vitest'
  2. import { type ComputedRef, type Ref, computed, ref } from '../src/index'
  3. describe('computed', () => {
  4. bench('create computed', () => {
  5. computed(() => 100)
  6. })
  7. {
  8. let i = 0
  9. const o = ref(100)
  10. bench('write independent ref dep', () => {
  11. o.value = i++
  12. })
  13. }
  14. {
  15. const v = ref(100)
  16. computed(() => v.value * 2)
  17. let i = 0
  18. bench("write ref, don't read computed (never invoked)", () => {
  19. v.value = i++
  20. })
  21. }
  22. {
  23. const v = ref(100)
  24. computed(() => {
  25. return v.value * 2
  26. })
  27. let i = 0
  28. bench("write ref, don't read computed (never invoked)", () => {
  29. v.value = i++
  30. })
  31. }
  32. {
  33. const v = ref(100)
  34. const c = computed(() => {
  35. return v.value * 2
  36. })
  37. c.value
  38. let i = 0
  39. bench("write ref, don't read computed (invoked)", () => {
  40. v.value = i++
  41. })
  42. }
  43. {
  44. const v = ref(100)
  45. const c = computed(() => {
  46. return v.value * 2
  47. })
  48. let i = 0
  49. bench('write ref, read computed', () => {
  50. v.value = i++
  51. c.value
  52. })
  53. }
  54. {
  55. const v = ref(100)
  56. const computeds = []
  57. for (let i = 0, n = 1000; i < n; i++) {
  58. const c = computed(() => {
  59. return v.value * 2
  60. })
  61. computeds.push(c)
  62. }
  63. let i = 0
  64. bench("write ref, don't read 1000 computeds (never invoked)", () => {
  65. v.value = i++
  66. })
  67. }
  68. {
  69. const v = ref(100)
  70. const computeds = []
  71. for (let i = 0, n = 1000; i < n; i++) {
  72. const c = computed(() => {
  73. return v.value * 2
  74. })
  75. c.value
  76. computeds.push(c)
  77. }
  78. let i = 0
  79. bench("write ref, don't read 1000 computeds (invoked)", () => {
  80. v.value = i++
  81. })
  82. }
  83. {
  84. const v = ref(100)
  85. const computeds: ComputedRef<number>[] = []
  86. for (let i = 0, n = 1000; i < n; i++) {
  87. const c = computed(() => {
  88. return v.value * 2
  89. })
  90. c.value
  91. computeds.push(c)
  92. }
  93. let i = 0
  94. bench('write ref, read 1000 computeds', () => {
  95. v.value = i++
  96. computeds.forEach(c => c.value)
  97. })
  98. }
  99. {
  100. const refs: Ref<number>[] = []
  101. for (let i = 0, n = 1000; i < n; i++) {
  102. refs.push(ref(i))
  103. }
  104. const c = computed(() => {
  105. let total = 0
  106. refs.forEach(ref => (total += ref.value))
  107. return total
  108. })
  109. let i = 0
  110. const n = refs.length
  111. bench('1000 refs, 1 computed', () => {
  112. refs[i++ % n].value++
  113. c.value
  114. })
  115. }
  116. })