vendredi 25 septembre 2026

À propos

Contact

Performance

wp_resource_hints : preconnect et dns-prefetch sans en abuser

Ajoutez les bonnes indications de ressources pour vos polices, votre CDN et vos API tierces avec le filtre wp_resource_hints, et mesurez vraiment l'effet.

Par Clément Hadrot • 20 juillet 2020 • 4 min de lecture • Aucun commentaire
wp_resource_hints : preconnect et dns-prefetch sans en abuser

Un problème classique : une page WordPress charge une police depuis Google Fonts, ses images depuis un CDN, et envoie des événements à un outil d’analytics. Trois domaines externes, chacun nécessitant une résolution DNS, une négociation TLS et l’ouverture d’une connexion avant le premier octet utile. WordPress propose depuis la version 4.6 le filtre wp_resource_hints pour anticiper une partie de ce travail. Bien utilisé, il fait gagner plusieurs centaines de millisecondes ; mal utilisé, il ne sert à rien, voire ralentit légèrement la page.

Le problème : préconnexion à un domaine externe

Chaque origine externe impose une séquence avant de pouvoir transférer la première donnée : résolution DNS, poignée de main TCP, puis négociation TLS si le site est en HTTPS. Sur une connexion mobile, cette séquence peut coûter plusieurs centaines de millisecondes, répétées pour chaque domaine externe utilisé par la page. Anticiper cette séquence, avant même que le navigateur ne découvre qu’il en a besoin, permet de la faire en parallèle du reste du chargement.

Snippet commenté : le filtre wp_resource_hints

function wpm_resource_hints( $urls, $relation_type ) {
    if ( 'preconnect' === $relation_type ) {
        $urls[] = array(
            'href' => 'https://fonts.gstatic.com',
            'crossorigin',
        );
        $urls[] = 'https://cdn.exemple-client.test';
    }

    if ( 'dns-prefetch' === $relation_type ) {
        $urls[] = '//www.google-analytics.com';
    }

    return $urls;
}
add_filter( 'wp_resource_hints', 'wpm_resource_hints', 10, 2 );

La distinction entre les deux types d’indications est importante. dns-prefetch ne fait que résoudre le nom de domaine à l’avance, une opération légère. preconnect va plus loin : il établit la connexion TCP et, en HTTPS, effectue aussi la négociation TLS. C’est plus coûteux à déclencher, donc à réserver aux origines dont vous êtes certain qu’elles seront utilisées immédiatement, comme la police principale ou le CDN d’images.

L'essentiel à retenir : preconnect établit la connexion, dns-prefetch résout juste le DNS ; Chaque preconnect superflu consomme des ressources réseau ; Trois à quatre origines externes est déjà beaucoup

Pourquoi l’attribut crossorigin compte pour les polices

Pour les ressources de police, le preconnect doit systématiquement inclure l’attribut crossorigin, même si le domaine ne nécessite pas d’authentification. Sans cet attribut, le navigateur ouvre une connexion distincte pour la requête de police elle-même, ce qui annule le bénéfice du preconnect. C’est une source d’erreur fréquente, invisible sans un examen attentif de l’onglet réseau des outils de développement.

Variante : limiter les hints à certaines pages

Un preconnect vers l’API d’un outil de chat n’a aucun intérêt sur les pages où ce chat ne s’affiche pas. Conditionnez l’ajout des hints au contexte réel de la page :

function wpm_resource_hints_conditionnel( $urls, $relation_type ) {
    if ( 'preconnect' === $relation_type && is_page( 'contact' ) ) {
        $urls[] = 'https://widget.chat-fictif.test';
    }
    return $urls;
}
add_filter( 'wp_resource_hints', 'wpm_resource_hints_conditionnel', 10, 2 );

Ne pas en abuser : le piège du preconnect généralisé

Chaque connexion préétablie consomme des ressources réseau et de la mémoire côté navigateur, en particulier sur les appareils mobiles peu puissants. Au-delà de trois ou quatre origines en preconnect, le navigateur commence à retarder certaines connexions plutôt qu’à les traiter toutes en parallèle, ce qui peut ralentir légèrement le chargement des ressources réellement critiques.

  • Réservez preconnect aux origines utilisées dès le premier rendu (police principale, CDN d’images du haut de page).
  • Utilisez dns-prefetch, plus léger, pour les origines utilisées plus tard dans la page ou de façon conditionnelle.
  • Retirez les hints vers des services que le site n’utilise plus : ils traînent souvent après le remplacement d’un plugin.

Mesurer l’effet réel

Ouvrez l’onglet réseau des outils de développement, activez le throttling « Fast 3G », et comparez le temps avant la première requête vers le domaine externe avec et sans le hint. Sur un projet client récent, l’ajout d’un preconnect ciblé vers Google Fonts a fait gagner environ 180 millisecondes sur le rendu du texte, un gain net et mesurable pour une modification de quelques lignes.

Un preconnect est une promesse faite au navigateur : s’il n’est pas tenu, la promesse coûte plus cher qu’elle ne rapporte.

Variantes selon le contexte

Sur un site multilingue avec un CDN différent par région, préférez générer les hints dynamiquement à partir de la configuration du CDN actif plutôt que de coder les URL en dur. Sur un site avec peu d’origines externes, il est parfois plus simple de ne conserver qu’un seul preconnect vers la police principale et de laisser le reste au comportement par défaut du navigateur.

Partager :

À propos de l'auteur

Clément Hadrot

Développeur WordPress, passionné par Elementor, le FSE et l’automatisation par IA.

Voir tous ses articles

Dans la même veine

À lire aussi