unrollBuffer.bench.ts 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. import { bench, describe } from 'vitest'
  2. import { type SSRBuffer, createBuffer } from '../src/render'
  3. import { unrollBuffer } from '../src/renderToString'
  4. function createSyncBuffer(levels: number, itemsPerLevel: number): SSRBuffer {
  5. const buffer = createBuffer()
  6. function addItems(buf: ReturnType<typeof createBuffer>, level: number) {
  7. for (let i = 1; i <= levels * itemsPerLevel; i++) {
  8. buf.push(`sync${level}.${i}`)
  9. }
  10. if (level < levels) {
  11. const subBuffer = createBuffer()
  12. addItems(subBuffer, level + 1)
  13. buf.push(subBuffer.getBuffer())
  14. }
  15. }
  16. addItems(buffer, 1)
  17. return buffer.getBuffer()
  18. }
  19. function createMixedBuffer(levels: number, itemsPerLevel: number): SSRBuffer {
  20. const buffer = createBuffer()
  21. function addItems(buf: ReturnType<typeof createBuffer>, level: number) {
  22. for (let i = 1; i <= levels * itemsPerLevel; i++) {
  23. if (i % 3 === 0) {
  24. // @ts-expect-error testing...
  25. buf.push(Promise.resolve(`async${level}.${i}`))
  26. } else {
  27. buf.push(`sync${level}.${i}`)
  28. }
  29. }
  30. if (level < levels) {
  31. const subBuffer = createBuffer()
  32. addItems(subBuffer, level + 1)
  33. buf.push(subBuffer.getBuffer())
  34. }
  35. }
  36. addItems(buffer, 1)
  37. return buffer.getBuffer()
  38. }
  39. describe('unrollBuffer', () => {
  40. let syncBuffer = createBuffer().getBuffer()
  41. let mixedBuffer = createBuffer().getBuffer()
  42. bench(
  43. 'sync',
  44. () => {
  45. return unrollBuffer(syncBuffer) as any
  46. },
  47. {
  48. setup() {
  49. syncBuffer = createSyncBuffer(5, 3)
  50. },
  51. },
  52. )
  53. bench(
  54. 'mixed',
  55. () => {
  56. return unrollBuffer(mixedBuffer) as any
  57. },
  58. {
  59. setup() {
  60. mixedBuffer = createMixedBuffer(5, 3)
  61. },
  62. },
  63. )
  64. })