]> git.ipfire.org Git - thirdparty/vuejs/core.git/commitdiff
perf(server-render): avoid unnecessary checks in `createBuffer` (#11364)
authorVlad <negezor@gmail.com>
Mon, 15 Jul 2024 14:31:27 +0000 (01:31 +1100)
committerGitHub <noreply@github.com>
Mon, 15 Jul 2024 14:31:27 +0000 (22:31 +0800)
packages/server-renderer/__tests__/createBuffer.bench.ts [new file with mode: 0644]
packages/server-renderer/src/render.ts

diff --git a/packages/server-renderer/__tests__/createBuffer.bench.ts b/packages/server-renderer/__tests__/createBuffer.bench.ts
new file mode 100644 (file)
index 0000000..fff20f9
--- /dev/null
@@ -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()
+      },
+    },
+  )
+})
index 7e274c3b98115df7d82d2d6c817ba1393efc93e3..ab84dd212f0f8183e04ff114218c2c4eec218531 100644 (file)
@@ -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.