Wordcamp US Talk: redimensionner les sites WordPress dynamiques
Le week – end dernier, Aaron Edwards, notre directeur technique, a parlé à wordcamp US de son expérience dans la redimensionnement de sites Web dynamiques (en particulier edublogs, campuspress et wpmu dev). Si vous avez des questions sur Scaling ou même sur le rôle d’Aaron en tant que CTO, laissez un commentaire à la fin de l’article. Faites défiler vers le bas vers la diapositive de présentation. En général, lorsque vous participez à des réunions de performance dans des événements comme wordcamp, les conférenciers discutent plus de l’avant du site, de l’accélération, des plug – ins de cache, de la configuration, etc., en mettant l’accent sur la mise en cache de l’ensemble de la page. Le problème est que si vous avez un site dynamique et que vous lancez bbPress, electrommerce, WordPress multisite, buddypress ou même un site membre, pratiquement n’importe quel site auquel beaucoup de vos visiteurs peuvent accéder, les utilisateurs sautent presque toujours la mise en cache de page, ce qui ne vous aide pas.
Aujourd’hui, je vais donc discuter de la correction du temps de génération de la page dans le cadre de la pile. Si vous visualisez une demande normale pour un site Web au moment de la connexion, elle peut ressembler à ceci:
Google vous recommande un temps de génération de page maximum de 200 millisecondes, mais vous voulez vraiment le moins possible. Cependant, la mise en œuvre de ce drapeau peut être un énorme défi lorsque vous avez beaucoup de grands plug – ins et sujets qui exécutent votre code tout le temps. Q
Lorsque j’ai commencé à écrire cette présentation, j’ai pensé à discuter de l’extensibilité entre plusieurs serveurs et différentes architectures, mais d’après mon expérience, cela ne résout pas vraiment les problèmes de performance, qui se multiplieront si vous ne résolvez pas d’abord les problèmes de performance sous – jacents.
Pour résoudre les problèmes potentiels, si vous regardez le temps normal de génération de page, vous pouvez le diviser en blocs, comme le montre la figure ci – dessus. La plus grande partie est généralement votre base de données. C’est le plus gros goulot d’étranglement que vous rencontrez sur le site. Pour résoudre les problèmes de base de données, vous devez optimiser le contenu autant que possible et voir les requêtes. Il y a un excellent plug – in appelé Query Monitor qui vous permet d’analyser toutes les requêtes que le plug – in exécute et de déterminer n’importe quelle zone de problème où vous pouvez ajouter des index ou supprimer complètement le plug – in.
Il est important d’optimiser la configuration MySQL. La mise en cache des requêtes est une chose importante. Étonnamment, tant de gens n’ont pas activé la mise en cache des requêtes dans MySQL, parce que si vous avez beaucoup de tables avec beaucoup de lectures, cela peut être très utile. MySQL Tuner est un petit script exécutable qui analyse votre configuration et fournit des conseils sur la façon d’améliorer la configuration de votre base de données. De plus, la conversion de vos tables en InnoDB – surlignez seulement les tables, pas toutes, car si vous exécutez une grande installation WordPress multisite, comme nous l’avons fait pour edublogs, la conversion de toutes vos tables en InnoDB peut causer de gros problèmes – croyez – moi, nous l’avons déjà fait. Par conséquent, nous avons tendance à nous concentrer davantage sur les tables avec de nombreuses demandes d’écriture, de sorte que les tables globales sur les installations Multi – sites.
Mariadb est une alternative à MySQL. C’est en fait une fourche mysql avec le dernier Code. Tu peux.
Les performances augmentent de 10 à 20% après le passage à mariadb. Si vous avez la chance de l’héberger sur Amazon, Aurora est un nouveau service qui est une alternative à MySQL, avec une amélioration de 2 – 3 fois de la vitesse et de l’étalonnage de MySQL, ce qui est incroyable. Enfin, la meilleure façon d’optimiser le temps passé dans la base de données est de ne jamais laisser la requête arriver en premier, c’est là que le cache d’objets WordPress fonctionne. En général, PHP communique directement avec MySQL à une vitesse lente, mais si vous configurez le cache d’objets, vous pouvez mettre en cache beaucoup de requêtes et de requêtes en mémoire beaucoup plus rapidement.
Certains plug – ins de cache d’objets sont memcache et redis. Ce sont mes recommandations parce qu’elles sont basées sur la mémoire et si vous étendez plusieurs serveurs, elles peuvent partager le même cache. Si vous essayez d’effectuer des opérations basées sur des fichiers ou APC (au lieu du cache PHP), parfois les opérations basées sur des fichiers sont plus lentes que de ne pas les utiliser du tout, donc je vous recommande fortement de le faire. Optimisation PHP: une autre chose sur laquelle vous devriez vous concentrer dans l’analyse de code est que PHP passe une partie de son temps à générer des charges de page sur votre site. L’une des choses les plus importantes que vous pouvez faire est d’optimiser votre code.
Pour les débutants, il y a un excellent plugin appelé P3 (plugin performance profiler) qui vous permet de vous demander: \
Optimisation
Voici quelques – uns des problèmes que j’ai rencontrés lors de l’analyse du Code PHP: requêtes inutiles et non optimisées vous pouvez économiser beaucoup de temps en mettant en cache de nombreuses requêtes dans le cache d’objets. Sur le site de développement wpmu, nous avons lancé de nombreux plug – ins sur de grands sites. Nous avons passé beaucoup de temps à essayer d’utiliser le plug – in d’optimisation de cache d’objets. De plus, trouvez le plug – in statistique et d’autres plug – ins pour la redirection des journaux. Souvent, ils essaient d’écrire dans la base de données chaque fois que la page est chargée: C’est un grand tabou parce que si votre site est très fréquenté, cela ralentit considérablement votre site.
Lorsque PHP a besoin d’invoquer une API externe, comme Google ou Facebook, il doit attendre la réponse de ces services avant de pouvoir terminer la construction de la page. Si le Service API fonctionne lentement, il ralentit également votre site et s’arrête même lorsque le service tiers ne fonctionne pas. Par conséquent, vous devez vous assurer d’utiliser de faibles temps d’arrêt et de les mettre en cache le plus longtemps possible. Ne les cachez pas dans les transitoires, même si Codex dit qu’ils existent pour cela, parce que si le transitoire expire et que le Service API s’arrête, il fera un appel externe à chaque fois que la page est chargée et bloquera votre site parce qu’il a déjà fait cela avec edublogs. Alors fais attention.
Nettoyer complètement les règles de réécriture certains plug – ins essaient d’effacer les règles de réécriture chaque fois qu’une page est chargée. Il s’agit toujours d’un problème universel. Accès direct au système de fichiers toute tentative d’écriture directe au système de fichiers ralentit le site. Une autre façon d’accélérer PHP est de travailler directement sur l’architecture. Ensuite, utilisez nginx, ce qui est fortement recommandé. Je n’utilise pas Apache depuis cinq ans parce qu’il doit charger PHP pour chacun d’eux
Chargement de page, même pour charger CSS, Javascript, etc. Nginx ne transmet que vos requêtes dynamiques à PHP, ce qui vous donne suffisamment d’espace pour votre cerveau. Si vous exécutez plusieurs sites, assurez – vous d’utiliser le cache CDN ou varnish avant le fichier média. Beaucoup de gens ne le savent pas, mais votre téléchargement est en fait réécrit par PHP dans plusieurs sites – ce qui est étrange – mais si vous pouvez empêcher ces demandes d’atteindre PHP par les médias, cela vous donnera beaucoup d’espace. De plus, assurez – vous d’utiliser la dernière version de PHP, comme 5.5, 5.6, car vous pouvez obtenir une augmentation de vitesse de 20% par rapport à certaines versions plus anciennes, comme 5.2. Enfin, si vous n’utilisez pas opcache, vous devenez fou parce qu’il est construit en PHP. Il suffit de l’activer et il double la vitesse de votre demande. Passer à hhvm ou php7 vous pourriez envisager de passer à php7, qui n’a été publié que récemment. Je suis heureux de commencer à le publier bientôt sur le développement d’edublogs et wpmu ainsi que sur certains des sites Web que nous hébergeons. Il montre 2 – 3 fois plus rapide que les versions précédentes de PHP, ce qui est une grande chose. Par conséquent, si possible, envisagez de changer le serveur pour utiliser la dernière version de PHP. Une fois qu’un site en temps réel est installé et fonctionne à grande échelle et qu’un grand nombre de demandes sont exécutées, une autre chose que vous devriez faire est de le surveiller. Pour notre site, nous utilisons statsd, un excellent projet Open source pour l’équipe etsy. Nous l’utilisons avec le plugin wordpress personnalisé que j’ai écrit appelé le client statsd WordPress. Il vous permet d’analyser votre code et ce qui se passe sur le site WordPress sans délai. Les développeurs n’ont qu’à insérer une ligne de code n’importe où sur la pile pour voir combien de temps une requête particulière prend ou combien de fois la requête est déclenchée