Dans quelle mesure WordPress évolue-t-il?
3 réponses
- votes
-
- 2010-09-01
Detoute évidence, rienne semet à l'échelle aussibien que lesfichiers statiques servispar un serveur Web rapide et tout CMS qui doit déterminer ce qu'ilfaut chargerpuis chargerne fonctionnerapas aussibien,WordPress ou autre. L'un desproblèmesest lenombre de requêtes debase de données requisespar demande d'URLet mes 2 annéesprécédentes d'expérience detravailexclusivement avec Drupalet maintenantplus de 2 ans avec WordPress,c'est que WordPressestbien meilleur dans ce département.
Cela dit,presque rien avec quelquepuissance que ce soit va évoluer "out-of-the-box" ;toutest question de quepouvez-vousfaire aufuret àmesure que vosbesoins d'évolutivité augmentent?
Dans lebas de l'échelle "beaucoup detrafic" ,il y a d'excellentsplugins demiseen cache et des intégrations avec des CDNbonmarché ,vouspouvezfaire untrèsbontravail avec unbudget sansinformatiqueet unpetit budget d'hébergement Voici quelques autres questions & amp; réponses àexaminer:
- Étapespour optimiser WordPressen ce qui concerne la charge du serveur?
- Optionspour CDN avec WordPress,y compris lesplug-ins compatibles?
- Configurer WordPresspour lamiseen cache Amazon CloudFront?
Ilexiste des options de profilagepouridentifier lesgoulots d'étranglement desperformances :
Unefois lesgoulots d'étranglementidentifiés,vouspouvezeffectuer une optimisation localisée avec des élémentstels que l ' API Transients . Ce Q & amp; A donne unexemple quipeut être optimisé à l'aide de l'API Transientset montre comment:
Si vous avez vraimentenvie de sortir lesgros canons ,vouspouvez configurer Memcached , HyperDB , Nginx et/oupluspour accélérer les choses (il semble que ce dernier évolue vraimentpour obtenir une évolutivitéincroyable de WordPress):
- Activez Memcachedpour votre WordPress
- Comment accélérer WordPress avec Nginxet WP Super Cache
- HyperDB
- Nginx comme cacheproxyfrontalpour WordPress
Etenfin,ilexiste des hébergeurs Web émergents axés sur WordPresset spécialisés dans lesperformances tels que WP Engine , ZippyKid et autres:
Donc, labonnenouvelleest quetoutes les échelles sonttrèsbien ; dutrèsbas degamme degratuitet facile avec la complexitétechniqueet le coûtne font qu'augmenter àmesure que letrafic augmente considérablement. Commencezpetit avec WordPresset ce seragénial. Si votretrafic augmenteet que vous lemonétisezmême raisonnablementbien,vous constaterez qu'ilesttrès coûteux àmettre à l'échelle selon vosbesoins.
Aumoins l'OMI. :)
Clearly nothing scales as well as static files served by a fast web server and any CMS that has to figure out what to load and then load it will not perform as well, WordPress or otherwise. One of the issues is the number of database queries required per URL request and my 2 prior years experience working exclusively with Drupal and now 2+ years with WordPress is that WordPress is much better in that department.
That said, almost nothing with any power is going to scale "out-of-the-box"; it's all about what can you do as your scalability needs grow?
On the low end of "lots of traffic" there are great caching plugins and integrations with inexpensive CDNs you can do a pretty good job on a no-IT budget and low hosting budget. Here are some other questions & answers to review:
- Steps to Optimize WordPress in Regard to Server Load?
- Options for CDN with WordPress Including Supporting Plugins?
- Configuring WordPress for Amazon CloudFront Caching?
There are options for profiling to identify performance bottlenecks:
Once bottlenecks are identified you can do localized optimization with things like the Transients API. This Q&A gives an example that can be optimized using Transients API and shows how:
If you thing really get want to pull out the big guns you can configure Memcached, HyperDB, Nginx and/or more to speed things up (it seems the latter is really evolving into the way to get amazing scalability out of WordPress):
- Enable Memcached for your WordPress
- How To Speed Up WordPress With Nginx And WP Super Cache
- HyperDB
- Nginx as a front-end proxy cache for WordPress
And finally there are emerging WordPress-focused webhosts specializing in performance such as WP Engine, ZippyKid and others:
So the good news is all of the scales very nicely; from the very low end of free and easy with technical complexity and cost only grow as traffic significantly grows. Start small with WordPress and it will be great. If your traffic does grow and you are monetizing it even reasonably well you'll find it very cost effect to scale as you need it.
At least IMO. :)
-
Mercipour une réponse aussi approfondie.Jeme demande comment les API WordPress doiventfonctionner avec,en mettanten cache desparties d'unepage -il vous suffit donc degénérer lesparties spécifiques à l'utilisateuret non lapageentièrepour les utilisateurs connectés ouen utilisant Edge Sideincludespour les sites àforttrafic.Thanx for such a thorough response. I wonder, how is the WordPress APIs to work with, caching parts of a page - so you only need to generate the user specific parts and not the entire page for logged in users or using Edge Side Includes for the high traffic sites.
-
Mike,tues unebête!Partout oùje vais sur ce site,je tombe sur vos réponseset elles sonttoutes super!Mike, you are a beast! Everywhere I go on this site, I come across your answers and they're all great!
- 0
- 2010-09-02
- dgw
-
* @googletorp *: Vouspouvez certainement lefaire,il suffit d'un codefabriqué à lamain.J'aimerais voir si un cadrepourrait être développépour le rendreplusfacile,maisje me concentre actuellement sur lamiseen œuvre de champs depublicationpersonnalisés robusteset richesen fonctionnalités.Peut-êtrebientôt.:) * @ Voyagerfan5761 *: Merci.:)*@googletorp*: You definitely can do that, it just takes hand-crafted code. I'd love to see if a framework could be developed to make it easier but I'm currently focused on trying to implement robust and feature-rich custom post fields. Maybe sometime soon. :) *@Voyagerfan5761*: Thanks. :)
- 0
- 2010-09-03
- MikeSchinkel
-
http://www.kiragiannis.com/cloud-computing/comparing-managed-wordpress-hosting-providers-zippykid-vs-wpengine/Celapourrait apporter desmétriques à la conversation.http://www.kiragiannis.com/cloud-computing/comparing-managed-wordpress-hosting-providers-zippykid-vs-wpengine/ This might bring some metrics to the conversation.
- 0
- 2011-11-10
- Geo
-
- 2011-02-24
-
N'attendezpasgrand-chose de l'hébergementpartagé -ne blâmezpas WordPresspour la lenteur si vous êtes sur un hôtepartagé. Les hôtespartagéspeuvententasser desmilliers de comptes dans un seul serveur. Vouspouvez doncpassertoute lajournée à optimiser un compte à 10 $/moiset celan'apas d'importance. Méfiez-vous également desmots à lamode dumarketing - cen'estpasparce qu'il dit "cloud" que vousne partagezpas un serveur avec des centaines ou desmilliers depersonnes.
-
Jene pensepas que lesplugins de cache soientnécessaires à ce stade. Si vous regardez le code source WP,ilexiste déjà unemiseen cache avancéeintégrée au cœur. Un cache du cache du cache du cache - attention,celapeut être contre-productif.
-
Laprincipale chose qui vous ralentitest la lenteur des requêtes MySQLet WordPressprêt à l'emploine devraitpas vousposer deproblèmeici. Cependant,j'ai dû "LIMITER"mes requêtes de commentaires carj'avaisplus de 50 000 commentaires. (Est-ceencore résolu?) Deplus,si vousfaites quelque chose d'atypique (comme desmilliers de catégories?),Celapourrait égalementposerproblème.
-
J'utilise un Linode 512 avec NginXet "top"montre que PHPet NginXfont leurtravailen moins de 1/100e de secondepar requête. Presquetout letempsprocesseurest lié à MySQL. Vouspourriez servir 1million depagesparmois avec un Linode à 20 $,mais unefois que vous commencez à ajouter despluginset desphotos,je pense que vous aurezbesoin d'un Linode «1 Go». Demonpoint de vue,c'est assez linéaire: si lespages vues doublent,doublez simplement lataille de votre Linode.
Clause denon-responsabilité:je netravaillepaspour Linode.
Mise àjour (~ 2 ansplustard)puisque vous souhaitezmettreen cache desparties d'unepage avec PHP,voici une solution simple quej'utiliseet quiest étonnamment rapide. Jemetsen cacheplusieursparties/portions séparéesparpageen 1/100e de seconde. On dirait qu'un disque virtuelpourrait rendre celaencoreplus rapide,maisilesttrès rapidepourmesbesoins:
$cache_file = "./cache/portion-1". $since; // maybe round() this $since timestamp $cache_life = 1000; // seconds to keep this cached $filemtime = filemtime($cache_file); // returns FALSE if file does not exist if (!$filemtime or (time() - $filemtime >= $cache_life)) { // heavy lifting starts $output = 'Heavy!'; // heavy lifting ends if (!file_put_contents($cache_file,$output,LOCK_EX)) { echo 'error'; } // save the cache echo $output; } else { // load from cache $output = file_get_contents($cache_file); echo $output; }
Don't expect much from shared hosting--don't blame WordPress for slowness if you're on a shared host. Shared hosts might cram 1000s of accounts into one server. So you can spend all day optimizing a $10/month account and it won't matter. Also watch out for marketing buzzwords--just because it says "cloud" doesn't mean you're not sharing one server with 100s or 1000s of people.
I don't think cache plugins are necessary at this point. If you look at the WP source code, there's already advanced caching baked into the core. A cache of the cache of the cache of the cache--watch out, this can be counterproductive.
The main thing slowing you down is slow MySQL queries and WordPress out-of-the-box shouldn't give you trouble here. However, I had to "LIMIT" my comment queries because I had 50,000+ comments. (Is this fixed yet?) Also, if you're doing anything atypical (like 1000s of categories?) that could be a problem too.
I use a Linode 512 with NginX and "top" shows PHP and NginX doing their work in less than 1/100th of a second per request. Nearly all the CPU time is tied up with MySQL. You could serve 1 million pages per month with a $20 Linode, but once you start adding plugins and photos, I think you'll need a "1GB" Linode. From my point of view, it's pretty much linear: If pageviews double, just double the size of your Linode.
Disclaimer: I don't work for Linode.
Update (~2 years later) since you want to cache parts of a page with PHP, here's a simple solution that I use that's surprisingly fast. I'm caching several separate parts/portions per page within 1/100th of a second. Seems like a ramdisk could make this even faster but it's plenty fast for my needs:
$cache_file = "./cache/portion-1". $since; // maybe round() this $since timestamp $cache_life = 1000; // seconds to keep this cached $filemtime = filemtime($cache_file); // returns FALSE if file does not exist if (!$filemtime or (time() - $filemtime >= $cache_life)) { // heavy lifting starts $output = 'Heavy!'; // heavy lifting ends if (!file_put_contents($cache_file,$output,LOCK_EX)) { echo 'error'; } // save the cache echo $output; } else { // load from cache $output = file_get_contents($cache_file); echo $output; }
-
- 2017-06-12
Il y afinalement 3 choses qui ralentissent WordPress àgrande échelle,et elles se résument à ceci:
- Pile d'hébergement - vous avezbesoin d'unbon hôte avec le dernier logiciel - PHP 7,Nginx,Varnish,Redis,fail2banet PerconaDB sonttous debons choix
- Pas de scan detable - denombreuxplugins sont écritspar des codeurs amateurs quine saventmêmepas ce qu'est un scan detable. Deux choses sontnécessairespour éviter les analyses detable: unindex utilisableet une requête écrite demanière àpouvoir utiliser l'index
- Pas oupeu de requêtes SQL dans lesboucles PHP - certains codes depluginsn'ont clairement ététestés que sur des sitesminusculeset,pour une raison ou une autre,parcourent chaqueproduit de votrebase de donnéeset effectuent unnouvel appel SQLpour chaqueproduit/publication. Idéalement,vous voulezmoins de 100 requêtes SQLparpage - cela semblebeaucoup,mais cen'estpas vraimentet avec & lt; 100,vous obtiendrez un TTFB d'environ 200msnonmisen cache.
Unefois que vous avezmisen place ce quiprécède,vouspouvez ajouter lamiseen cache -parexemple Vernis,CDN,miseen cache depage,etc.
Si vous devezeffectuer unemontéeen charge,vouspouvez créer un clusteren utilisant PerconaDB XtraDBpour labase de donnéeset Unisonpour lesfichiers. De cettefaçon,vouspouvez avoir 1nœud comme votre wp-adminet cron runner,et les autresnœuds servant letrafic Web derrière un équilibreur de charge.
There are ultimately 3 things that slow down WordPress at scale, and they boil down to this:
- Hosting stack - you need a good host with the latest software - PHP 7, Nginx, Varnish, Redis, fail2ban and PerconaDB are all good choices
- No table scans - many plugins are written by amateur coders who do not even know what a table scan is. Two things are needed to avoid table scans - a usable index and a query written in such a way that it can use the index
- No or few SQL queries inside PHP loops - some plugin code has clearly only been tested on tiny sites, and for one reason or another will loop through every product in your database and make a fresh SQL call for each product/post. You ideally want fewer than 100 SQL queries per page - sounds like a lot, but it's not really and with < 100 you will get a TTFB of circa 200ms uncached.
Once you have the above in place, you can then add caching - e.g. Varnish, CDNs, page caching etc.
If you need to scale out, you can create a cluster using PerconaDB XtraDB for the database and Unison for the files. That way, you can have 1 node as your wp-admin and cron runner, and the other nodes serving web traffic behind a load balancer.
Avec lenouveau WordPresset sesnouvellesfonctionnalités,il semble que WordPress soit capable debien plus qu'un simplemoteur deblog.Mais dans quellemesure WordPressest-il utilisépar 10 000 -> 100 000 utilisateursparjour?
Avec autant d'utilisateurs,unegrandepartie sera d'avoir unebonne stratégie de cache,mais dans quellemesure WordPressest-ilbien développépour vous aider,vous simplifier latâcheet vous donner le contrôle dont vous avezbesoin.Fx étant capable demettreen cache unepartie d'unepageet de restituer uniquement lespartiespersonnaliséespar l'utilisateur,deprendreen charge la configuration de labase de donnéesmaître/esclaveet destrucs comme ça?