web-dev-qa-db-fra.com

Pourquoi la maison (beaucoup) est-elle plus lente que les autres pages?

J'essaie de paramétrer un site web wordpress qui connaît des temps de chargement lents et j'ai découvert que la page d'accueil semble prendre beaucoup plus de temps à charger. Ce n'est pas dû au contenu parce que je considère juste le temps qu'il faut pour que la demande de base se termine (visible via firebug dans firefox).

Aussi, j'ai essayé de copier le code index.php dans une page personnalisée, et le même code exact se charge en environ 1 seconde, tandis que la maison principale se charge en environ 7. J'ai remarqué que les pages simples se chargeaient plus rapidement, et au début, je pensais que c'était à cause de la différence de contenu, mais après ce test, je ne suis pas sûr de la cause.

Y a-t-il beaucoup de choses que wordpress fait en coulisse uniquement pour l'index principal? Existe-t-il un autre moyen d’expliquer cette situation et, plus important encore, de la réparer afin que la page d’accueil se charge plus rapidement?

UPDATE - DIRTY SOLUTION

Après de nombreux essais en aveugle, j'ai créé une nouvelle page appelée home, qui utilise index.php comme modèle personnalisé (et non une copie, le même fichier). J'ai redirigé n'importe quel appel vers le chemin de base (via la réécriture interne de wordpress) et j'ai la même page d'accueil qu'avant, juste chargée au 1/6 du temps. Bien que je sois satisfait du résultat, j'aimerais vraiment comprendre ce qui se passe.

AUTRE MISE À JOUR

Le problème semble donc être que je ne peux pas utiliser une page dynamique (au sens de wordpress) avec ce site. Cela fonctionne uniquement avec une page "statique" personnalisée dans laquelle j'insère du contenu via diverses fonctions, la boucle normale rend la maison très lent (avec une limite de mémoire élevée) ou juste vide (limite de mémoire faible, le script échoue).

Comme suggéré dans cette question , j'ai créé une maison statique liée à une page personnalisée et cela fonctionne bien. J'ai également créé une page de blog (à nouveau avec un modèle personnalisé) qui fonctionne également (où "bien" signifie que ma page de test vide ne contient qu'un mot et aucun code) sauf si je le spécifie comme "Messages page "dans admin -> Paramètres de lecture. En d'autres termes, dès que wordpress voit une page dynamique (celle qui est supposée contenir la boucle principale), il semble faire quelque chose de très lourd qui consomme beaucoup de bélier.

Toujours à la recherche de la cause, je peux y remédier, mais j'aimerais vraiment comprendre le problème.

Edit: prime ajoutée

Plus d'infos: j'ai essayé de désactiver tous les plugins, Wordpress est mis à jour avec la dernière version.

MODIFICATION ULTERIEURE: INDICES DE TABLE

wp_posts:

PRIMARY KEY  (`ID`),
KEY `type_status_date` (`post_type`,`post_status`(1),`post_date`,`ID`),
KEY `post_status_date_gmt` (`post_status`(1),`post_date_gmt`),
KEY `post_date` (`post_date`),
KEY `post_date_gmt` (`post_date_gmt`),
KEY `post_parent` (`post_parent`),
KEY `post_name` (`post_name`),
KEY `post_status` (`post_status`),
KEY `post_author` (`post_author`),
FULLTEXT KEY `post_related` (`post_name`,`post_content`),
FULLTEXT KEY `post_content` (`post_content`,`post_title`),

wp_term_relationships:

PRIMARY KEY  (`object_id`,`term_taxonomy_id`),
KEY `term_taxonomy_id` (`term_taxonomy_id`)

wp_term_taxonomy:

PRIMARY KEY  (`term_taxonomy_id`),
UNIQUE KEY `term_id_taxonomy` (`term_id`,`taxonomy`),
KEY `taxonomy` (`taxonomy`)
6
Matteo Riva

Après presque 4 ans, je suis revenu sur cette question et j'ai finalement trouvé le problème. Il s'avère que le site avait beaucoup d'articles TOUT marqués comme collants. En raison de la façon incroyablement stupide utilisée par wordpress pour marquer les articles collants (un tableau sérialisé dans wp_options), la boucle principale de la page d'accueil dynamique a pris un temps incroyablement long. Effacer le champ sticky_posts dans la table a résolu le problème.

2
Matteo Riva

Je suis en désaccord avec les deux commentaires précédents.

L'utilisation d'une page d'accueil statique aboutit à WP à l'aide d'une analyse d'index sur la clé primaire de la table posts, par rapport à une analyse d'index (oh si occasionnelle) sur post_date, status ou post_parent dans la table posts.

En substance, la page d'accueil est extrêmement lente en raison de la conception médiocre de la base de données dans WP. Le schéma contient des index multicolonnes ridicules sur les tables de taxonomie que MySQL ignore simplement une fois que vous avez un nombre significatif de publications. Le fait que nous utilisions trop une table pour les taxonomies n'aide pas non plus.

Dans la base de données, ajoutez en toute sécurité des index sur:

CREATE INDEX extra_posts ON posts (post_type,post_status,post_date DESC)
CREATE INDEX extra_term_rel ON term_relationships(term_taxonomy_id,object_id)
CREATE INDEX extra_term_tax ON term_taxonomy(taxonomy,term_taxonomy_id,term_id)

Ce ne sera pas parfait, mais au moins WP pourra utiliser des plans de boucle imbriqués basés sur un index sur votre page d'accueil ...

Oh, et ... si vous utilisez un type de message personnalisé sur votre page d'accueil, vous devez également ajouter:

posts(post_status,post_date DESC)

Sinon, aucun index ne sera utilisé pour la requête principale à cause des clauses OR.

7
Denis de Bernardy

Par défaut, il n'y a aucune différence pour les performances de la page d'accueil. Il est toutefois possible que certains plug-ins fassent quelque chose de lent sur cette seule page.

Il y a beaucoup de plugins pour profiler WP performance. J'utilise habituellement WP Tuner mais il semble être cassé pour la dernière version de WP, donc je n'ai pas de remplaçant immédiat à suggérer.

Le moyen le plus simple est de remplir le modèle de marqueurs de temps/mémoire.

printf(  '%d queries in %.3f seconds, using %.2fMB memory', get_num_queries(), timer_stop( 0, 3 ), memory_get_peak_usage() / 1024 / 1024 );

C'est brutal mais permet souvent de localiser le ralentissement.

5
Rarst

Dans un premier temps, vérifiez la qualité de WOrdPress et les images, scripts et feuilles de style inclus. Vous pouvez vérifier les requêtes avec le plugin Requêtes Debug et vous obtenez plus d'informations sur votre installation et vos erreurs avec le plugin Objets Debug .

0
bueltge

Si le chargement de la page d'accueil prend autant de temps, vous disposez probablement d'un plug-in ou d'une fonction du thème qui effectue une demande à distance au moment du rendu de la page d'accueil.

Je ferais une recherche récursive dans votre répertoire wp-content pour les appels à 'wp_remote_' afin de rechercher les fonctions pouvant être à l'origine de ce problème.

0
prettyboymp