Skip to content

Commit 838035d

Browse files
authored
perf: move renderer to top-level module (#2598)
* perf: move renderer to top-level module * fix: add tsconfig so my IDE stops complaining * fix: use dependency injection pattern instead * fix: add missing header * test: fix test * test: fix test * fix: use "as const"` * fix: add comment
1 parent 2f23114 commit 838035d

34 files changed

+1300
-721
lines changed

packages/@lwc/engine-core/src/3rdparty/snabbdom/snabbdom.ts

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ Code distributed by Snabbdom as part of the Snabbdom project at
1313
https://github.com/snabbdom/snabbdom/
1414
*/
1515

16+
import { nextSibling } from '../../renderer';
1617
import { VNode, VNodes, Key } from './types';
1718

1819
function isUndef(s: any): s is undefined {
@@ -107,11 +108,7 @@ export function updateDynamicChildren(parentElm: Node, oldCh: VNodes, newCh: VNo
107108
} else if (sameVnode(oldStartVnode, newEndVnode)) {
108109
// Vnode moved right
109110
patchVnode(oldStartVnode, newEndVnode);
110-
newEndVnode.hook.move(
111-
oldStartVnode,
112-
parentElm,
113-
oldEndVnode.owner.renderer.nextSibling(oldEndVnode.elm!)
114-
);
111+
newEndVnode.hook.move(oldStartVnode, parentElm, nextSibling(oldEndVnode.elm!));
115112
oldStartVnode = oldCh[++oldStartIdx];
116113
newEndVnode = newCh[--newEndIdx];
117114
} else if (sameVnode(oldEndVnode, newStartVnode)) {

packages/@lwc/engine-core/src/framework/api.ts

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import {
2323
StringReplace,
2424
toString,
2525
} from '@lwc/shared';
26+
import { createText, createComment, createElement, isSyntheticShadowDefined } from '../renderer';
2627
import { logError, logWarn } from '../shared/logger';
2728
import { invokeEventListener } from './invoker';
2829
import { getVMBeingRendered } from './template';
@@ -82,9 +83,8 @@ const SymbolIterator: typeof Symbol.iterator = Symbol.iterator;
8283
const TextHook: Hooks<VText> = {
8384
create: (vnode) => {
8485
const { owner } = vnode;
85-
const { renderer } = owner;
8686

87-
const elm = renderer.createText(vnode.text!);
87+
const elm = createText(vnode.text!);
8888
linkNodeToShadow(elm, owner);
8989
vnode.elm = elm;
9090
},
@@ -117,9 +117,8 @@ const TextHook: Hooks<VText> = {
117117
const CommentHook: Hooks<VComment> = {
118118
create: (vnode) => {
119119
const { owner, text } = vnode;
120-
const { renderer } = owner;
121120

122-
const elm = renderer.createComment(text);
121+
const elm = createComment(text);
123122
linkNodeToShadow(elm, owner);
124123
vnode.elm = elm;
125124
},
@@ -161,10 +160,9 @@ const ElementHook: Hooks<VElement> = {
161160
owner,
162161
data: { svg },
163162
} = vnode;
164-
const { renderer } = owner;
165163

166164
const namespace = isTrue(svg) ? SVG_NAMESPACE : undefined;
167-
const elm = renderer.createElement(sel, namespace);
165+
const elm = createElement(sel, namespace);
168166

169167
linkNodeToShadow(elm, owner);
170168
fallbackElmHook(elm, vnode);
@@ -225,8 +223,7 @@ const ElementHook: Hooks<VElement> = {
225223
const CustomElementHook: Hooks<VCustomElement> = {
226224
create: (vnode) => {
227225
const { sel, owner } = vnode;
228-
const { renderer } = owner;
229-
const UpgradableConstructor = getUpgradableConstructor(sel, renderer);
226+
const UpgradableConstructor = getUpgradableConstructor(sel);
230227
/**
231228
* Note: if the upgradable constructor does not expect, or throw when we new it
232229
* with a callback as the first argument, we could implement a more advanced
@@ -307,7 +304,6 @@ const CustomElementHook: Hooks<VCustomElement> = {
307304
mode,
308305
owner,
309306
tagName: sel,
310-
renderer: owner.renderer,
311307
});
312308

313309
vnode.elm = elm as Element;
@@ -334,10 +330,10 @@ const CustomElementHook: Hooks<VCustomElement> = {
334330
};
335331

336332
function linkNodeToShadow(elm: Node, owner: VM) {
337-
const { renderer, renderMode, shadowMode } = owner;
333+
const { renderMode, shadowMode } = owner;
338334

339335
// TODO [#1164]: this should eventually be done by the polyfill directly
340-
if (renderer.isSyntheticShadowDefined) {
336+
if (isSyntheticShadowDefined) {
341337
if (shadowMode === ShadowMode.Synthetic || renderMode === RenderMode.Light) {
342338
(elm as any)[KEY__SHADOW_RESOLVER] = getRenderRoot(owner)[KEY__SHADOW_RESOLVER];
343339
}

packages/@lwc/engine-core/src/framework/base-bridge-element.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ import {
2525

2626
import { getAssociatedVM } from './vm';
2727
import { reactiveMembrane } from './membrane';
28-
import { HTMLElementConstructor } from './renderer';
28+
import { HTMLElementConstructor } from './html-element';
2929
import { HTMLElementOriginalDescriptors } from './html-properties';
3030
import { isAttributeLocked } from './attributes';
3131

0 commit comments

Comments
 (0)