Parece que Stripe JavaScript está agregando casi 1/2 segundo de bloqueo de hilo principal a mi sitio. De acuerdo con la documentación de Stripe , está totalmente bien async o defer su JS. De hecho, dicen que si lo incluyes a través npm lo hace automáticamente. Esto es probablemente lo que habría hecho si estuviera implementando esto por mi cuenta, pero estoy usando Stripe a través de un complemento de WordPress que, independientemente de lo que estén haciendo, está incorporando Stripe JS a través de un iFrame, y no configurando async :
<iframe name="__privateStripeController5481" ...> <!DOCTYPE html> <html lang="en"> <head> <script src="https://js.stripe.com/v3/fingerprinted/js/shared-0950781806f615c0693abdcbbb4bfc19.js"></script> <script src="https://js.stripe.com/v3/fingerprinted/js/controller-842819e3871bc12ac5b51fa16b375c03.js"></script> </head> <body></body> </html> </iframe>Estoy pensando que debería haber alguna forma de solucionar esto, sin esperar a que los desarrolladores de complementos lo hagan por su cuenta. Mi idea es hacer algo como:
document.getElementById('ifrm').onload = function() { const ifrm = document.getElementById('ifrm'); const scripts = ifrm.contentDocument? ifrm.contentDocument: ifrm.contentWindow.document.getElementsByTagName('script'); for (const element of scripts) { element.hasAttribute('async') ? {} : element.setAttribute('async', ''); } }; Pero onload , estoy bastante seguro, será demasiado tarde. ¿Hay alguna manera de lograr esta modificación de modo que suceda lo suficientemente pronto como para que los scripts en el iFrame terminen sin bloquear?
No, no puede cambiar la forma en que se procesa la etiqueta de secuencia de script después de que el navegador la haya leído del HTML y haya comenzado a procesarla. (Sobre todo porque su página y el iframe se ejecutan en el mismo subproceso principal de la interfaz de usuario: el mismo subproceso está bloqueado por esa etiqueta de secuencia de script ).
Tendrás que modificar el código del plugin. (Y tal vez hacer una PR para que los mantenedores del proyecto del complemento lo adopten).