perf: store setters cache as Set instead of Array (#18251)

---------

Co-authored-by: Simon H <5968653+dummdidumm@users.noreply.github.com>
pull/18703/head
Mathias Picker 3 weeks ago committed by GitHub
parent b20b2ee85e
commit fdb3aa8ba8
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -0,0 +1,5 @@
---
'svelte': patch
---
perf: store setters cache as `Set` instead of `Array`

@ -201,7 +201,7 @@ export function set_attribute(element, attribute, value, skip_warning) {
if (value == null) { if (value == null) {
element.removeAttribute(attribute); element.removeAttribute(attribute);
} else if (typeof value !== 'string' && get_setters(element).includes(attribute)) { } else if (typeof value !== 'string' && get_setters(element).has(attribute)) {
// @ts-ignore // @ts-ignore
element[attribute] = value; element[attribute] = value;
} else { } else {
@ -252,7 +252,7 @@ export function set_custom_element_data(node, prop, value) {
// customElements may not be available in browser extension contexts // customElements may not be available in browser extension contexts
!customElements || !customElements ||
customElements.get(node.getAttribute('is') || node.nodeName.toLowerCase()) customElements.get(node.getAttribute('is') || node.nodeName.toLowerCase())
? get_setters(node).includes(prop) ? get_setters(node).has(prop)
: value && typeof value === 'object') : value && typeof value === 'object')
) { ) {
// @ts-expect-error // @ts-expect-error
@ -473,7 +473,7 @@ function set_attributes(
} }
} else if ( } else if (
is_default || is_default ||
(setters.includes(name) && (is_custom_element || typeof value !== 'string')) ((is_custom_element || typeof value !== 'string') && setters.has(name))
) { ) {
// @ts-ignore // @ts-ignore
element[name] = value; element[name] = value;
@ -582,7 +582,7 @@ function get_attributes(element) {
); );
} }
/** @type {Map<string, string[]>} */ /** @type {Map<string, Set<string>>} */
var setters_cache = new Map(); var setters_cache = new Map();
/** @param {Element} element */ /** @param {Element} element */
@ -590,7 +590,7 @@ function get_setters(element) {
var cache_key = element.getAttribute('is') || element.nodeName; var cache_key = element.getAttribute('is') || element.nodeName;
var setters = setters_cache.get(cache_key); var setters = setters_cache.get(cache_key);
if (setters) return setters; if (setters) return setters;
setters_cache.set(cache_key, (setters = [])); setters_cache.set(cache_key, (setters = new Set()));
var descriptors; var descriptors;
var proto = element; // In the case of custom elements there might be setters on the instance var proto = element; // In the case of custom elements there might be setters on the instance
@ -609,7 +609,7 @@ function get_setters(element) {
key !== 'textContent' && key !== 'textContent' &&
key !== 'innerText' key !== 'innerText'
) { ) {
setters.push(key); setters.add(key);
} }
} }

Loading…
Cancel
Save