Description
Cette extension ajoute la prise en charge de l’API Speculation Rules, qui permet de définir des règles selon lesquelles certaines URL sont pré-chargées ou pré-rendues dynamiquement.
Voir le projet de spécification WICG sur les règles de spéculation.
By default, the plugin is configured to prerender WordPress frontend URLs when the user interacts with a relevant link. This can be customized via the « Speculative Loading » section in the Settings > Reading admin screen.
Un filtre peut être utilisé pour exclure certains chemins d’URL de l’éligibilité à la pré-lecture et au pré-rendu (voir la section FAQ). Vous pouvez également ajouter la classe CSS no-prerender
à n’importe quel lien (<a>
balise) qui ne doit pas être pré-rendu. Pour plus d’informations, consultez la FAQ.
Navigateurs pris en charge
L’API de règles de spéculation est une nouvelle API Web, et les fonctionnalités utilisées par l’extension sont prises en charge dans les navigateurs basés sur Chromium tels que Chrome, Edge ou Opera utilisant la version 121 ou ultérieure. D’autres navigateurs tels que Safari et Firefox ignoreront la fonctionnalité sans effets néfastes ; Ils ne bénéficieront tout simplement pas de la charge spéculative. Notez que certaines extensions de navigateur peuvent désactiver le préchargement par défaut.
- Prise en charge de l’API Speculation Rules par le navigateur en général
- Informations sur la prise en charge de la syntaxe des règles de document utilisée par l’extension
Cette extension était anciennement connue sous le nom de Speculation Rules.
Installation
Installation depuis WordPress
- Aller sur Extensions -> Ajouter nouveau.
- Recherchez Speculative Loading.
- Install and activate the Speculative Loading plugin.
Installation manuelle
- Upload the entire
speculation-rules
folder to the/wp-content/plugins/
directory. - Aller sur Extensions.
- Activate the Speculative Loading plugin.
FAQ
-
Comment puis-je empêcher certaines URL d’être pré-chargées et pré-rendues ?
-
Toutes les URL ne peuvent pas être raisonnablement pré-rendues. Le pré-rendu du contenu statique est généralement fiable, mais le pré-rendu du contenu interactif, tel qu’une URL de déconnexion, peut entraîner des problèmes. Pour cette raison, certaines URL de base WordPress telles que
/wp-login.php
et/wp-admin/*
sont exclues de la pré-lecture et du pré-rendu. De plus, toutes les URL générées avecwp_nonce_url()
(ou qui contiennent la variable de_wpnonce
requête) etnofollow
les liens sont également ignorés. Vous pouvez exclure des modèles d’URL supplémentaires à l’aide du filtreplsr_speculation_rules_href_exclude_paths
.L’exemple suivant garantit que les URL aiment
https://example.com/cart/
ouhttps://example.com/cart/foo
sont exclues de la pré-lecture et du pré-rendu :<?php add_filter( 'plsr_speculation_rules_href_exclude_paths', function ( array $exclude_paths ): array { $exclude_paths[] = '/cart/*'; return $exclude_paths; } );
Gardez à l’esprit qu’il peut parfois être utile d’exclure une URL du pré-rendu tout en lui permettant d’être pré-chargée. Par exemple, une page avec du code JavaScript côté client pour mettre à jour l’état de l’utilisateur ne devrait probablement pas être pré-rendue, mais il serait raisonnable de le faire.
For this purpose, the
plsr_speculation_rules_href_exclude_paths
filter receives the current mode (either « prefetch » or « prerender ») to provide conditional exclusions.L’exemple suivant garantit que les URL telles
https://example.com/products/...
que ne peuvent pas être pré-affichées, tout en leur permettant d’être pré-chargées :<?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 );
As mentioned above, adding the
no-prerender
CSS class to a link will prevent it from being prerendered (but not prefetched). Additionally, links withrel=nofollow
will neither be prefetched nor prerendered because some plugins add this to non-idempotent links (e.g. add to cart); such links ideally should rather be buttons which trigger a POST request or at least they should usewp_nonce_url()
. -
Y a-t-il des considérations particulières pour le comportement de chargement spéculatif ?
-
Pour des raisons de sécurité, toute la fonctionnalité de chargement spéculatif est désactivée par défaut pour les internautes connectés et pour les sites qui n’utilisent pas de jolis permaliens. C’est le cas, car les extensions utilisent souvent des URL avec des réglages de requête personnalisés pour permettre aux internautes d’effectuer des actions, et ces URL ne doivent pas être chargées de manière spéculative. Pour les sites sans jolis permaliens, il est impossible ou du moins extrêmement complexe de différencier les réglages de requête par défaut et les réglages de requête personnalisés.
Si vous exécutez cette extension sur un site sans permaliens et que vous êtes sûr qu’il n’y a pas de réglages de requête personnalisés en cours d’utilisation qui peuvent provoquer des changements d’état, vous pouvez choisir d’activer le chargement spéculatif via le
plsr_enabled_without_pretty_permalinks
filtre :<?php add_filter( 'plsr_enabled_without_pretty_permalinks', '__return_true' );
-
Quel impact cela aura-t-il sur l’analyse et la personnalisation ?
-
Le pré-rendu peut affecter l’analyse et la personnalisation.
Pour le JavaScript côté client, il est recommandé de les retarder jusqu’à ce que le pré-rendu soit activé (par exemple en cliquant sur le lien). Certaines solutions (comme Google Analytics) le font déjà automatiquement, voir Impact sur Analytics. De plus, les iframes d’origine croisée ne sont pas chargées avant l’activation, ce qui permet d’éviter des problèmes ici.
Spéculer avec l’empressement par défaut
modéré
diminue le risque que la page pré-affichée ne soit pas visitée par l’internaute et évitera donc tout effet secondaire du chargement d’un tel lien à l’avance. En revanche, aveceager
la spéculation augmente le risque que les pages pré-rendues ne soient pas chargées. Alternativement, l’extension propose de ne spéculer que sur la souris/le pointeur vers le bas (conservateur) ce qui réduit encore plus le risque et constitue une option pour les sites qui s’en préoccupent, au prix d’avoir moins de temps d’avance et donc moins de gain de performance.Une page pré-rendue est liée à la page qui la pré-rend, de sorte que la personnalisation peut déjà être connue à ce stade et les modifications (par exemple, la navigation sur d’autres produits ou la connexion/déconnexion) nécessitent souvent un nouveau chargement de page, et donc un nouveau pré-rendu, qui les prendra ensuite en compte. Mais c’est certainement quelque chose à connaître et à tester ! Les pages pré-rendues peuvent être annulées en supprimant l’élément de règles
<script>
de spéculation de la page à l’aide des API DOM JavaScript standard si cela s’avère nécessaire lorsque l’état change sans qu’une nouvelle page ne soit chargée. -
Où puis-je soumettre mes commentaires sur l’extension ?
-
Les commentaires sont encouragés et très appréciés, d’autant plus que cette extension peut contenir de futures fonctionnalités de base de WordPress. Si vous avez des suggestions ou des demandes pour de nouvelles fonctionnalités, vous pouvez les soumettre en tant que problème dans le référentiel GitHub de l’équipe de performance WordPress. Si vous avez besoin d’aide pour le dépannage ou si vous avez une question sur l’extension, veuillez créer un nouveau sujet sur notre forum d’assistance.
-
Où puis-je signaler des bogues de sécurité ?
-
L’équipe Performance et la communauté WordPress prennent les bogues de sécurité au sérieux. Nous apprécions vos efforts pour divulguer vos conclusions de manière responsable et nous ferons tout notre possible pour reconnaître vos contributions.
To report a security issue, please visit the WordPress HackerOne program.
-
Comment puis-je contribuer à l’extension ?
-
Les contributions sont toujours les bienvenues ! Pour en savoir plus sur la façon de s’impliquer, consultez le manuel de Core Performance Team.
Avis
Contributeurs/contributrices & développeurs/développeuses
« Speculative Loading » est un logiciel libre. Les personnes suivantes ont contribué à cette extension.
Contributeurs“Speculative Loading” a été traduit dans 12 locales. Remerciez l’équipe de traduction pour ses contributions.
Traduisez « Speculative Loading » dans votre langue.
Le développement vous intéresse ?
Parcourir le code, consulter le SVN dépôt, ou s’inscrire au journal de développement par RSS.
Journal des modifications
1.5.0
Améliorations
- Add support for Speculative Loading WP Core API, loading the plugin’s own API implementation conditionally. (1883)
1.4.0
Améliorations
- Implement speculative loading considerations for safer behavior. (1784)
1.3.1
Bogues résolus
- Check if rel contains nofollow instead of being just nofollow when excluding speculative loading. (1232)
1.3.0
Améliorations
- 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
Bogues résolus
- Fix composition of href exclude paths to account for JSON encoding and differing site/home URLs. (1164)
Documentation
- Update readme with browser support and FAQ section about analytics and personalization. (1155)
1.2.1
Améliorations
- Add settings link to Speculative Loading plugin action links. (1145)
- Bump minimum PHP version to 7.2. (1130)
Bogues résolus
- 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)