From 1b977e96044c11bf897b22a92986d4ecdb65112b Mon Sep 17 00:00:00 2001 From: Alex Kanunnikov Date: Tue, 5 Dec 2023 12:37:29 +0300 Subject: [PATCH] [perf | size] simplify array iterations --- .../runtime/lib/compiled/expressions/concat.ts | 16 ++++++++-------- .../runtime/lib/compiled/opcodes/component.ts | 7 +------ .../@glimmer/runtime/lib/compiled/opcodes/dom.ts | 7 +++---- packages/@glimmer/runtime/lib/scope.ts | 12 ++---------- 4 files changed, 14 insertions(+), 28 deletions(-) diff --git a/packages/@glimmer/runtime/lib/compiled/expressions/concat.ts b/packages/@glimmer/runtime/lib/compiled/expressions/concat.ts index aa8b06ec5..6d50ba0e2 100644 --- a/packages/@glimmer/runtime/lib/compiled/expressions/concat.ts +++ b/packages/@glimmer/runtime/lib/compiled/expressions/concat.ts @@ -1,17 +1,15 @@ -import type { Dict, Maybe } from '@glimmer/interfaces'; import type { Reference } from '@glimmer/reference'; import { createComputeRef, valueForRef } from '@glimmer/reference'; -import { enumerate } from '@glimmer/util'; export function createConcatRef(partsRefs: Reference[]) { return createComputeRef(() => { - let parts = new Array(); + const parts: string[] = []; - for (const [i, ref] of enumerate(partsRefs)) { - let value = valueForRef(ref) as Maybe; + for (const ref of partsRefs) { + const value = valueForRef(ref); if (value !== null && value !== undefined) { - parts[i] = castToString(value); + parts.push(castToString(value)); } } @@ -23,8 +21,10 @@ export function createConcatRef(partsRefs: Reference[]) { }); } -function castToString(value: Dict) { - if (typeof value.toString !== 'function') { +function castToString(value: string | object) { + if (typeof value === 'string') { + return value; + } else if (typeof value.toString !== 'function') { return ''; } diff --git a/packages/@glimmer/runtime/lib/compiled/opcodes/component.ts b/packages/@glimmer/runtime/lib/compiled/opcodes/component.ts index 597e4cb01..36749bf03 100644 --- a/packages/@glimmer/runtime/lib/compiled/opcodes/component.ts +++ b/packages/@glimmer/runtime/lib/compiled/opcodes/component.ts @@ -534,12 +534,7 @@ function mergeClasses(classes: (string | Reference)[]): string | Reference)[]): classes is string[] { - for (let i = 0; i < classes.length; i++) { - if (typeof classes[i] !== 'string') { - return false; - } - } - return true; + return classes.every((c) => typeof c === 'string'); } function setDeferredAttr( diff --git a/packages/@glimmer/runtime/lib/compiled/opcodes/dom.ts b/packages/@glimmer/runtime/lib/compiled/opcodes/dom.ts index 1b60adaa4..74f94016f 100644 --- a/packages/@glimmer/runtime/lib/compiled/opcodes/dom.ts +++ b/packages/@glimmer/runtime/lib/compiled/opcodes/dom.ts @@ -91,13 +91,12 @@ APPEND_OPCODES.add(Op.FlushElement, (vm) => { APPEND_OPCODES.add(Op.CloseElement, (vm) => { let modifiers = vm.elements().closeElement(); - if (modifiers) { + if (modifiers !== null) { modifiers.forEach((modifier) => { vm.env.scheduleInstallModifier(modifier); - let { manager, state } = modifier; - let d = manager.getDestroyable(state); + const d = modifier.manager.getDestroyable(modifier.state); - if (d) { + if (d !== null) { vm.associateDestroyable(d); } }); diff --git a/packages/@glimmer/runtime/lib/scope.ts b/packages/@glimmer/runtime/lib/scope.ts index b470360bb..44226d4e8 100644 --- a/packages/@glimmer/runtime/lib/scope.ts +++ b/packages/@glimmer/runtime/lib/scope.ts @@ -43,21 +43,13 @@ export function isScopeReference(s: ScopeSlot): s is Reference { export class PartialScopeImpl implements PartialScope { static root(self: Reference, size = 0, owner: Owner): PartialScope { - let refs: Reference[] = new Array(size + 1); - - for (let i = 0; i <= size; i++) { - refs[i] = UNDEFINED_REFERENCE; - } + let refs: Reference[] = new Array(size + 1).fill(UNDEFINED_REFERENCE); return new PartialScopeImpl(refs, owner, null, null, null).init({ self }); } static sized(size = 0, owner: Owner): Scope { - let refs: Reference[] = new Array(size + 1); - - for (let i = 0; i <= size; i++) { - refs[i] = UNDEFINED_REFERENCE; - } + let refs: Reference[] = new Array(size + 1).fill(UNDEFINED_REFERENCE); return new PartialScopeImpl(refs, owner, null, null, null); }