From fc4ab365375128421b95b2faff1b529818963785 Mon Sep 17 00:00:00 2001 From: Hayleigh Thompson Date: Sat, 19 Aug 2023 22:51:13 +0100 Subject: :zap: Trade expensive 'instanceof' checks for fast duck typed ones in vdom diffing. --- lib/src/runtime.ffi.mjs | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) (limited to 'lib/src') diff --git a/lib/src/runtime.ffi.mjs b/lib/src/runtime.ffi.mjs index 36b6f4a..0994231 100644 --- a/lib/src/runtime.ffi.mjs +++ b/lib/src/runtime.ffi.mjs @@ -1,26 +1,21 @@ -import { element, namespaced, text } from "./lustre/element.mjs"; import { List, Empty } from "./gleam.mjs"; import { Some, None } from "../gleam_stdlib/gleam/option.mjs"; -const Element = element("").constructor; -const ElementNs = namespaced("", "").constructor; -const Text = text("").constructor; - export function morph(prev, curr, parent) { - if (curr instanceof ElementNs) + if (curr[3]) return prev?.nodeType === 1 && prev.nodeName === curr[0].toUpperCase() && prev.namespaceURI === curr[3] ? morphElement(prev, curr, curr[3], parent) : createElement(prev, curr, curr[3], parent); - if (curr instanceof Element) { + if (curr[2]) { return prev?.nodeType === 1 && prev.nodeName === curr[0].toUpperCase() ? morphElement(prev, curr, null, parent) : createElement(prev, curr, null, parent); } - if (curr instanceof Text) { + if (curr[0]) { return prev?.nodeType === 3 ? morphText(prev, curr) : createText(prev, curr); -- cgit v1.2.3