From 09380f35e58174109f380bf2485a9bfe125d12dc Mon Sep 17 00:00:00 2001 From: Negezor Date: Mon, 15 Jul 2024 18:03:02 +1100 Subject: [PATCH 1/3] test(server-render): add createBuffer benchmark --- .../__tests__/createBuffer.bench.ts | 65 +++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 packages/server-renderer/__tests__/createBuffer.bench.ts diff --git a/packages/server-renderer/__tests__/createBuffer.bench.ts b/packages/server-renderer/__tests__/createBuffer.bench.ts new file mode 100644 index 00000000000..fff20f927fb --- /dev/null +++ b/packages/server-renderer/__tests__/createBuffer.bench.ts @@ -0,0 +1,65 @@ +import { bench, describe } from 'vitest' + +import { createBuffer } from '../src/render' + +describe('createBuffer', () => { + let stringBuffer = createBuffer() + + bench( + 'string only', + () => { + for (let i = 0; i < 10; i += 1) { + stringBuffer.push('hello') + } + }, + { + setup() { + stringBuffer = createBuffer() + }, + }, + ) + + let stringNestedBuffer = createBuffer() + + bench( + 'string with nested', + () => { + for (let i = 0; i < 10; i += 1) { + if (i % 3 === 0) { + stringNestedBuffer.push('hello') + } else { + const buffer = createBuffer() + buffer.push('hello') + stringNestedBuffer.push(buffer.getBuffer()) + } + } + }, + { + setup() { + stringNestedBuffer = createBuffer() + }, + }, + ) + + bench( + 'string with nested async', + () => { + for (let i = 0; i < 10; i += 1) { + if (i % 3 === 0) { + const buffer = createBuffer() + buffer.push('hello') + stringNestedBuffer.push(Promise.resolve(buffer.getBuffer())) + } else { + const buffer = createBuffer() + buffer.push('hello') + stringNestedBuffer.push(buffer.getBuffer()) + } + } + }, + { + setup() { + stringNestedBuffer = createBuffer() + }, + }, + ) +}) From 50220006d33c32e125aa740f74d029858560e05b Mon Sep 17 00:00:00 2001 From: Negezor Date: Mon, 15 Jul 2024 23:42:55 +1100 Subject: [PATCH 2/3] perf(server-render): avoid unnecessary checks in createBuffer --- packages/server-renderer/src/render.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/server-renderer/src/render.ts b/packages/server-renderer/src/render.ts index 7e274c3b981..2b28431385c 100644 --- a/packages/server-renderer/src/render.ts +++ b/packages/server-renderer/src/render.ts @@ -73,6 +73,7 @@ export function createBuffer() { const isStringItem = isString(item) if (appendable && isStringItem) { buffer[buffer.length - 1] += item as string + return } else { buffer.push(item) } From 650cb7ce4dafe5ed45ac3ac88592401668fdfb10 Mon Sep 17 00:00:00 2001 From: Negezor Date: Tue, 16 Jul 2024 01:08:02 +1100 Subject: [PATCH 3/3] chore(server-render): remove else branch in createBuffer --- packages/server-renderer/src/render.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/server-renderer/src/render.ts b/packages/server-renderer/src/render.ts index 2b28431385c..ab84dd212f0 100644 --- a/packages/server-renderer/src/render.ts +++ b/packages/server-renderer/src/render.ts @@ -74,9 +74,8 @@ export function createBuffer() { if (appendable && isStringItem) { buffer[buffer.length - 1] += item as string return - } else { - buffer.push(item) } + buffer.push(item) appendable = isStringItem if (isPromise(item) || (isArray(item) && item.hasAsync)) { // promise, or child buffer with async, mark as async.