web-dev-qa-db-fra.com

Mise à l'échelle d'un WP site de commerce électronique

Relatif à cette question .

Toute recommandation sur des outils, des plugins pour optimiser un grand site de commerce électronique sur WP. Frapper actuellement 1000 articles et 5000 articles supplémentaires à venir. Il semble que les optimisations seraient différentes de celles d’un blog standard servant des milliers d’utilisateurs. Le nombre de magasins en cours de développement sur WP augmente et il serait utile de mettre en place un ensemble d'optimisations.

MM/RC

5
RealityCramp

J'ai développé un site de commerce électronique de produits 55k en utilisant Wordpress avec le plugin Shopp et je peux partager ce que j'ai fait avec MySQL pour obtenir de meilleures performances, le YMMV et certains (ou tous) de ceux-ci peuvent ne pas s'appliquer à votre situation.

Déterminez à quel point vous avez besoin d'augmenter le nombre de tampons/caches en consultant le résultat d'une commande sql "show status" - il existe des outils qui permettent d'améliorer ce résultat et qui peuvent être utiles. J'utilise souvent simplement phpmyadmin pour avoir une idée. http://blog.mysqltuner.com/ est également une ressource et un utilitaire pratiques.

Assurez-vous que votre cache de requêtes est activé et qu'il est suffisamment grand pour avoir un nombre de mémoires mémoire très faible. Assurez-vous que le nombre de lectures de clés n'est pas trop élevé (il s'agit d'une valeur relative). Augmenter key_buffer_size peut vous aider. Assurez-vous que le nombre de tables temporaires créées est faible, réduisez ce nombre en augmentant tmp_table_size.

Activez le journal de requête lent et consignez les requêtes lentes, réexécutez ces requêtes manuellement avec des instructions explicitement, ajoutez des index, modifiez les types de colonne, etc., si nécessaire. Pour une requête, nous devenions insensés aux instructions d'explication (comme en comparant beaucoup, beaucoup plus de lignes que ce qu'elle aurait "dû"), la mise à niveau vers une version plus récente de MySQL a permis à cette même requête d'être beaucoup mieux optimisée (et beaucoup plus rapide) par MySQL. lui-même.

Si vous utilisez l'indexation de texte intégral, je ne crois pas que les tables InnoDB soient une option. Ne mettez pas à jour les produits pendant les périodes de pointe. Si votre package de commerce électronique le prend en charge, vous pouvez minimiser les perturbations client (performances ou autres) en apportant des modifications à votre serveur de transfert, puis en passant au-dessus des tables de produits avec un vidage de la scène et son chargement en production - cecine sera pasfonctionne sans travaux supplémentaires pour le reste de votre installation Wordpress.

Si la conception de votre site et votre UX peuvent la prendre en charge, guider les utilisateurs vers un mode "navigation" ou un mode "recherche" (par exemple: cliquer sur un site ou taper des recherches dans le champ de recherche) peut vous aider à tirer parti d'une base de données très simple. niveau et mise en cache au niveau Wordpress.

Pré-chargez vos caches - la mise en cache simple, comme les caches de requêtes et la mise en cache au niveau Wordpress, peut également être pré-chargée en spiderant votre site avec wget. Vous pouvez également pré-charger le cache pour les recherches en utilisant le comportement de recherche de l'utilisateur (via vos journaux) et en récupérant ces demandes lorsque vous devez remplir les caches.

11
bsr

J'étais curieux de savoir ce que je disais et j'ai lu un peu, voici où je suis.

Tout d'abord, je donnerais W3 Total Cache à essayer. Installez également l'extension APC PHP sur votre serveur et configurez W3 Total Cache pour l'utiliser. Il utilisera APC pour mettre en cache les objets de base de données, PHP, et aidera même à réduire votre CSS et votre JS. Cela pourrait suffire. Surtout si vous intégrez déjà un peu de cache MySQL. W3 Total Cache peut également fonctionner avec Memcache en tant que backend de mise en cache.

Pour la base de données, la mise en cache des requêtes est très utile. J'ai trouvé ce lien et il explique comment il a fait quelque chose pour son blog MU. Citer:

Le cache de requêtes est une petite fonctionnalité intéressante dans MySQL, où il stocke - dans une mémoire dédiée - tous les résultats d’une requête pour une table qui n’a pas changé récemment.

En d’autres termes, dans l’hypothèse où une requête doit extraire une ligne spécifique d’une table - et que cette table n’a pas été modifiée récemment - et que le cache n’a pas été rempli, nécessitant une purge/un nettoyage - la requête/les données peuvent ainsi être satisfaites cache. Bien entendu, le principal avantage est de satisfaire la demande: la base de données n'a pas besoin d'aller sur le disque (qui est généralement la partie la plus lente du système) et peut être immédiatement satisfaite.

C'est donc plutôt cool et cela aidera beaucoup car les produits eux-mêmes ne changeront pas beaucoup. Une autre chose que l'article mentionne est de s'assurer que vous avez beaucoup de mémoire pour stocker la base de données dans Ram, cela accélérera considérablement les requêtes.

Il parle également des types de table et de l'utilisation de MyISAM sur InnoDB pour les tables principalement en lecture seule. Ce raisonnement étant plutôt orienté MU, il pourrait être utile.

En ce qui concerne la mise en place des index. Si vous en avez beaucoup, ils peuvent ralentir les insertions et occuper plus d’espace disque. Mais comme je n’imagine pas qu’une grande quantité de produits soit ajoutée régulièrement, je pense que cela est acceptable. Et avec l’espace disque peu coûteux….

1
Ryan Gibbons