Quanto è scalabile WordPress?
3 risposta
- voti
-
- 2010-09-01
Chiaramente nulla è scalabile comei file statici serviti da un server web veloce e qualsiasi CMS che deve capire cosa caricaree poi caricarlononfunzionerà altrettantobene,WordPress o altro. Uno deiproblemi èilnumero di query al database richiesteper richiesta URLe lamiaesperienza di 2 anniprecedenti lavorandoesclusivamente con Drupale ora 2+ anni con WordPress è che WordPress èmoltomeglioin quel reparto.
Detto questo, quasinulla con un qualsiasipotere staper scalare "out-of-the-box" ; sitratta di cosapuoifare quando letueesigenze di scalabilità crescono?
Nellafasciabassa di "moltotraffico" ci sono ottimiplug-in dimemorizzazionenella cache e integrazioni con CDNeconomici chepuoifare abbastanzabene lavoro con unbudget senza ITe budget di hostingbasso. Ecco alcune altre domande & amp; risposte alla revisione:
- Passaggiper ottimizzare WordPressin relazione al carico del server?
- Opzioniper CDN con WordPress,inclusii plugin di supporto?
- Configurazione di WordPressper lamemorizzazionenella cache di Amazon CloudFront?
Sono disponibili opzioniper la creazione diprofiliperidentificarei colli dibottiglia delleprestazioni :
Una voltaidentificatii colli dibottiglia,puoieseguire l ' ottimizzazione localizzata con cose come l' API Transients . Questa domandae rispostafornisce unesempio chepuòessere ottimizzato utilizzando l'API Transientse mostra come:
Se vuoi davvero tirarefuorii grossi calibri puoi configurare Memcached , HyperDB , Nginx e/o altroper velocizzare le cose (sembra che quest'ultimo si stia davveroevolvendoper ottenere una straordinaria scalabilità da WordPress):
- Abilita Memcachedperiltuo WordPress
- Come velocizzare WordPress con Nginxe WP Super Cache
- HyperDB
- Nginx come cacheproxyfront-endper WordPress
Einfine ci sono webhostemergentiincentrati su WordPress specializzatiin prestazioni come WP Engine , ZippyKid e altri:
Quindi labuonanotizia è chetutte le scale sonomoltobelle ; dallafasciamoltobassa digratuitoe facile con complessitàtecnicae costi crescono solo con la crescita significativa deltraffico. Iniziain piccolo con WordPresse saràfantastico. Seiltuotraffico crescee lo staimonetizzando anche abbastanzabene,scoprirai che èmolto redditizio scalare quandone haibisogno.
Almeno IMO. :)
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. :)
-
Grazieper una risposta così completa.Mi chiedo,comefunzionano le API di WordPress,memorizzandonella cacheparti di unapagina,quindi devi sologenerare leparti specifiche dell'utentee non l'interapaginapergli utenti che hannoeffettuato l'accesso o utilizzando Edge Side Includeperi siti ad altotraffico.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,sei unabestia!Ovunque vada su questo sito,trovo letue rispostee sonotuttefantastiche!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 *: Sicuramentepuoifarlo,richiede solo codice creato amano.Mipiacerebbe vedere se èpossibile sviluppare unframeworkper renderlopiù semplice,ma almomento sono concentrato sultentativo diimplementare campi dipostpersonalizzati robustie ricchi difunzionalità.Forsepresto.:) * @ Voyagerfan5761 *: Grazie.:)*@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/Questopotrebbeportare alcunemetriche alla conversazione.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
-
Non aspettartimolto dall'hosting condiviso:nonincolpare WordPressper la lentezza se utilizzi un host condiviso. Gli host condivisipotrebbero stiparemigliaia di accountin un unico server. Quindipuoipassaretuttoilgiorno a ottimizzare un account da $ 10/mesee nonimporta. Fai anche attenzione alleparole d'ordine delmarketing: soloperché dice "cloud"non significa chenon stai condividendo un server con centinaia omigliaia dipersone.
-
Non credo chei plug-in della cache sianonecessari a questopunto. Seguardiil codice sorgente di WP,c'ègià un caching avanzatointegratonel core. Una cache della cache della cache della cache: attenzione,questopuòessere controproducente.
-
La cosaprincipale cheti rallenta sono le query MySQL lentee WordPresspronto all'usonon dovrebbe dartiproblemi qui. Tuttavia,ho dovuto "LIMITARE" lemie domande di commentoperché avevo oltre 50.000 commenti. (Ègià stato risolto?) Inoltre,se staifacendo qualcosa di atipico (comemigliaia di categorie?),Anche questopotrebbeessere unproblema.
-
Uso un Linode 512 con NginXe "top"mostra PHPe NginX chefannoil loro lavoroin meno di 1/100 di secondoper richiesta. Quasituttoiltempo della CPU è legato a MySQL. Potrestipubblicare 1milione dipagine almese con un Linode da $ 20,ma una volta cheinizi ad aggiungereplug-ine foto,penso che avraibisogno di un Linode da "1 GB". Dalmiopunto di vista,èpraticamente lineare: se le visualizzazioni dipagina raddoppiano,raddoppia le dimensioni deltuo Linode.
Disclaimer:non lavoroper Linode.
Aggiornamento (~ 2 anni dopo) dato che desiderimemorizzarenella cacheparti di unapagina con PHP,ecco una soluzione semplice che uso che è sorprendentemente veloce. Stomemorizzandonella cache diverseparti/porzioni separateperpaginaentro 1/100 di secondo. Sembra che un ramdiskpossa renderlo ancorapiù veloce,ma èmolto veloceper lemie esigenze:
$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
Allafine ci sono 3 cose che rallentano WordPress su larga scalae si riducono a questo:
- Stack di hosting: ènecessario unbuon host conil softwarepiù recente: PHP 7,Nginx,Varnish,Redis,fail2bane PerconaDB sonotuttebuone scelte
- Nessuna scansione ditabelle:moltiplugin sono scritti daprogrammatori dilettanti chenon sannonemmeno cosa sia una scansione ditabelle. Sononecessarie due coseperevitare le scansioni delletabelle: unindice utilizzabilee una query scrittain modotale dapoter utilizzare l'indice
- Nessuna opoche query SQL all'interno di cicli PHP: alcuni codici diplugin sono stati chiaramentetestati solo supiccoli sitie per unmotivo oper l'altroeseguiranno un ciclo attraverso ogniprodottonel databasee effettueranno unanuova chiamata SQLper ogniprodotto/articolo. Idealmente,desiderimeno di 100 query SQLperpagina: sembramolte,manon lo è davveroe con & lt; 100 otterrai un TTFB di circa 200ms senza cache.
Una voltainstallato quanto sopra,puoi aggiungere lamemorizzazionenella cache,ades. Vernice,CDN,memorizzazionenella cache dellepagineecc.
Se ènecessarioeseguire la scalabilità orizzontale,èpossibile creare un cluster utilizzando PerconaDB XtraDBperil databasee Unisonperi file. In questomodo,puoi avere 1nodo come wp-admine cron runnere gli altrinodi che servonoiltraffico web dietro un loadbalancer.
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.
Conilnuovo WordPresse le suenuovefunzionalità,sembra che WordPress sia capace dimolto dipiù di un semplicemotore diblog.Ma in chemisura WordPress viene utilizzato da 10.000 -> 100.000 utenti algiorno?
Con cosìtanti utenti,unaparteimportante sarà avere unabuona strategia di cache,ma quanto è stato sviluppato WordPressper aiutarti,rendendolofacilee dandotiil controllo di cui haibisogno.Fx èin grado dimemorizzarenella cacheparte di unapaginae visualizzare solopartipersonalizzate dall'utente,supportare la configurazione del databasemaster/slavee cose delgenere?