Speculative Loading

Descripción

Este plugin añade compatibilidad con la API de reglas de especulación, que permite definir reglas por las que se haga precarga o prelectura de ciertas URLs.

Ver el borrador de especificaciones de reglas de especulación WICG.

Por defecto, el plugin está configurado para precargar URLs de la parte visible de WordPress cuando el usuario interactúa con un enlace relevante. Esto se puede personalizar a través de la sección «Carga especulativa» en la pantalla de administración Ajustes > Lectura.

Se puede utilizar un filtro para excluir determinadas rutas URL de la precarga y la prelectura (ve a la sección FAQ). Alternativamente, puedes añadir la clase CSS no-prerender a cualquier enlace (etiqueta <a>) que no deba tener precarga. Ver la FAQ para más información.

Compatibilidad con navegadores

La API de reglas de especulación es una nueva API web, y la funcionalidad utilizada por el plugin es compatible con navegadores basados en Chromium como Chrome, Edge u Opera que utilicen la versión 121 o superior. Otros navegadores como Safari y Firefox ignorarán la funcionalidad sin efectos negativos; simplemente no se beneficiarán de la carga especulativa. Ten en cuenta que algunas extensiones de navegador pueden desactivar la carga especulativa por defecto.

Este plugin era conocido anteriormente como Speculation Rules.

Instalación

Instalación desde dentro de WordPress

  1. Visita Plugins > Añadir nuevo.
  2. Busca Speculative Loading.
  3. Instala y activa el plugin Speculative Loading.

Instalación manual

  1. Sube toda la carpeta speculation-rules al directorio /wp-content/plugins/.
  2. Visita Plugins.
  3. Activa el plugin Speculative Loading.

FAQ

¿Cómo puedo evitar que se haga precarga y prelectura de ciertas URLs?

No es razonable precargar todas las URL. Precargar conrtenido estático suele ser fiable, sin embargo, precargar conrtenido interactivo, como una URL de desconexión, puede conllevar fallos. Por este motivo, ciertas URLs del núcleo de WordPress, como por ejemplo /wp-login.php y /wp-admin/* se excluyen de la precarga y de la prelectura. Adicionalmente, cualquier URL generada con wp_nonce_url() (o que contenga la query var _wpnonce) y los enlaces nofollow también se ignoran. Puedes excluir patrones de URL adicionales usando el filtro plsr_speculation_rules_href_exclude_paths.

El siguiente ejemplo asegura que URLs como https://ejemplo.com/carrito/ o https://ejemplo.com/carrito/foo se excluyan de precarga o prelectura:

<?php
add_filter(
    'plsr_speculation_rules_href_exclude_paths',
    function ( array $exclude_paths ): array {
        $exclude_paths[] = '/cart/*';
        return $exclude_paths;
    }
);

Ten en cuenta que a veces puede ser útil excluir una URL de la precarga y permitir al mismo tiempo que tenga prelectura. Por ejemplo, una página con JavaScript del lado del cliente para actualizar el estado del usuario probablemente no debería ser precargada, pero sería razonable hacer prelectura.

Con este objetivo, el filtro plsr_speculation_rules_href_exclude_paths recibe el modo actual (o «prelectura» o «precarga») para ofrecer exclusiones condicionales.

El siguiente ejemplo garantiza que las URL como https://ejemplo.com/productos/... no se puedan precargar, al tiempo que permite que se prelean:

<?php
add_filter(
    'plsr_speculation_rules_href_exclude_paths',
    function ( array $exclude_paths, string $mode ): array {
        if ( 'prerender' === $mode ) {
            $exclude_paths[] = '/products/*';
        }
        return $exclude_paths;
    },
    10,
    2
);

Como se ha mencionado arriba, añadir la clase CSS no-prerender a un enlace impedirá que se precargue (pero no su prelectura). Además, los enlaces con rel=nofollow no se precargan ni preleen porque algunos plugins añaden esto a enlaces no redundantes (p.ej.: añadir al carrito); idealmente, esos enlaces deberían ser botones que lancen una petición POST o, al menos, deberían usar wp_nonce_url().

¿Existen consideraciones especiales para el comportamiento de carga especulativa?

Por razones de seguridad, toda la característica de carga especulativa está desactivada por defecto para los usuarios conectados y para los sitios que no utilizan enlaces permanentes bonitos. Esto último se debe a que los plugins suelen utilizar URL con parámetros de consulta personalizados para permitir a los usuarios realizar acciones, y dichas URL no deberían cargarse de forma especulativa. Para los sitios sin enlaces permanentes bonitos, es imposible o al menos extremadamente complejo diferenciar entre qué parámetros de consulta son los predeterminados del núcleo y qué parámetros de consulta son personalizados.

Si estás utilizando este plugin en un sitio sin enlaces permanentes bonitos y estás seguro de que no hay parámetros de consulta personalizados en uso que puedan causar cambios de estado, puedes optar por activar la carga especulativa a través del filtro plsr_enabled_without_pretty_permalinks:

<?php
add_filter( 'plsr_enabled_without_pretty_permalinks', '__return_true' );

¿Cómo afectará esto a la analítica y la personalización?

La precarga puede afectar a la analítica y la personalización.

En el caso de JavaScript del lado del cliente, se recomienda retrasarlos hasta que se active la precarga (por ejemplo, haciendo clic en el enlace). Algunas soluciones (como Google Analytics) ya lo hacen automáticamente, ve el impacto en Analytics. Además, los iframes de origen cruzado no se cargan hasta su activación, lo que puede evitar problemas en este caso.

La especulación con la anticipación moderada por defecto disminuye el riesgo de que la página en precarga no llegue a ser visitada por el usuario y, por lo tanto, evitará cualquier efecto secundario de cargar dicho enlace por adelantado. Por el contrario, la anticipación ansiosa aumenta el riesgo de que las páginas en precarga no se carguen. Alternativamente, el plugin ofrece especular sólo cuando el ratón o el puntero están pulsados (conservador), lo que reduce el riesgo aún más y es una opción para los sitios que están preocupados por esto, a costa de tener menos tiempo de espera y por lo tanto menos ganancia de rendimiento.

Una página en precarga está vinculada a la página que la precarga, por lo que es posible que la personalización ya se conozca en este punto y que los cambios (por ejemplo, navegar por otros productos o iniciar o cerrar sesión) requieran a menudo una nueva carga de la página y, por tanto, una nueva precarga, que los tendrá en cuenta. Pero sin duda es algo que hay que tener en cuenta y probar. Las páginas en precarga pueden cancelarse eliminando el elemento <script> de las reglas de especulación de la página mediante las API de DOM de JavaScript estándar en caso de que sea necesario cuando cambie el estado sin que se cargue una nueva página.

¿Dónde puedo enviar mis comentarios sobre el plugin?

Te animamos a que nos envíes tus comentarios, especialmente porque este plugin puede contener futuras características del núcleo de WordPress. Si tienes sugerencias o peticiones de nuevas características puedes enviarlas como un issue en el repositorio del equipo de rendimiento de WordPress. Si necesitas ayuda con el diagnóstico o tienes alguna pregunta sobre el plugin, por favor, crea un nuevo debate en nuestro foro de soporte.

¿Dónde puedo informar de fallos de seguridad?

El equipo de rendimiento y la comunidad WordPress se toman en serio los fallos de seguridad. Apreciamos tu esfuerzo para divulgar responsablemente tus hallazgos, y haremos todo lo posible para reconocer tus contribuciones.

Para informar de un problema de seguridad, visita el programa WordPress HackerOne.

¿Cómo puedo contribuir al plugin?

¡Las contribuciones son siempre bienvenidas! Obtén más información sobre cómo participar en el manual del equipo de rendimiento del núcleo.

Reseñas

19 de julio de 2024 1 respuesta
I was using another plugin which does a similar job but Speculative Loading appears to be substantially quicker. Using on about 10 sites and no issues. Thank you
27 de mayo de 2024
Es verkürzt die Ladzeit für einen Benutzer sichtbar, auch wenn im Hintergrund die Seite gleichschnell geladen wird, so fühlt es sich für einen Benutzer extrem schnell an.
8 de mayo de 2024 1 respuesta
I’ve currently activated this plugin on five sites, some on one server, and then others on another. The plugin has yet to present any plugin conflicts or other issues. The time to load pages is drastically improved based on user intent, and based on this alone, I cannot recommend this plugin enough. I haven’t tested the sites with Lighthouse, but honestly, I don’t feel the need to do that, because it’s about the user experience first, and that is such an improvement with this plugin. Thank you!
Leer todas las 17 reseñas

Colaboradores y desarrolladores

«Speculative Loading» es un software de código abierto. Las siguientes personas han colaborado con este plugin.

Colaboradores

«Speculative Loading» está traducido en 9 idiomas. Gracias a los traductores por sus contribuciones.

Traduce «Speculative Loading» a tu idioma.

¿Interesado en el desarrollo?

Revisa el código , echa un vistazo al repositorio SVN o suscríbete al registro de desarrollo por RSS.

Registro de cambios

1.4.0

Mejoras

  • Implement speculative loading considerations for safer behavior. (1784)

1.3.1

Correcciones de fallos

  • Check if rel contains nofollow instead of being just nofollow when excluding speculative loading. (1232)

1.3.0

Mejoras

  • Prevent speculatively loading links to the uploads, content, plugins, template, or stylesheet directories. (1167)
  • Facilitate embedding Speculative Loading in other plugins/themes. (1159)
  • Improve overall code quality with stricter static analysis checks. (775)
  • Bump minimum PHP requirement to 7.2. (1130)

1.2.2

Correcciones de fallos

  • Fix composition of href exclude paths to account for JSON encoding and differing site/home URLs. (1164)

Documentación

  • Update readme with browser support and FAQ section about analytics and personalization. (1155)

1.2.1

Mejoras

  • Add settings link to Speculative Loading plugin action links. (1145)
  • Bump minimum PHP version to 7.2. (1130)

Correcciones de fallos

  • Exclude _wpnonce URLs in speculation rules. (1143)
  • Exclude rel=nofollow links from prefetch/prerender. (1142)

1.2.0

  • Add missing uninstall.php to remove plugin’s database option. (1128)

1.1.0

  • Allow excluding URL patterns from prerendering or prefetching specifically. (1025)
  • Rename plugin to «Speculative Loading». (1101)
  • Add Speculative Loading generator tag. (1102)
  • Bump minimum required WP version to 6.4. (1062)
  • Update tested WordPress version to 6.5. (1027)

1.0.1

  • Escape path prefix and restrict it to be a pathname in Speculation Rules. (951)
  • Force HTML5 script theme support when printing JSON script. (952)
  • Add icon and banner assets for plugin directory. (987)

1.0.0

  • Initial release of the Speculative Loading plugin as a standalone plugin. (733)