From: Vlad Date: Mon, 15 Jul 2024 14:31:27 +0000 (+1100) Subject: perf(server-render): avoid unnecessary checks in `createBuffer` (#11364) X-Git-Tag: v3.4.32~14 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=fc205bf4decde5ce0f4a61394ffa3914b502c287;p=thirdparty%2Fvuejs%2Fcore.git perf(server-render): avoid unnecessary checks in `createBuffer` (#11364) --- diff --git a/packages/server-renderer/__tests__/createBuffer.bench.ts b/packages/server-renderer/__tests__/createBuffer.bench.ts new file mode 100644 index 0000000000..fff20f927f --- /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() + }, + }, + ) +}) diff --git a/packages/server-renderer/src/render.ts b/packages/server-renderer/src/render.ts index 7e274c3b98..ab84dd212f 100644 --- a/packages/server-renderer/src/render.ts +++ b/packages/server-renderer/src/render.ts @@ -73,9 +73,9 @@ export function createBuffer() { const isStringItem = isString(item) if (appendable && isStringItem) { buffer[buffer.length - 1] += item as string - } else { - buffer.push(item) + return } + buffer.push(item) appendable = isStringItem if (isPromise(item) || (isArray(item) && item.hasAsync)) { // promise, or child buffer with async, mark as async.