Étapes pour optimiser WordPress en ce qui concerne la charge du serveur?
-
-
si vousexécutez votre site sur vps,vous devriezessayer le cache redis.if you run your site on vps , you should try redis cache.
- 0
- 2014-04-05
- ahmetlutfu
-
14 réponses
- votes
-
- 2010-08-18
Vouspouvezinstaller WordPress sur Nginx. Ilexiste un certainnombre de ressourcespour vous aider:
Certainesinformations sur lesperformances de ce dernier lien (qui semble être une configuration unpeu différente des autres):
J'ai donc décidé demettre unproxy devant de wordpress au cache statique autant quepossible. TOUSnon authentifiés letraficest servi directement depuis le cache defichiersnginx,prenant certaines requêtes (comme lagénération deflux RSS) àpartir de 6 pages/seconde à 7000+pages/seconde. Oof. Nginxgère également lajournalisationet gzipping,laissant lebackendplus lourd apaches àfaire ce qu'ilsfont demieux: servir pages wordpress dynamiques uniquement lorsque nécessaire.
...
Surnginx - c'esttellementefficace que c'est effrayant. Jene l'aijamais vu utiliserplus de 10 à 15méga de RAMet unblip de CPU,même sousnotre charge laplus lourde. Notre lesgraphiquesganglionnairesne mententpas:nous avons divisépar deux nosbesoinsen mémoire,ont doublénotre débit du réseau sortantet complètementnivelénotre charge.nous n'onteupratiquement aucunproblème depuis nous avons configuré cela.
You could install WordPress on Nginx. There are a number of resources to help:
Some performance information from that last link (which appears to be a bit different setup than the others):
So I decided to put a proxy in front of wordpress to static cache as much as possible. ALL non-authenticated traffic is served directly from the nginx file cache, taking some requests (such as RSS feed generation) from 6 pages/second to 7000+ pages/second. Oof. Nginx also handles logging and gzipping, leaving the heavier backend apaches to do what they do best: serve dynamic wordpress pages only when needed.
...
On nginx – it’s so efficient it’s scary. I’ve never seen it use more than 10 to 15 meg of RAM and a blip of CPU, even under our heaviest load. Our ganglia graphs don’t lie: we halved our memory requirements, doubled our outgoing network throughput and completely leveled out our load. We have had basically no problems since we set this up.
-
Quelqu'un a-t-il des statistiques sur les économies de vitesse liées à l'utilisation de Nginx?Anyone have any stats on the speed savings of using Nginx?
- 0
- 2010-08-18
- Mike Lee
-
Mike,j'ai ajouté un autre lienet desinformations sur cepost.Mike, I added another link, and some information from that post.
- 0
- 2010-08-18
- Travis Northcutt
-
J'ai déplacémonblogprincipal d'un serveur 1Gexécutant Apache vers un serveur 512Mexécutant Nginx.Fonctionneplusfacilement,malgré la diminution de la RAM.Certes,j'ai d'autres servicesfonctionnant sur le serveur 1G (email,imap,mailman,plusieurs autres sites Web àfaibletrafic).I moved my main blog from a 1G server running Apache to a 512M server runing Nginx. Runs more smoothly, despite the decrease in RAM. Admittedly, I have other services running on the 1G server, though (email, imap, mailman, several other low-traffic web sites).
- 0
- 2012-06-07
- Dougal Campbell
-
NB:exécuter WordPress surnginxest différent de l'utilisation denginx comme cacheproxy devant Wordpress.NB running WordPress on nginx is different from using nginx as a proxy cache in front of Wordpress.
- 0
- 2013-05-02
- sam
-
- 2010-08-14
Définissez lesexpirations côté clientpour des élémentstels que css,images,JavaScript,etc. quin'ontpasbesoin d'êtretéléchargés ànouveaupour chaquepage vue. Ceci,de loin,afait laplusgrande différence dans lestemps de chargement demon site. Letéléchargement leplus rapideest letéléchargement quine s'estjamaisproduit ...
# BEGIN Expire headers <IfModule mod_expires.c> ExpiresActive On ExpiresDefault "access plus 7200 seconds" ExpiresByType image/x-icon "access plus 2592000 seconds" ExpiresByType image/jpeg "access plus 2592000 seconds" ExpiresByType image/png "access plus 2592000 seconds" ExpiresByType image/gif "access plus 2592000 seconds" ExpiresByType application/x-shockwave-flash "access plus 2592000 seconds" ExpiresByType text/css "access plus 2592000 seconds" ExpiresByType text/javascript "access plus 2592000 seconds" ExpiresByType application/x-javascript "access plus 2592000 seconds" ExpiresByType text/html "access plus 7200 seconds" ExpiresByType application/xhtml+xml "access plus 7200 seconds" </IfModule> # END Expire headers # BEGIN Cache-Control Headers <IfModule mod_headers.c> <FilesMatch "\\.(ico|jpe?g|png|gif|swf|gz)$"> Header set Cache-Control "max-age=2592000, public" </FilesMatch> <FilesMatch "\\.(css)$"> Header set Cache-Control "max-age=2592000, public" </FilesMatch> <FilesMatch "\\.(js)$"> Header set Cache-Control "max-age=2592000, private" </FilesMatch> <filesMatch "\\.(html|htm)$"> Header set Cache-Control "max-age=7200, public" </filesMatch> # Disable caching for scripts and other dynamic files <FilesMatch "\.(pl|php|cgi|spl|scgi|fcgi)$"> Header unset Cache-Control </FilesMatch> </IfModule> # END Cache-Control Headers
Vouspouvezpré-gzipertout ce que vouspouvez raisonnablement (7-zipest unbon outilpour cela) & amp;téléchargez-le aumêmeendroit que lefichier que vous venez de compresser. Modifiez .htaccesspour servir lesfichierspré-gzippés,comme ci-dessous. Lamiseen gardeiciest que vous devez vous rappeler de les re-gzip si/lorsque vousmettez àjour des choses. Cela réduit la surcharge duprocesseur,en dehors de l'analyse .htaccess.
RewriteEngine on #Check to see if browser can accept gzip files. If so and we have it - serve it! ReWriteCond %{HTTP:accept-encoding} gzip RewriteCond %{HTTP_USER_AGENT} !Safari #make sure there's no trailing .gz on the url ReWriteCond %{REQUEST_FILENAME} !^.+\.gz$ #check to see if a .gz version of the file exists. RewriteCond %{REQUEST_FILENAME}.gz -f #All conditions met so add .gz to URL filename (invisibly) RewriteRule ^(.+) $1.gz [QSA,L]
Cecin'est qu'une réponsebrute. Ilexiste denombreuses variantes sur cethème. J'aiblogué à ce sujetet ajouté quelques références à des articlesplus approfondis sur http://icanhazdot.net/2010/03/23/some-wordpress-stuff/. Lisez celaet,plusimportantencore,les références queje cite - ce sont debonnes ressources.
Sachez que si vousbricolez souvent,les utilisateurs devront actualiser leur cache.
Unplugin quej'aitrouvétrès utileest également wp-minify . La chose à surveiller avec celui-ciest que vous devezexclure les éléments spécifiques à lapage (formulaire de contact,curseur de lapage d'accueil,etc.) afin dene pastélécharger ànouveau l'ensemble des css,JS,etc.pour chaquepage. C'est unbonmoyen de réduire,combiner & amp; compressez votre CSS debase,JS,etc. Cela réduitbeaucoup les requêtes http. Wp-minifyfonctionnebien avec supercacheet aussi avec lesen-têtes d'expiration quej'ai détaillés ci-dessus.
Utilisez Yslow dans Firebug (Firefox) ou similairepour surveiller vos requêtes httpet ce quiest compressé ounon. Jetez également un œil auxen-têtes d'expiration. Vous verrezbientôt ce que vouspouvez améliorer.
Set client-side expiries for things like css, images, JavaScript etc which don't need to be redownloaded for each page view. This, by far, made the biggest difference to my site loading times. The fastest download is the download that never happened ...
# BEGIN Expire headers <IfModule mod_expires.c> ExpiresActive On ExpiresDefault "access plus 7200 seconds" ExpiresByType image/x-icon "access plus 2592000 seconds" ExpiresByType image/jpeg "access plus 2592000 seconds" ExpiresByType image/png "access plus 2592000 seconds" ExpiresByType image/gif "access plus 2592000 seconds" ExpiresByType application/x-shockwave-flash "access plus 2592000 seconds" ExpiresByType text/css "access plus 2592000 seconds" ExpiresByType text/javascript "access plus 2592000 seconds" ExpiresByType application/x-javascript "access plus 2592000 seconds" ExpiresByType text/html "access plus 7200 seconds" ExpiresByType application/xhtml+xml "access plus 7200 seconds" </IfModule> # END Expire headers # BEGIN Cache-Control Headers <IfModule mod_headers.c> <FilesMatch "\\.(ico|jpe?g|png|gif|swf|gz)$"> Header set Cache-Control "max-age=2592000, public" </FilesMatch> <FilesMatch "\\.(css)$"> Header set Cache-Control "max-age=2592000, public" </FilesMatch> <FilesMatch "\\.(js)$"> Header set Cache-Control "max-age=2592000, private" </FilesMatch> <filesMatch "\\.(html|htm)$"> Header set Cache-Control "max-age=7200, public" </filesMatch> # Disable caching for scripts and other dynamic files <FilesMatch "\.(pl|php|cgi|spl|scgi|fcgi)$"> Header unset Cache-Control </FilesMatch> </IfModule> # END Cache-Control Headers
You may pre-gzip everything you reasonably can (7-zip is a good tool for this) & upload it in the same place as the file you just gzipped. Change .htaccess to serve the pre-gzipped files, as below. The caveat here is you need to remember to re-gzip them if/when you update things. This cuts out the CPU overhead, apart from parsing .htaccess.
RewriteEngine on #Check to see if browser can accept gzip files. If so and we have it - serve it! ReWriteCond %{HTTP:accept-encoding} gzip RewriteCond %{HTTP_USER_AGENT} !Safari #make sure there's no trailing .gz on the url ReWriteCond %{REQUEST_FILENAME} !^.+\.gz$ #check to see if a .gz version of the file exists. RewriteCond %{REQUEST_FILENAME}.gz -f #All conditions met so add .gz to URL filename (invisibly) RewriteRule ^(.+) $1.gz [QSA,L]
This is just a raw answer. There are a lot of variations on this theme. I blogged about this and added quite a few references to more in-depth articles at http://icanhazdot.net/2010/03/23/some-wordpress-stuff/. Read that and, more importantly, the references I point to - they are good resources.
Be aware that if you tinker often then users will need to refresh their cache.
A plugin I found very useful too is wp-minify. The thing to watch with this one is that you should exclude page-specific items (contact form, front page slider etc) so you're not re-downloading the whole set of css, JS etc for each page. It is a good way to minify, combine & compress your baseline CSS, JS etc. It cuts down on http requests a lot. Wp-minify plays well with supercache and also with expiry headers that I detailed above.
Use Yslow in Firebug (Firefox) or similar to monitor your http requests and what is and isn't compressed. Have a look at expiry headers in there too. You will soon see what you can improve.
-
Au cas où quelqu'unenvisage de copier/coller vos réécritures,il y a uneinstance de "ReWrite" qui devrait être corrigée.In case someone plans to copy/paste your Rewrites, there's an instance of "ReWrite" that should be corrected.
- 2
- 2010-12-12
- Jeremy L
-
quelleinstance?which instance?
- 2
- 2010-12-19
- CAD bloke
-
@Nerdling Pouvez-vousindiquer quelleinstance doit être corrigée?Je voudrais utiliser le code ci-dessus.@Nerdling Could you please point out which instance needs fixing? I'd like to use the above code.
- 0
- 2012-12-28
- helgatheviking
-
Celapeut être lié aufait que lemodgzipest obsolète dans les versions ultérieures d'Apache.J'ai du changer lemien pourmod deflate récemment.It may be related to mod gzip being deprecated in later versions of Apache. I had to change mine to mod deflate recently.
- 0
- 2012-12-28
- CAD bloke
-
C'est unbon conseilpour améliorer lesperformances du client,mais celan'affectepas directement l'utilisation des ressources du serveurpar WordPress.This is good advice for improving client performance, but it doesn't directly affect WordPress's use of server resources.
- 0
- 2013-05-02
- sam
-
@Sam - Oui,cela réduit la charge de requête car Apachepeut servir un 304 (nonmodifié) au lieu de servir,oupotentiellement demander à WordPress degénérer unfichier HTMLen utilisant PHPpour servir.@Sam - Yes it does, it reduces the request load because Apache can serve a 304 (Not modified) instead of serving, or potentially asking WordPress to generate a HTML file using PHP to serve.
- 0
- 2013-05-03
- CAD bloke
-
Pour unbonensemble de valeurspar défautpour .htaccess,leprojet HTML5 Boilerplatefournit unmodèle. https://github.com/h5bp/html5-boilerplate/blob/master/dist/.htaccessFor a good set of defaults for .htaccess the HTML5 Boilerplate project provides a template. https://github.com/h5bp/html5-boilerplate/blob/master/dist/.htaccess
- 2
- 2014-11-18
- Paul Sheldrake
-
- 2010-08-12
Réduisez lenombre deplugins que vousexécutez uniquementpour ce dont vous avez vraimentbesoin. Soyezparticulièrement attentif auxplugins qui ajoutent du codejavascriptet CSS à chaque chargement depage,même lorsque ce coden'estpas utilisé sur lapage.
Si vous créez votreproprethème àpartir de zéro,décomposez votre CSS afin que lesfonctionnalités quine sontnécessaires quepour desmodèles depage ou destypes de vueparticuliers (publication unique,archives,catégorie,etc.)ne soient chargées que lorsque celaestnécessaire. >
Configurez W3TCpour utiliser un CDN (comme Amazon CloudFront,ou l'un des autresprisen chargepar W3TC).
Voyez si les options Minifyfonctionnentpour vous (certainspluginsgénèrentjs/css quine minifierontpasbien,alors assurez-vous detester votre site après avoir activé lafonction Minify).
Si vous avez le contrôletotal de votre serveur MySQL,assurez-vous que le query_cacheest activé. Utilisez un script de réglage MySQL pourtrouver d'autresmoyens d'optimiser la configuration de votrebase de données.
Si l'utilisation d'un CDNposeproblèmepour une raison quelconque,configurezmod_expires dans votre configuration Apache. Définissez des délais d'expiration aussi longs que raisonnablespour lestypes statiquestels que lesimages,css,javascript,vidéo,audio,etc.
Minimize the number of plugins you run to only what you really need. Especially be aware of plugins that add javascript and CSS code on every page load, even when that code isn't being used on the page.
If you are creating your own theme from scratch, break your CSS down so that features that are only need for particular page templates or view types (single post, archives, category, etc) are only loaded when needed.
Configure W3TC to use a CDN (like Amazon CloudFront, or any of the others supported by W3TC).
See if the Minify options work for you (some plugins generate js/css that won't minify nicely, so be sure to test your site after activating the minify feature).
If you have full control of your MySQL server, make sure that you have the query_cache turned on. Use a MySQL tuning script to find other ways to optimize your database config.
If using a CDN is problematic for some reason, configure mod_expires in your apache setup. Set expiration times as long as reasonable for static types like images, css, javascript, video, audio, etc.
-
- 2010-08-12
Exécutez memcached et utilisez un cache d'objets pour réduire lenombre de requêtes debase de données.Celamet en cache les données de labase de données,plutôt que lespages.Jene saispas si w3-total-cache lefait déjà.
Assurez-vous que vousexécutez un cache d'opcode comme APC .(Il yen aplusieurs autres disponibles.)
Run memcached and use an object cache to reduce the number of database queries. This caches data from the database, rather than pages. Not sure if w3-total-cache already does this.
Make sure you are running an opcode cache like APC. (There are several more available.)
-
APC rend vraiment wordpressbeaucoupplus réactif,en particulier lespages d'administration.MAIS,ilexiste des conflits de configurationpotentielsentre WP-SuperCacheet APC.Ceux-cine semblentpas affecter le cache W3.APC really makes wordpress a lot more responsive, especially the admin pages. BUT, there are some potential configuration conflicts between WP-SuperCache and APC. These don't seem to affect W3 Cache.
- 2
- 2010-08-12
- WhIteSidE
-
Ilexiste unexcellent article de Mark Jaquith à ce sujet: [APC Object Cache Backendpour WordPress] (http://markjaquith.wordpress.com/2010/08/06/apc-object-cache-backend-for-wordpress/).Vouspouvez utiliser [batcache] (https://wordpress.org/plugins/batcache/) avec APC.There's an excellent post from Mark Jaquith on this:[APC Object Cache Backend for WordPress](http://markjaquith.wordpress.com/2010/08/06/apc-object-cache-backend-for-wordpress/). You can use [batcache](https://wordpress.org/plugins/batcache/) happily with APC.
- 0
- 2014-10-21
- icc97
-
- 2010-08-18
Enplus d'utiliser unplugin demiseen cache de disque comme wp-cache,placez votreblog sur un volume hôte sur lequel lapropriété "noatime"est définie. Sinon,connectez-vousen SSH à votre hôte (si votre hébergeur lefournit)et exécutez régulièrement cette commande sur vosfichierstous les quelquesjours:
chattr -R +A ~/*
Le ~/* signifie "mesfichiers dansmon répertoirepersonnel". Vouspouvez changer ce chemin commebon vous semble. Vouspouvez également configurer cela sur unetâche cron dans cpanel si votre hébergeur lefournit.
Pourplus d'informations sur lapropriété atime,consultez this . Il accélère considérablement lesperformances de lecture des disques Linux.
Parfois,votre siteestmartelépar des araignées. Vouspouvez utiliser un outil comme SpyderSpanker ou Chennai Centralpourfiltrer les araignées quin'aidentpas à améliorer le classement de votre siteet simplement le ralentir,puis à étrangler lesbonnes araignées (comme Google,Bing,etc.)en lesenvoyant au hasard Messages HTTP 304nonmodifiés.
Une autre chose queje voisestjuste despluginsmal écrits. Si vous apprenez à créer desplugins,vous commencez à voir comment certainsplugins sont codés demanièreinefficace,oumême àtrouver desbombes à retardement,comme unetable debase de données qui se remplitet ne se remplitjamais,stockant des élémentstels que les données de connexionentrantes.
Au-delà detoutes les autres solutionsici,vouspouvez également créer uneferme Web WordPress de votreblogen l'hébergeant surplusieurs PC denœuds Web qui se reconnectenttous à une seulebase de donnéeset à un seul volume de disquepour lesfichiers (tel qu'un volumemonté sur NFS). Découvrez Ultra Monkey pour savoir commentfairefonctionnertout cela.
In addition to using a disk caching plugin like wp-cache, put your blog on a host volume that has the "noatime" property set on it. Otherwise, SSH into your host (if your webhost provides that) and routinely run this command on your files every few days:
chattr -R +A ~/*
The ~/* means "my files under my home directory". You can change that path as you see fit. You can also set this up on a cron job in cpanel if your webhost provides that.
For more info about atime property, see this. It speeds up Linux disk read performance greatly.
Sometimes your site is being hammered by spiders. You can use a tool like SpyderSpanker or Chennai Central to filter out spiders who don't help bring more page rank to your site and merely slow it down, and then throttle good spiders (like Google, Bing, etc.) by sending them random HTTP 304 Not Modified messages.
Another thing I see is just poorly written plugins. If you learn how to make plugins, you begin to see how some plugins are inefficiently coded, or even find timebombs, such as a database table that fills and fills and never gets cleaned out, storing things such as incoming connection data.
Beyond all the other solutions here, you can also create a WordPress web farm of your blog by hosting it on several web node PCs that all connect back to one single database and one single disk volume for the files (such as a volume mounted over NFS). Check out Ultra Monkey for how to get that all going.
-
- 2010-08-18
Quelques réponses quime viennent à l'esprit:
1) Minimisez lenombre de requêtes HTTP que lenavigateur doitfaire à votre hôteen concaténant JavaScriptet CSS lorsque celaestpossible/pratique.
2) Déchargez autant quepossible votreimage/contenumultimédia sur des CDNtiers,en particulier si vous utilisez un hébergementpartagé.
3) Essayez de réduire lenombre demessages que vous affichez sur lapage d'accueil afin de réduire letemps de rendutotal.
3a) Essayez d'utiliser unthème quiprésente quelques articlesen vedette dans leurintégralité sur lapage d'accueilet tous les autres articlesplus anciens sousforme d'extraits.
A few answers off the top of my head:
1) Minimize the number of HTTP requests the browser has to make to your host by concatenating JavaScript and CSS where possible/practical.
2) Offload as much of your image/media serving to 3rd party CDNs as possible, particularly if you're using shared hosting.
3) Try reducing the number of posts you're displaying on the front page in order to cut down on total render time.
3a) Try using a theme that presents a few featured posts in full on the front page and all other, older posts as excerpts.
-
+1pour réduire lenombre demessages,cela donne un énorme coup depouce sansfrais.Lesgensn'ontpas vraimentbesoin de voir dix anciensmessages,je viens de définirma conf à huit.+1 for reducing number of posts, this gives a tremendous boost with no cost. People don't really need to see ten old posts, I just set my conf to eight.
- 2
- 2011-04-23
- ripper234
-
- 2012-12-27
Lamiseen cache dumenu WordPress vous donne également une amélioration desperformances. Surtout si vous avezbeaucoup depages ou une structure demenugéante,cela devrait êtreprisen compte.
Faites-leen 2 étapesfaciles. Dans unpremiertemps,créez unefonction qui obtient ou crée lemenu,au lieu d'appeler directement
wp_nav_menu
.function get_cached_menu( $menuargs ) { if ( !isset( $menuargs['menu'] ) ) { $theme_locations = get_nav_menu_locations(); $nav_menu_selected_id = $theme_locations[$menuargs['theme_location']]; $termslug = get_term_by( 'id', $nav_menu_selected_id, 'nav_menu' ); $transient = 'menu_' . $termslug->slug . '_transient'; } else { $transient = 'menu_' . $menuargs['menu'] . '_transient'; } if ( !get_transient( $transient ) ) { // check if the menu is already cached $menuargs['echo'] = '0'; // set the output to return $this_menu = wp_nav_menu( $menuargs ); // build the menu with the given $menuargs echo $this_menu; // output the menu for this run set_transient( $transient, $this_menu ); // set the transient, where the build HTML is saved } else { echo get_transient( $transient ); // just output the cached version } }
Dans votrethème,remplacez les
wp_nav_menu
parget_cached_menu
. Désormais,à chaquefois que lemenuest appelé,vous avez une requête debase de données au lieu detout le Menubuilding.Lesmenusne changentpas souvent,mais vous devez également vous connecter à l'action
wp_update_nav_menu
pour supprimer les ancienstransitoires.Faites-le comme ceci:
add_action('wp_update_nav_menu', 'my_delete_menu_transients'); function my_delete_menu_transients($nav_menu_selected_id) { $termslug = get_term_by( 'id', $nav_menu_selected_id, 'nav_menu' ); $transient = 'menu_' . $termslug->slug . '_transient'; delete_transient( $transient ); }
Lemenu seragénéré laprochainefois que lapage sera appelée -et utilisera la versionmiseen cachejusqu'à ce que quelqu'unmette àjour ànouveau lemenu.
Versionmise àjour
Merci @helgatheviking d'avoir signalé uneerreurentre les slugset lesidentifiants. J'aimis àjour lesfonctionspour que celafonctionne à lafois avec
theme_position
etmenu
(pour un appel direct dumenu).Lesmenus sonttoujoursenregistrés avec lenom dumenu,pas laposition dans lethème.
Caching the WordPress Menu also gives you a performance boost. Especially if you have a lot of Pages or a giant Menu Structure, this should be considered.
Do it in 2 easy steps. At first, create a function that gets or creates the menu, instead of calling
wp_nav_menu
directly.function get_cached_menu( $menuargs ) { if ( !isset( $menuargs['menu'] ) ) { $theme_locations = get_nav_menu_locations(); $nav_menu_selected_id = $theme_locations[$menuargs['theme_location']]; $termslug = get_term_by( 'id', $nav_menu_selected_id, 'nav_menu' ); $transient = 'menu_' . $termslug->slug . '_transient'; } else { $transient = 'menu_' . $menuargs['menu'] . '_transient'; } if ( !get_transient( $transient ) ) { // check if the menu is already cached $menuargs['echo'] = '0'; // set the output to return $this_menu = wp_nav_menu( $menuargs ); // build the menu with the given $menuargs echo $this_menu; // output the menu for this run set_transient( $transient, $this_menu ); // set the transient, where the build HTML is saved } else { echo get_transient( $transient ); // just output the cached version } }
In your theme, replace the
wp_nav_menu
s withget_cached_menu
. Now, everytime the menu is called, you have one Databasequery instead of the whole Menubuilding.Menus don't change often - but you also have to hook into the
wp_update_nav_menu
action to delete the old transients.Do it like this:
add_action('wp_update_nav_menu', 'my_delete_menu_transients'); function my_delete_menu_transients($nav_menu_selected_id) { $termslug = get_term_by( 'id', $nav_menu_selected_id, 'nav_menu' ); $transient = 'menu_' . $termslug->slug . '_transient'; delete_transient( $transient ); }
The Menu will be generated the next time the page is called - and use the cached version until someone updates the menu again.
Updated Version
Thanks @helgatheviking for pointing out a mistake between slugs and IDs. I updated the functions so it works both with
theme_position
andmenu
(for a direct call of the menu).The menus are always saved with the name of the Menu, not the position in the Theme.
-
Cela semble être uneidée vraiment cool.J'ai cependant unproblème avec le code.Lorsquenous supprimons letransitoire,le `$nav_menu_selected_id`est unnombre,tandis que lors de l'appel de`get_cached_menu () `le`menu_id`est une variable de chaîne,car ceparamètre devient l'ID CSSpour le `
- `élément.
This seems like a really cool idea. I'm having a problem with the code however. When we're clearing out the transient, the `$nav_menu_selected_id` is a number, while when calling the `get_cached_menu()` the `menu_id` is a string variable, because that parameter becomes the CSS ID for the `- ` element.
- 0
- 2012-12-28
- helgatheviking
-
- 2010-08-18
Utilisez une classe debase de données réduitepour l'optimisation.Nous avonsfait debonnesexpériences avecnotrepropre codepour réduire l'utilisation de lamémoireet la vitesse d'accès à labase de données.Enplus de cela,vouspouvez optimiser la structure de labase de donnéeselle-mêmepar quelquespetits changements quien font égalementbeaucoup.
Unepartie du code de la classe de labase de donnéespeut êtretrouvée dans le wordpresstrac,iln'apas étéintégré aunoyau ( Billetn ° 11799et associé ).
Use a database class that is trimmed for optimization. We made good experiences with own code to reduce memory usage and database access speed. Next to that, you can optimize the database structure itself by some small changes that do a lot as well.
Part of the database class code can be found in the wordpress trac, it did not made it into core (Ticket #11799 and related).
-
Solutionintéressante.Voici l'URL duticket Trac au cas où quelqu'un serait égalementintéressé: http://core.trac.wordpress.org/ticket/11799Interesting solution. Here's the URL to the Trac Ticket in case anyone's interested too: http://core.trac.wordpress.org/ticket/11799
- 0
- 2010-08-18
- Mike Lee
-
- 2011-04-15
Pour un site àforttrafic,vous devez réglertous lestampons MySQLpour le contenu actuellementen place. Quelle que soit la version de WordPress, le La couche MySQLpeut avoir sa configuration calculée .
Enfait,si vous disposez de données InnoDB sans activerinnodb_file_per_table, vous deveznettoyer InnoDBen segmentant chaquetable dans sonpropretablespacephysique . Ilestpossible d'effectuer un réglage MySQL décent même si vous avez unmatériel limité . Ilexiste denombreux scénarios àfaire ces optimisations InnoDB .
Àmon humble avis,vousne pouvezpasplanifier debonsparamètrespourmy.cnf sans connaître la quantité de données à configurer. Vous devrez chargerpériodiquement unensemble de données actuel de laproduction dans unenvironnement depréparation,effectuer des optimisationset revenir avec lesnombres à configurer dans lemy.cnf du serveur deproduction.
For a highly trafficked site, you should tune all MySQL buffers for the content that is in place now. Regardless of the version of WordPress, the MySQL layer can have its configuration computed.
In fact, if you have InnoDB data without enabling innodb_file_per_table, you need to cleanup InnoDB by segmenting each table into its own physical tablespace. It is possible to do decent MySQL tuning even if you have a limited hardware. There are many scenarios for doing such InnoDB optimizations.
IMHO, you cannot plan good settings for my.cnf without knowing the amount of data to configure for. You would have to periodically load a current dataset from production into a staging environment, perform optimizations and come away with the numbers to configure in the my.cnf of the production server.
-
- 2010-08-12
vouspouvez activer la compression de sortie globale.celagziptout ce qui sort automatiquement si lenavigateur leprenden charge.Cela réduit considérablement lataille desfichierstransférés,mais augmente la charge de votreprocesseur.
you could enable global output compression. this will gzip everything going out automatically if the browser supports it. This drastically reduces the size of files transferred, but does increase your CPU load.
-
Cela auratendance à rendre votre site "se sentir"beaucoupplus lent.Le Yahoo!les documentstechniques suggèrent de vider votre codejuste après lafin de headet avant le début dubody afin que les scriptset les stylespuissent commencer à se charger.Enmettanten mémoiretampon lapageentière,vous évitez que cela seproduise,et ainsi lapage "se sent" lenteparce que l'utilisateur doit attendre que WordPress affiche lapageentière avant que l'utilisateurne voie quoi que ce soit.This will tend to make your site "feel" much slower. The Yahoo! technical documents suggest flushing you code right after the end of head and before the beginning of body so that scripts and styles can start loading. By buffering the entire page, you prevent this from happening, and so the page "feels" slow because the user has to wait for WordPress to render the entire page before the user sees anything.
- 0
- 2010-08-12
- WhIteSidE
-
Scottne parlaitpas de lamiseen mémoiretampon de lapageentière,mais de l'utilisation de la compression de sortie Apache.C'est quelque chose de différent,seulement si vous utilisez la compression de sortie PHP via letampon de sortie,cela aurait les lacunes que vous décrivez vaguement.Maispasen soi detoutefaçon,caren fin de compte,lamiseen mémoiretampon de la sortiepeut accélérer les choses.Cela a quelque chose à voir avec les E/S sur votre serveur.Scott was not speaking about buffering the whole page but using apache output compression. That's something different, only if you use the PHP output compression via the output buffer this would have the deficiencies you describe vaguely. But not per-se anyway because in the end, buffering output can make things faster. This has something to do with I/O on your server.
- 0
- 2010-08-18
- hakre
-
- 2010-08-19
J'ai récemmentparlé de ce sujet à WordCamp Houston . Toutes les recommandations ci-dessus sontexcellenteset l'importantest de s'assurer quetous les élémentsfrontaux sontentièrement optimisés,puis vouspouvez commencer àtravailler sur lesproblèmes demiseen cacheet deperformances du serveur.
Le renduprogressif rendra vospagesplus rapides car l'utilisateur verra le contenu de lapage avant qu'ilne soit complètement chargé. Pour cefaire,assurez-vous quetous lesjs deblocage sonttouten bas de lapageet que cssesten haut.
Deplus,si vous utilisezbeaucoup deboutons de réseaux sociaux,vouspouvezpersonnaliser les scriptspour les charger dans uniframe après le chargement complet de lapage. J'ai écrit untutoriel sur lafaçon de lefaire avec lebouton TweetMeMe retweet (maintenant obsolète depuis que Twitter apublié sonproprebouton retweet)maispeuttoujours être appliqué à d'autresboutons departage.
Pour lesperformances du serveur,considérez Nginx comme unproxyfrontalpour le contenu statique avec Apachegérant les lourdes charges PHPet MySQL.
I recently spoke about this subject at WordCamp Houston. All of the above recommendations are great and the important thing is to make sure all the front end stuff is fully optimized then you can start working on the caching and server performance issues.
Progressive rendering will make your pages feel faster because the user will see the page content before it is fully loaded. To do this make sure any blocking js is at the very bottom of the page and css is at the top.
Also if you use a lot of social media buttons you can customize the scripts to make them load in an iframe after the page is fully loaded. I wrote a tutorial on how to do it with the TweetMeMe re tweet button (now obsolete since Twitter released their own retweet button) but can still be applied to other share buttons.
For server performance look into Nginx as a front end proxy for static content with Apache handling the heavy PHP and MySQL lifting.
-
- 2010-11-23
Commepersonnene l'aencorementionné,l'une des étapes lesplusimportantespour améliorer lesperformances du serveuren conjonction avectoute configuration LAMP serait depasser authread detravail apacheet àmod_fcgid.
Cela a libéré 500 Mo demémoire surmon serveurprivé virtuel.
Since nobody mentioned it yet, one of the most important steps to enhance server performance in conjunction with any LAMP setup would be to switch to apache worker thread and mod_fcgid.
This freed up 500MB of memory on my virtual private server.
-
J'ai déjàessayé cela,maisje n'aijamaispufairefonctionner unenvironnement detravail apache stable +fcgi.Si quelqu'un connaît de *bonnes *instructions de configurationpour cela sous Ubuntu,veuillez lesposter.Je seraisparticulièrement reconnaissantpour lesinstructions qui détaillent certaines des directives de configuration Apache qui affectent le comportement FCGI,et expliquent comment leurmodificationpourrait affecter l'utilisation de lamémoire,lesperformances,etc. Actuellement,j'utilise un apachefourchu avec unfrontnginx-dans le serveur de cacheproxy.I've tried this before, but I've never been able to get a stable apache worker + fcgi environment running. If anybody knows of some *good* setup instructions for this under Ubuntu, please post them. I'd especially be grateful for instructions that detail some of the Apache config directives that affect the FCGI behavior, and explain how tweaking them might affect memory usage, performance, etc. Currently, I'm using a forked apache with an nginx front-in proxy cache server.
- 0
- 2011-02-28
- Dougal Campbell
-
Définissez stable.Moninstallationesttrès stable,mais vous auriezbesoin de 2 Go de RAM dansma configuration.Il vous suffit de lireet d'ajuster.La documentation d'apache surfcgiest assez complète.Define stable. My installation is running very stable, but you would need 2GB of RAM in my config. You just have to read and tweak. apache's documentation on fcgi is fairly extensive.
- 0
- 2011-03-09
- superfields
-
essayez de vérifier http://www.virtualmin.com/c'esttrès stableet gratuittry to check http://www.virtualmin.com/ its very stable and free
- 3
- 2011-09-11
- Ünsal Korkmaz
-
- 2014-10-21
Guide de vérification du ralentissement duplugin
Ilexiste unplugintrès simple appelé Temps de chargement de lapage ,qui ajoute uneminuterie à votrepied depage. Ilne s'agiten fait que de quatre lignes de code:
<?php function ur_pageload_footer() { printf(__('Page in %s seconds', 'pageload'), timer_stop()); } add_action('wp_footer', 'ur_pageload_footer')
Ensuite:
- Créer unefeuille de calcul
- Répertorieztous vosplugins actifset placez-les là-dedans
- Actualisez lapagetroisfoisen notant letemps de chargement de lapage à chaquetour
- Parcourez vosplugins unpar unen les désactivant
- Répétez l'étape 3
- Notez l'ordre dans lequel vous avez désactivé lesplugins
Votrefeuille de calcul doit ressembler à quelque chose comme
+-------+-------+-------+-------+--------+ | Run 1 | Run 2 | Run 3 | Order | Plugin |
Donc,si après avoir désactivé unplugin,letemps de réponse de lapage augmente considérablement,vouspouvez voir si vouspouvez éviter ceplugin.
J'aitrouvé deuxplugins qui ontprovoqué un ralentissement «significatif» mqtranslate et (leplutôt vieuxmaisbon ) Plugin denavigation àplusieursniveaux .
Guide for checking plugin slow down
There's a beautifully simple plugin called Page Load Time, which adds timer to your page footer. Its actually only four lines of code:
<?php function ur_pageload_footer() { printf(__('Page in %s seconds', 'pageload'), timer_stop()); } add_action('wp_footer', 'ur_pageload_footer')
Then:
- Create a spreadsheet
- List out all your active plugins and put them in there
- Refresh the page three times noting the page load time each turn
- Go through your plugins one by one deactivating them
- Repeat step 3
- Note the order that you deactivated the plugins
Your spreadsheet should look something like
+-------+-------+-------+-------+--------+ | Run 1 | Run 2 | Run 3 | Order | Plugin |
So if after deactivating a plugin the page response time increases significanly then you can see if you can avoid that plugin.
I found two plugins that caused 'significant' slow down mqtranslate and (the rather old but good) Multi-level Navigation Plugin.
-
Ce serait vraiment cool d'automatiser ceprocessus soitphantomjset sélénium (ou quelque chose de similaire) afin qu'il s'exécute automatiquementet crache unpetit rapport à lafin.It would be really cool to automate this process is phantomjs and selenium(or something similar) so it runs automatically and spits out a little report at the end.
- 0
- 2014-11-18
- Paul Sheldrake
-
- 2016-11-16
Tenez-vousen auplugin W3 Total Cache pour lafonctionnalité demiseen cache dans WordPress. Activez lamiseen cache despageset lamiseen cache de labase de données àpartir de lapage desparamètres duplugin. Assurez-vous de choisir «Alternative PHP Cache (APC/APCu)» commemécanisme demiseen cache. N'activez AUCUNEminification dans W3 Total Cache car vous avez denombreuses chances de casser l'apparenceet/ou lesfonctionnalités de votre site. Nous allons laisser Cloudflare.
Unefois que vous avez configuré le reste desfonctionnalités duplugin,configurez Cloudflarepour votre site Web. Assurez-vous d'activer Cloudflare dans lesparamètres W3 Total Cache sous `` Extensions ''.
Cloudflareest un réseau de diffusion de contenu quimet en cachetous les contenus statiques (fichiersimage,CSS,JS,documents,etc.) de votre siteet le sert à vos visiteurs depuis leurs serveursmondiaux. Celapeut aider à accélérer lestemps de chargement despageset à réduire la charge sur votre serveur. Pour obtenir la liste destypes defichiersmisen cachepar Cloudlfare checkout cette liste . Deplus,Cloudflare a unplangratuit.
Dans Cloudflare,définissez leniveau demiseen cache sur standardet définissez l'expiration du cache dunavigateur sur quelque chose d'aumoinsplus de 20 heures. Activez Always Online ™pour quemême si votre serveurtombeen panne,Cloudflare serve lespages statiques de votre site Web àpartir de leur cache. Activez également leurfonction deminification automatique (rappelez-vouspourquoije vous ai demandé dene pas activer laminificationest W3 Total Cache? Parce que Cloudflare lefaitmieux!) Ensuite,réglez Rocket Loader ™ sur automatique.
Voici unextrait de ce quefait Rocket Loader:
-
Diminution dunombre de requêtes réseauen regroupant JavaScript fichiers,même des ressourcestierces,pour éviter de ralentir lapage rendu.
-
Chargement asynchrone de scripts,y compris des scriptstiers,donc
qu'ilsne bloquentpas le chargement du contenu de votrepage
immédiatement. -
Miseen cache des scripts localement (à l'aide de LocalStorage,disponible sur laplupart des
navigateurset téléphonesintelligents) afin qu'ilsne soientpas récupérés àmoins que
nécessaire.
Voustrouverezplus d'informations ici .
Sipossible,passez auframework Genesispour WordPress carils sontpropres sans aucun ballonnement. Genesis a été conçu dans un souci de rapiditéet de référencement. Je l'aimoi-mêmetestéet mes scores PageSpeed étaientbons. Aussi,si vous utilisez Genesis,n'oubliezpas d'activer le cache defragments dans lesparamètres W3 Total Cache.
Puisque vous utilisezmaintenant Cloudlfare comme CDN,vouspouvez utiliser unplugin comme ' Imagify ' ou ' Compresser JPEG & amp; Images PNG 'par TingPNGpour compresser vosimages. Les deux sont despluginsgratuits disponibles dans le référentiel deplugins WordPress.org. En outre,Imagifyprenden charge lepuissant algorithme de compression avecperte.
Enfin,installez leplugin ' Supprimer les chaînes de requête des ressources statiques ' du référentiel WordPress afin qu'il supprime les chaînes de requête des ressources statiquestelles que CSS & amp; Fichiers JS. Eneffet,les ressources avec un «?» ou "& amp;" dans l'URLne sontpasmisen cachepar certains serveurs demiseen cacheproxy (rappelez-vous,Cloudflareest également un serveur demiseen cacheproxy).
Ensuite,installez leplugin " Utiliser lesbibliothèques Google ". Cepluginpermet à votre site WordPress d'utiliser le CDN de l'API AJAX Library de Googleplutôt que de servir cesfichiers directement depuis votreinstallation WordPress.
Certains des avantages sont:
- Augmente les chances qu'un utilisateur ait déjà cesfichiersen cache.
- Réduit la charge supplémentaire de votre serveur.
- Utilise les versions compressées desbibliothèques (le cas échéant).
- Les serveurs de Google sont configuréspournégocier la compression HTTP avec le demande dunavigateur.
Dernierpointmaisnon lemoindre,utilisez leplugin ' WP-Optimize ' de Ruhani Rabinpournettoyeret optimiser votrebase de données.
J'espère que cela répond à votre question concernant l'optimisation de WordPresspour réduire la charge du serveur.
Stick with the W3 Total Cache plugin for caching functionality in WordPress. Enable page caching and database caching from the plugin's settings page. Make sure you choose 'Alternative PHP Cache (APC / APCu)' as the caching mechanism. Do NOT enable any minification in W3 Total Cache as there are many chances for you to break your site's appearance and/or functionality. We'll leave it to Cloudflare.
Once you're done with configuring the rest of the plugin functionalities, set up Cloudflare for your website. Make sure you enable Cloudflare in the W3 Total Cache settings too under 'Extensions'.
Cloudflare is a Content Delivery Network which caches all the static contents (image files,CSS,JS,documents,etc.,) from your site and serves it to your visitors from their global servers. This can help speed up page load times and reduce the load on your server. For a list of file types that are cached by Cloudlfare checkout this list. Moreover, Cloudflare has a free plan.
In Cloudflare, set caching level to standard and set browser cache expiration to something at least greater than 20 hours. Enable Always Online™ so that even if your server goes down, Cloudflare will serve your website's static pages from their cache. Also enable their auto minify feature (remember why I asked you to not enable minification is W3 Total Cache? Because Cloudflare does it better!) Then set Rocket Loader™ to automatic.
Here's an excerpt of what Rocket Loader does :
Decreasing the number of network requests by bundling JavaScript files, even third party resources, to avoid slowing down page rendering.
Asynchronously loading scripts, including third party scripts, so
that they do not block the content of your page from loading
immediately.Caching scripts locally (using LocalStorage, available on most
browsers and smart phones) so they aren't re-fetched unless
necessary.
More information can be found here.
If possible switch to the Genesis framework for WordPress because they are clean without any bloat. Genesis was built with speed and SEO in mind. I myself have tested it and my PageSpeed scores were good. Also if you're using Genesis, then don't forget to enable fragment cache in W3 Total Cache settings.
Since now you're using Cloudlfare as a CDN, you can make use of a plugin like 'Imagify' or 'Compress JPEG & PNG images' by TingPNG to compress your images. Both are free plugins available in the WordPress.org plugin repository. Also, Imagify supports the powerful lossy compression algorithm.
Finally, install 'Remove Query Strings From Static Resources' plugin from the WordPress repository so that it removes the query strings from static resources like CSS & JS files. This is because resources with a “?” or “&” in the URL are not cached by some proxy caching servers (remember, Cloudflare is also a proxy caching server).
Then install 'Use Google Libraries' plugin. This plugin allows your WordPress site to use Google's AJAX Library API CDN rather than serving these files from your WordPress install directly.
Some of the benefits are:
- Increases the chance that a user already has these files cached.
- Takes the extra load off your server.
- Uses compressed versions of the libraries (when available).
- Google's servers are set up to negotiate HTTP compression with the requesting browser.
Last but not the least, use the 'WP-Optimize' plugin by Ruhani Rabin to clean and optimize your database.
Hope this answers your question with regard to optimizing WordPress to reduce server load.
Outre l'installation de W3 Total Cache ou d'un autreplugin demiseen cache,quellesmesurespuis-jeprendrepourm'assurer quemonthèmeet mon sitefonctionnent aussi vite quepossible.