Skip to content

Commit 2d548bd

Browse files
committed
perf: move renderer to top-level module
1 parent caa3c72 commit 2d548bd

38 files changed

+884
-691
lines changed

packages/@lwc/engine-core/package.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,9 @@
3030
"devDependencies": {
3131
"observable-membrane": "2.0.0"
3232
},
33+
"peerDependencies": {
34+
"@lwc/renderer-abstract": "2.7.0"
35+
},
3336
"publishConfig": {
3437
"access": "public"
3538
},

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 '@lwc/renderer-abstract';
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: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,12 @@
44
* SPDX-License-Identifier: MIT
55
* For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT
66
*/
7+
import {
8+
createText,
9+
createComment,
10+
createElement,
11+
isSyntheticShadowDefined,
12+
} from '@lwc/renderer-abstract';
713
import {
814
ArrayPush,
915
assert,
@@ -82,9 +88,8 @@ const SymbolIterator: typeof Symbol.iterator = Symbol.iterator;
8288
const TextHook: Hooks<VText> = {
8389
create: (vnode) => {
8490
const { owner } = vnode;
85-
const { renderer } = owner;
8691

87-
const elm = renderer.createText(vnode.text!);
92+
const elm = createText(vnode.text!);
8893
linkNodeToShadow(elm, owner);
8994
vnode.elm = elm;
9095
},
@@ -117,9 +122,8 @@ const TextHook: Hooks<VText> = {
117122
const CommentHook: Hooks<VComment> = {
118123
create: (vnode) => {
119124
const { owner, text } = vnode;
120-
const { renderer } = owner;
121125

122-
const elm = renderer.createComment(text);
126+
const elm = createComment(text);
123127
linkNodeToShadow(elm, owner);
124128
vnode.elm = elm;
125129
},
@@ -161,10 +165,9 @@ const ElementHook: Hooks<VElement> = {
161165
owner,
162166
data: { svg },
163167
} = vnode;
164-
const { renderer } = owner;
165168

166169
const namespace = isTrue(svg) ? SVG_NAMESPACE : undefined;
167-
const elm = renderer.createElement(sel, namespace);
170+
const elm = createElement(sel, namespace);
168171

169172
linkNodeToShadow(elm, owner);
170173
fallbackElmHook(elm, vnode);
@@ -225,8 +228,7 @@ const ElementHook: Hooks<VElement> = {
225228
const CustomElementHook: Hooks<VCustomElement> = {
226229
create: (vnode) => {
227230
const { sel, owner } = vnode;
228-
const { renderer } = owner;
229-
const UpgradableConstructor = getUpgradableConstructor(sel, renderer);
231+
const UpgradableConstructor = getUpgradableConstructor(sel);
230232
/**
231233
* Note: if the upgradable constructor does not expect, or throw when we new it
232234
* with a callback as the first argument, we could implement a more advanced
@@ -307,7 +309,6 @@ const CustomElementHook: Hooks<VCustomElement> = {
307309
mode,
308310
owner,
309311
tagName: sel,
310-
renderer: owner.renderer,
311312
});
312313

313314
vnode.elm = elm as Element;
@@ -334,10 +335,10 @@ const CustomElementHook: Hooks<VCustomElement> = {
334335
};
335336

336337
function linkNodeToShadow(elm: Node, owner: VM) {
337-
const { renderer, renderMode, shadowMode } = owner;
338+
const { renderMode, shadowMode } = owner;
338339

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

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)