Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[core] use when defined insted of mutarion observer #18

Open
redfox-mx opened this issue Aug 23, 2024 · 1 comment
Open

[core] use when defined insted of mutarion observer #18

redfox-mx opened this issue Aug 23, 2024 · 1 comment
Assignees
Labels
enhancement New feature or request

Comments

@redfox-mx
Copy link

redfox-mx commented Aug 23, 2024

Hola equipo, yo de nuevo n.n espero se encuentren muy bien.

Al revisar un poco el código encontré algo que me pareció interesante

if (this.adapter.isUnresolved(node)) {
var observer = new MutationObserver(checkComponentResolution);
var config = { attributes: false, childList: true, characterData: true };
observer.observe(node, config);
_idleCallback(checkDispatchActionType);
} else {
checkDispatchActionType();
}

Entiendo que se usa el mutation observer para identificar cuando un Custom Element ya fue registrado o en caso contrario lanzar un delay para añadir los canales al elemento.

Esto hace que líneas más arriba se tenga que añadir una serie de timeouts y reqiestIdlCalback para preguntar después ejecutar las acciones.

const _idleCallback = (/** @type IdleRequestCallback */ fn) => {
setTimeout(function () {
if ('requestIdleCallback' in window) {
window.requestIdleCallback(fn);
} else {
setTimeout(fn, 1);
}
}, 100);
};

Para esto creo que sería mejor usar la propiedad whenDefined, la cual regresa una promesa, además de actualizar un poco la validación de si un elemento es un custom element

#17

Esto permite eliminar algunas líneas, el uso de MO y delegar la detección a la api de los web components, al mismo tiempo que se contemplan casos donde por alguna razón la escucha se de en un elemento html estandar (ya que algunas veces esto puede ser un punto de anclaje para apis de terceros)

Pd: se que no se reciben pr, por eso la convierto la pr a draft, de tal forma que sea más fácil explicar n.n

@julcasans
Copy link
Collaborator

Hola. Buena observación la que has hecho. Efectivamente, whenDefined es más conveniente en performance y simplicidad. La comprobación con mutation observer data de una fecha cuando la especificación web components todavía estaba en su versión 1.0 y el soporte de los navegadores era bastante pobre.
Además he visto que está soportado en las versiones de los navegadores de la baseline de Open Cells así que podemos hacer este cambio. Gracias por tu aportación.

@julcasans julcasans self-assigned this Aug 28, 2024
@julcasans julcasans added the enhancement New feature or request label Aug 28, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

2 participants