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.
- Compatibilidad general de navegadores de la API de reglas de especulación
- Información sobre la sintaxis de las reglas de documentos que utiliza el plugin
Este plugin era conocido anteriormente como Speculation Rules.
Instalación
Instalación desde dentro de WordPress
- Visita Plugins > Añadir nuevo.
- Busca Speculative Loading.
- Instala y activa el plugin Speculative Loading.
Instalación manual
- Sube toda la carpeta
speculation-rules
al directorio/wp-content/plugins/
. - Visita Plugins.
- 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 conwp_nonce_url()
(o que contenga la query var_wpnonce
) y los enlacesnofollow
también se ignoran. Puedes excluir patrones de URL adicionales usando el filtroplsr_speculation_rules_href_exclude_paths
.El siguiente ejemplo asegura que URLs como
https://ejemplo.com/carrito/
ohttps://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 conrel=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 usarwp_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ónansiosa
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
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)