Image
Image

Speculative Loading

Description

This plugin adds support for the Speculation Rules API, which allows defining rules by which certain URLs are dynamically prefetched or prerendered. This core Speculative Loading functionality was merged into WordPress 6.8, but it only prefetches with conservative eagerness by default. In contrast, this plugin defaults to prerendering with moderate eagerness (i.e. when interacting with a link), and it provides a user interface to customize the mode and eagerness via the « Speculative Loading » section on the Settings > Reading admin screen.

By default, speculative loading is only enabled for logged-out users, since unauthenticated pages are typically only eligible for caching and so more efficient to prefetch/prerender. This means that sites with frequent logged-in users on the frontend—such as e-commerce, forums, or membership sites—will not benefit from the feature. If your server can handle the additional load (for example, with persistent object caching), you can opt in to enable speculative loading for all logged-in users or for administrators only. This setting exclusively affects frontend pages; admin screens are always excluded.

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.

Cette extension était anciennement connue sous le nom de Speculation Rules.

Installation

Installation depuis WordPress

  1. Aller sur Extensions -> Ajouter nouveau.
  2. Recherchez Speculative Loading.
  3. Install and activate the Speculative Loading plugin.

Installation manuelle

  1. Upload the entire speculation-rules folder to the /wp-content/plugins/ directory.
  2. Aller sur Extensions.
  3. Activate the Speculative Loading plugin.

After activation

  1. Visit the Settings > Reading admin screen.
  2. Use the controls in the Speculative Loading section to configure speculative loading.

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 avec wp_nonce_url() (ou qui contiennent la variable de _wpnonce requête) et nofollow les liens sont également ignorés. Vous pouvez exclure des modèles d’URL supplémentaires à l’aide du filtre plsr_speculation_rules_href_exclude_paths.

L’exemple suivant garantit que les URL aiment https://example.com/cart/ ou https://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 with rel=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 use wp_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, avec eager 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

Image
16 avril 2025
Although I have not tried the plugin on live sites, my testing on 3-4 dev boxes leaves me impressed. I can see and feel the speed increase I have a couple of heavy sites and can see this plugin fitting right into the flow. Will get on it soon 🙂
Image
19 juillet 2024 1 réponse
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
Image
27 mai 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.
Lire les 18 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 13 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.6.0

Améliorations

  • Add Speculative Loading opt-in for authenticated requests. (2097)
  • Add warning notice to Speculative Loading setting for authenticated users when persistent object cache is not present. (2144)
  • Update Speculative Loading readme description to note purpose after core merge. (2120)

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)