Le WordPress d'aujourd'hui, décodé pour les développeurs

Performance

Un million de fiches associatives et Algolia Facets : le coût réel

Comparatif du coût par requête et du temps de réponse d'Algolia face à une recherche WP_Query facettée maison, pour un annuaire national d'associations.

Par WordPress Développement • 30 mars 2023 • 4 min de lecture • Aucun commentaire
Un million de fiches associatives et Algolia Facets : le coût réel

« combien coûte réellement une recherche facettée à cette échelle ? » — la question s’est posée concrètement pour une fédération nationale d’associations dont l’annuaire en ligne recensait plus d’un million de fiches, chacune consultable par ville, thématique, tranche d’âge du public visé et disponibilité de bénévolat. Deux architectures de recherche facettée ont été comparées en conditions réelles de charge, sans trancher a priori en faveur du service payant.

L’architecture WP_Query facettée maison

La première option reposait sur une WP_Query combinant plusieurs tax_query (ville, thématique) et meta_query (tranche d’âge, disponibilité), avec des compteurs de facettes recalculés à chaque changement de filtre pour afficher le nombre de résultats par option encore disponible — la partie la plus coûteuse du dispositif, puisqu’elle impose une requête d’agrégation supplémentaire par facette affichée.

$requete = new WP_Query([
    'post_type'  => 'association',
    'tax_query'  => [
        [ 'taxonomy' => 'ville', 'terms' => $ville_selectionnee ],
        [ 'taxonomy' => 'thematique', 'terms' => $themes_selectionnes ],
    ],
    'meta_query' => [
        [ 'key' => 'tranche_age', 'value' => $age_selectionne ],
    ],
    'posts_per_page' => 20,
]);

L’architecture Algolia

L'essentiel à retenir : Algolia facture par requête et par enregistrement indexé, pas seulement par volume de recherche ; Une WP_Query facettée maison reste gratuite mais dégrade fortement au-delà de quelques dizaines de milliers de fiches ; Le vrai arbitrage porte sur le temps de réponse sous charge, pas sur le confort en développement

La seconde option indexait l’intégralité du million de fiches dans Algolia, avec les attributs de facettage déclarés via attributesForFaceting à la configuration de l’index, et une recherche côté client utilisant directement l’API de recherche Algolia, les compteurs de facettes étant renvoyés nativement par la réponse de recherche sans requête supplémentaire :

$resultats = $index->search( $terme_recherche, [
    'facets'       => [ 'ville', 'thematique', 'tranche_age' ],
    'facetFilters' => [ [ 'ville:Lyon' ], [ 'thematique:sport' ] ],
    'hitsPerPage'  => 20,
]);

Le protocole de comparaison

Le test a simulé 2 000 recherches facettées par heure, un volume représentatif des pics observés lors des campagnes de communication de la fédération, en mesurant le temps de réponse au 95e percentile et, côté Algolia, le coût mensuel projeté sur le plan tarifaire correspondant au volume d’enregistrements et de requêtes observé :

MesureWP_Query facettée maisonAlgolia
Temps de réponse P952,8 s0,09 s
Charge CPU serveur d’origine sous picÉlevée, plusieurs workers saturésNégligeable, recherche déportée
Coût direct mensuel estimé0 € (hors infrastructure existante)Plusieurs centaines d’euros selon le palier

L’écart de temps de réponse s’explique par la nature même de la structure d’index : Algolia maintient un index inversé optimisé nativement pour le facettage, quand une WP_Query facettée doit recalculer des jointures SQL sur wp_term_relationships et wp_postmeta à chaque combinaison de filtres, sans bénéficier d’une structure dédiée à cet usage.

Le vrai poste de coût côté WP_Query : les compteurs de facettes

Isolément, une recherche simple sans compteur de facettes restait raisonnable en WP_Query, de l’ordre de 400 millisecondes. C’est le calcul des compteurs par option de facette (« Lyon (142) », « Sport (89) ») qui multipliait le temps de réponse par sept, chaque option nécessitant sa propre requête d’agrégation pour rester exacte face aux filtres déjà appliqués.

Le verdict argumenté

Algolia a été retenu pour ce projet, non pas pour son confort de développement — comparable dans les deux cas une fois l’intégration en place — mais parce que le temps de réponse sous charge de la solution maison restait incompatible avec l’usage réel : une fédération qui communique massivement autour d’une campagne ne peut pas se permettre des recherches à plusieurs secondes au moment précis où l’affluence est la plus forte.

  • En dessous de 50 000 fiches et sans compteurs de facettes en temps réel, une WP_Query facettée bien indexée reste une option raisonnable et gratuite.
  • Au-delà du million de fiches avec facettage complet et compteurs dynamiques, le coût d’Algolia devient largement justifié par le temps de réponse et l’absence de charge sur l’infrastructure d’origine.
  • Le coût d’Algolia croît avec le nombre d’enregistrements indexés autant qu’avec le volume de requêtes, un point à surveiller particulièrement pour un annuaire dont le nombre de fiches continue de croître.

Le confort de développement ne doit jamais masquer le vrai critère de décision : le temps de réponse au moment où le trafic est réellement là.

Notre verdict

Ce comparatif ne porte que sur le coût de la recherche facettée elle-même, indépendamment de l’expérience utilisateur de l’interface de recherche, qui fait l’objet d’un travail séparé. Pour un volume de fiches comparable, la question n’est plus vraiment de savoir si Algolia est plus rapide — il l’est nettement — mais si l’écart de coût mensuel est acceptable au regard du gain de fiabilité sous charge.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Partager :

À propos de l'auteur

WordPress Développement

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

Voir tous ses articles

Dans la même veine

À lire aussi