From e6dfd27b3ba862b6f3cb4b9b575fa4d7112b6c4f Mon Sep 17 00:00:00 2001 From: Matt Bierner Date: Tue, 18 Oct 2022 08:46:30 -0700 Subject: [PATCH] Avoid extra spread / object copy and use `Object.entries` (#163941) This lets us avoid copying `attrs` and also skips calling `Object.keys` if `attrs` is undefined `Object.entries` is also slightly faster in this case --- src/vs/base/browser/dom.ts | 34 ++++++++++++++++------------------ 1 file changed, 16 insertions(+), 18 deletions(-) diff --git a/src/vs/base/browser/dom.ts b/src/vs/base/browser/dom.ts index bebc4a891b6..cf9a2361247 100644 --- a/src/vs/base/browser/dom.ts +++ b/src/vs/base/browser/dom.ts @@ -963,8 +963,6 @@ function _$(namespace: Namespace, description: string, attrs? throw new Error('Bad use of emmet'); } - attrs = { ...(attrs || {}) }; - const tagName = match[1] || 'div'; let result: T; @@ -981,24 +979,24 @@ function _$(namespace: Namespace, description: string, attrs? result.className = match[4].replace(/\./g, ' ').trim(); } - Object.keys(attrs).forEach(name => { - const value = attrs![name]; - - if (typeof value === 'undefined') { - return; - } - - if (/^on\w+$/.test(name)) { - (result)[name] = value; - } else if (name === 'selected') { - if (value) { - result.setAttribute(name, 'true'); + if (attrs) { + Object.entries(attrs).forEach(([name, value]) => { + if (typeof value === 'undefined') { + return; } - } else { - result.setAttribute(name, value); - } - }); + if (/^on\w+$/.test(name)) { + (result)[name] = value; + } else if (name === 'selected') { + if (value) { + result.setAttribute(name, 'true'); + } + + } else { + result.setAttribute(name, value); + } + }); + } result.append(...children);