web-dev-qa-db-fra.com

WordPress localisé est beaucoup plus lent?

J'utilise xdebug et webgrind pour profiler mon installation WordPress car elle est un peu lente. Comme il y a environ 20 plugins activés, j’ai pensé que xdebug serait capable de trouver le goulot d’étranglement.

Cependant, à ma grande surprise, il semble que les routines de localisation occupent la majeure partie du temps d'exécution. Et oui j'utilise une version localisée de WordPress. Veuillez voir la sortie suivante de webgrind d'un chargement de page ajax unique:

webgrind output

Je peux voir que certains de mes plugins prennent chacun moins de 1% de temps d'exécution (mesuré en pourcentage du temps d'exécution). Mais les routines de traduction, Translation_Entry, MO, POMO utilisent plus de 30% du total.

Je me demande pourquoi et si je devrais empêcher l'utilisation d'une version localisée? Ou est-ce que j'utilise la mauvaise approche pour profiler les performances?

6
He Shiming

Pour chaque fichier de traduction, WordPress doit le décompresser, puis chaque entrée sera convertie en un objet Translation_Entry.

La ficelle courte "caller_get_posts" est obsolète. Utilisez "ignore_sticky_posts" à la place. aura besoin de trois fois plus de mémoire lors de la traduction:

  '"caller_get_posts" is deprecated. Use "ignore_sticky_posts" instead.' => 
  Translation_Entry::__set_state(array(
     'is_plural' => false,
     'context' => NULL,
     'singular' => '"caller_get_posts" is deprecated. Use "ignore_sticky_posts" instead.',
     'plural' => NULL,
     'translations' => 
    array (
      0 => '"caller_get_posts" ist veraltet. Bitte nutze stattdessen "ignore_sticky_posts".',
    ),
     'translator_comments' => '',
     'extracted_comments' => '',
     'references' => 
    array (
    ),
     'flags' => 
    array (
    ),
  )),

Et c’est la raison pour laquelle des plugins et des thèmes correctement écrits ne chargent pas leur fichier de langue de manière inconditionnelle. Malheureusement, il n'y a pas beaucoup de plugins et de thèmes correctement écrits…

Les traductions de WordPress sont divisées en un administrateur et une partie frontale afin de réduire l’impact de la mémoire. C'est encore beaucoup.

Vous pouvez empêcher le chargement de fichiers de langue spécifiques avec un plug-in mu:

add_filter( 'override_load_textdomain', 'stop_language_files', 10, 2 );

function stop_language_files( $bool, $domain )
{
    if ( 'textdomain_you_do_not_want' === $domain )
        return TRUE;

    return $bool;
}
6
fuxia

La localisation est un gros problème de performance sur WordPress et le problème ne réside pas dans les plugins, mais dans la mise en œuvre de la localisation de WordPress (bien que de bons plugins écrits puissent en réduire l'impact). WP Performance Pack Plugin offre une solution car il propose différentes optimisations qui annulent presque idéalement l’impact de la localisation sur la performance.

0
Björn