Schritte zur Optimierung von WordPress in Bezug auf die Serverlast?
-
-
Wenn Sie Ihre Site unter vps ausführen,sollten Sie versuchen,den Cacheneu zuerstellen.if you run your site on vps , you should try redis cache.
- 0
- 2014-04-05
- ahmetlutfu
-
14 Antworten
- Stimmen
-
- 2010-08-18
Sie können WordPress auf Nginxinstallieren. Esgibt eine Reihe von Ressourcen,die helfen können:
Einige Leistungsinformationen von diesem letzten Link (deretwas anderseingerichtet zu sein scheint als die anderen):
Also habeichbeschlossen,einen Proxy vor zu stellen von WordPress zu statischen Cache so viel wiemöglich. ALLnicht authentifiziert Der Verkehr wird direkt von der Nginx-Datei-Cache,dereinige Anfragenentgegennimmt (wie RSS-Feed-Generierung) von 6 Seiten/Sekundebis über 7000 Seiten/Sekunde. Uff. Nginx kümmert sich auch um die Protokollierung und gzipping,das schwerere Backend verlassen Apachen,um das zutun,was sie ambesten können: dienen dynamische WordPress-Seitennur wenn benötigt.
...
Bei Nginxistes soeffizient unheimlich. Ich habenochnie gesehen,dassesmehr verwendet als 10bis 15 Megabyte RAM undein Blip von CPU,auch unter unserer schwersten Last. Unsere Gangliengraphen lügennicht: Wir haben uns halbiert Unser Speicherbedarf verdoppelte unseren ausgehender Netzwerkdurchsatz und hat unsere Ladung komplett ausgeglichen. Wir habe seitdemgrundsätzlich keineproblemegehabt Wir haben dieseingerichtet.
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.
-
Hatjemand Statistiken über die Geschwindigkeitsersparnisbei der Verwendung von Nginx?Anyone have any stats on the speed savings of using Nginx?
- 0
- 2010-08-18
- Mike Lee
-
Mike,ich habeeinen weiteren Link undeinige Informationen aus diesem Beitrag hinzugefügt.Mike, I added another link, and some information from that post.
- 0
- 2010-08-18
- Travis Northcutt
-
Ich habemein Hauptblog voneinem 1G-Servermit Apache aufeinen 512M-Servermit Nginx verschoben.Läufttrotz der Verringerung des Arbeitsspeichers reibungsloser.Zugegeben,ich habe andere Dienste auf dem 1G-Server (E-Mail,IMAP,Mailman,mehrere andere Websitesmit geringem Datenverkehr).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
-
Hinweis: Das Ausführen von WordPress unter Nginx unterscheidet sich von der Verwendung von Nginx als Proxy-Cache vor 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
Legen Sie clientseitige Ablaufdatenfür Dinge wie CSS,Bilder,JavaScript usw.fest,dienichtfürjede Seitenansichterneut heruntergeladen werdenmüssen. Dies hatbei weitem dengrößten Unterschied zu den Ladezeitenmeiner Websitegemacht. Der schnellste Downloadist der Download,dernie stattgefunden hat ...
# 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
Sie können alles vorab komprimieren,was Sie vernünftigerweise können (7-zipistein gutes Werkzeug dafür) & amp; Laden Siees an derselben Stelle hoch wie die Datei,die Siegeradegezippt haben. Ändern Sie .htaccess wie untenbeschrieben,um die vorgezippten Dateienbereitzustellen. Die Einschränkung hierist,dass Sie daran denkenmüssen,sieerneut zu komprimieren,wenn Sie Dinge aktualisieren. Dies reduziert den CPU-Overhead,abgesehen vom Parsen von .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]
Diesistnureine rohe Antwort. Esgibt viele Variationen zu diesem Thema. Ich habe darübergebloggt und unter http://icanhazdoteinige Verweise auf ausführlichere Artikel hinzugefügt.net/2010/03/23/some-wordpress-stuff/. Lesen Sie das und vor allem die Referenzen,auf dieich verweise - sie sindgute Ressourcen.
Beachten Sie,dass Benutzerihren Cache aktualisierenmüssen,wenn Sie häufigbasteln.
Ein Plugin,dasich auch sehrnützlichfand,ist wp-minify . Bei diesem Artikel sollten Sie darauf achten,dass Sie seitenspezifische Elemente (Kontaktformular,Schiebereglerfür die Startseite usw.) ausschließen,damit Sienicht dengesamten Satz von CSS,JS usw.fürjede Seiteerneut herunterladen. Esisteine gute Möglichkeit,& amp; Komprimieren Sie Ihr Basis-CSS,JS usw. Dadurch werden http-Anforderungenerheblich reduziert. Wp-minify spieltgutmit Supercache und auchmit Ablauf-Headern,dieich obenbeschrieben habe.
Verwenden Sie Yslowin Firebug (Firefox) oder ähnlichem,um Ihre http-Anforderungen zu überwachen und zu überwachen,was komprimiertist und wasnicht. Schauen Sie sich dort auch die Ablauf-Header an. Sie werdenbald sehen,was Sie verbessern können.
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.
-
Fallsjemandplant,Ihre Rewrites zu kopieren/einzufügen,gibt eseine Instanz von "ReWrite",die korrigiert werden sollte.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
-
welche Instanz?which instance?
- 2
- 2010-12-19
- CAD bloke
-
@Nerdling Könnten Siebitte darauf hinweisen,welche Instanz repariert werdenmuss?Ichmöchte den obigen Code verwenden.@Nerdling Could you please point out which instance needs fixing? I'd like to use the above code.
- 0
- 2012-12-28
- helgatheviking
-
Es kann damit zusammenhängen,dassmodgzipin späteren Versionen von Apache veraltetist.Ichmusstemeine kürzlich auf Mod Deflate umstellen.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
-
Diesistein guter Rat zur Verbesserung der Clientleistung,wirkt sichjedochnicht direkt auf die Verwendung von Serverressourcen durch WordPress aus.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 - Ja,dies reduziert die Anforderungslast,da Apacheeinen 304 (nichtgeändert) anstelle von Servingbereitstellen kann oder WordPressmöglicherweise auffordert,eine HTML-Dateimit PHP zugenerieren.@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
-
Füreine gute Reihe von Standardeinstellungenfür .htaccessbietet das HTML5-Boilerplate-Projekteine Vorlage. 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
Minimieren Sie die Anzahl der Plugins,die Sie ausführen,auf das,was Sie wirklichbenötigen. Beachten Sieinsbesondere Plugins,diebei jedem Laden von Seiten Javascript und CSS-Code hinzufügen,auch wenn dieser Codenicht auf der Seite verwendet wird.
Wenn Sie Ihreigenes Thema von Grund aufneuerstellen,teilen Sie Ihr CSS so auf,dass Funktionen,dienurfürbestimmte Seitenvorlagen oder Ansichtstypen (einzelner Beitrag,Archive,Kategorie usw.)erforderlich sind,nurbei Bedarfgeladen werden.
Konfigurieren Sie W3TCfür die Verwendungeines CDN (wie Amazon CloudFront odereines der anderen von W3TC unterstützten).
Überprüfen Sie,ob die Minify-Optionenfür Siefunktionieren (einige Pluginsgenerierenjs/css,dienichtgutminimiert werden können. Testen Sie Ihre Site daher unbedingt,nachdem Sie die Minify-Funktion aktiviert haben).
Wenn Sie die volle Kontrolle über Ihren MySQL-Server haben,stellen Sie sicher,dass der query_cache aktiviertist. Verwenden Sieein MySQL-Optimierungsskript ,um andere Möglichkeiten zur Optimierung Ihrer Datenbankkonfiguration zufinden.
Wenn die Verwendungeines CDN ausirgendeinem Grundproblematischist,konfigurieren Siemod_expiresin Ihrem Apache-Setup. Stellen Sie die Ablaufzeiten so langeein,wieesfür statische Typen wie Bilder,CSS,Javascript,Video,Audio usw. angemessenist.
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
Führen Sie memcached aus und verwenden Sieeinen Objektcache,um die Anzahl der Datenbankabfragen zu verringern.Dadurch werden Daten aus der Datenbank undnicht aus Seiten zwischengespeichert.Ichbin mirnicht sicher,ob der w3-total-Cache diesbereitstut.
Stellen Sie sicher,dass Sieeinen Opcode-Cache wie APC ausführen.(Es sindmehrere weitere verfügbar.)
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.)
-
APCmacht WordPress wirklich viel reaktionsschneller,insbesondere die Administrationsseiten.ABEResgibt einigemögliche Konfigurationskonflikte zwischen WP-SuperCache und APC.Diese scheinen den W3-Cachenicht zubeeinflussen.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
-
Esgibt einen ausgezeichneten Beitrag von Mark Jaquith dazu: [APC Object Cache Backendfür WordPress] (http://markjaquith.wordpress.com/2010/08/06/apc-object-cache-backend-for-wordpress/).Sie können [batcache] (https://wordpress.org/plugins/batcache/)problemlosmit APC verwenden.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
Legen Sie Ihr Blognichtnurmit einem Plug-infür das Zwischenspeichern von Datenträgern wie wp-cache aufeinem Host-Volume ab,für das die Eigenschaft "noatime"festgelegtist. Andernfallsführen Sie SSHin Ihren Hostein (sofern Ihr Webhost diesbereitstellt) undführen Sie diesen Befehl routinemäßig allepaar Tagefür Ihre Dateien aus:
chattr -R +A ~/*
Das ~/*bedeutet "meine Dateienin meinem Home-Verzeichnis". Sie können diesen Pfadnach Belieben ändern. Sie können dies auchfüreinen Cron-Jobin cpaneleinrichten,wenn Ihr Webhost diesbereitstellt.
Weitere Informationen zu atime-Eigenschaftenfinden Sie unter this . Diesbeschleunigt die Leseleistung von Linux-Datenträgernerheblich.
Manchmal wird Ihre Website von Spinnengehämmert. Sie könnenein Tool wie SpyderSpanker oder Chennai Central verwenden,um Spinnen herauszufiltern,dienicht dazubeitragen,mehr Seitenrang auf Ihre Website zubringen,diese lediglich zu verlangsamen,und danngute Spinnen (wie Google,Bing usw.) zu drosseln,indem Sie sie zufällig senden HTTP 304 Nichtgeänderte Nachrichten.
Eine andere Sache,dieich sehe,sindnur schlechtgeschriebene Plugins. Wenn Sie lernen,wieman Pluginserstellt,sehen Sie,wieeinige Pluginsineffizient codiert sind,oderfinden sogar Zeitbomben,z. B.eine Datenbanktabelle,diegefüllt undgefüllt wird undniemalsbereinigt wird,und speichernbeispielsweiseeingehende Verbindungsdaten.
Neben allen anderen Lösungen hier können Sie aucheine WordPress-Webfarm Ihres Blogserstellen,indem Sie sie aufmehreren Webknoten-PCs hosten,die alleeine Verbindung zueinereinzelnen Datenbank undeinem einzelnen Datenträgerfür die Dateien (z. B.einem Datenträger) herstellen über NFSmontiert). Lesen Sie Ultra Monkey ,wie Sie das allesin Gangbringen können.
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
Einpaar Antworten ausmeinem Kopf:
1) Minimieren Sie die Anzahl der HTTP-Anforderungen,die der Browser an Ihren Host stellenmuss,indem Sie JavaScript und CSSnach Möglichkeit/praktisch verketten.
2) Laden Sie so viele Bilder/Medien wiemöglich auf CDNs von Drittanbietern herunter,insbesondere wenn Sie Shared Hosting verwenden.
3) Reduzieren Sie die Anzahl der Beiträge,die auf der Startseite angezeigt werden,um diegesamte Renderzeit zu verkürzen.
3a) Versuchen Sie,ein Thema zu verwenden,daseinige ausgewählte Beiträge vollständig auf der Startseite und alle anderen älteren Beiträge als Auszügeenthält.
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.
-
+1für die Reduzierung der Anzahl der Beiträge,diesgibt einenenormen Schub ohne Kosten.Die Leutemüssennicht wirklich zehn alte Beiträge sehen,ich habenurmeine Conf auf achtgesetzt.+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
Das Zwischenspeichern des WordPress-Menüserhöht auch die Leistung. Insbesondere wenn Sie viele Seiten odereine riesige Menüstruktur haben,sollte diesberücksichtigt werden.
Machen Sieesin 2einfachen Schritten. Erstellen Sie zunächsteine Funktion,die das Menü abruft odererstellt,anstatt
wp_nav_menu
direkt aufzurufen.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 } }
Ersetzen Siein Ihrem Thema die
wp_nav_menu
s durchget_cached_menu
. Jetzt haben Siejedes Mal,wenn das Menü aufgerufen wird,eine Datenbankabfrage anstelle desgesamten Menubaus.Menüs ändern sichnicht oft - Siemüssen sichjedoch auchin die Aktion
wp_update_nav_menu
einbinden,um die alten Transienten zu löschen.Maches so:
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 ); }
Das Menü wirdbeim nächsten Aufruf der Seitegeneriert - und verwenden Sie die zwischengespeicherte Version,bisjemand das Menüerneut aktualisiert.
Aktualisierte Version
Vielen Dank an @helgathevikingfür den Hinweis aufeinen Fehler zwischen Schnecken und IDs. Ich habe die Funktionen so aktualisiert,dass sie sowohlmit
theme_position
als auchmitmenu
funktionieren (füreinen direkten Aufruf des Menüs).Die Menüs werdenimmermit dem Namen des Menüsgespeichert,nichtmit der Positionim Thema.
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.
-
Das scheinteine wirklich coole Idee zu sein.Ich habejedochein Problemmit dem Code.Wenn wir den Transienten löschen,ist die "$nav_menu_selected_id"eine Zahl,währendbeim Aufrufen der "get_cached_menu ()" die "menu_id"eine Zeichenfolgenvariableist,da dieser Parameter zur CSS-IDfür die "
- " wirdElement.
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
Verwenden Sieeine Datenbankklasse,die zur Optimierung zugeschnittenist.Wir habengute Erfahrungenmit eigenem Codegemacht,um die Speichernutzung und die Geschwindigkeit des Datenbankzugriffs zu reduzieren.Darüber hinaus können Sie die Datenbankstruktur selbst durcheinige kleine Änderungen optimieren,dieebenfalls vielbewirken.
Ein Teil des Datenbankklassencodesbefindet sichim WordPress-Trac. Er hatesnichtin den Kerngeschafft ( Ticket Nr. 11799 und verwandte ).
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).
-
Interessante Lösung.Hierist die URL zum Trac-Ticket,falls sich auchjemand dafürinteressiert: 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
Füreine starkfrequentierte Site sollten Sie alle MySQL-Puffer auf den Inhalt abstimmen,derjetzt vorhandenist. Unabhängig von der Version von WordPress kann die Die Konfiguration der MySQL-Schicht kannberechnet werden .
Wenn Sie InnoDB-Daten haben,ohneinnodb_file_per_table zu aktivieren, Siemüssen InnoDBbereinigen,indem Siejede Tabellein eineneigenen physischen Tabellenbereich segmentieren . Esistmöglich,eine anständige MySQL-Optimierung durchzuführen,,selbst wenn Sieeine begrenzte Hardware haben . Esgibt viele Szenarien dafür solche InnoDB-Optimierungen .
IMHO können Sie keineguten Einstellungenfürmy.cnfplanen,ohne die zu konfigurierende Datenmenge zu kennen. Siemüssten regelmäßigein aktuelles Dataset aus der Produktionin eine Staging-Umgebung laden,Optimierungen durchführen und die zu konfigurierenden Nummernin dermy.cnf des Produktionsservers angeben.
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
Sie können dieglobale Ausgabekomprimierung aktivieren.Dadurch wird alles automatischgelöscht,wenn der Browser dies unterstützt.Dies reduziert die Größe der übertragenen Dateien drastisch,erhöhtjedoch die CPU-Auslastung.
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.
-
Diesführt dazu,dass sich Ihre Website viel langsamer "anfühlt".Das Yahoo!Intechnischen Dokumenten wirdempfohlen,den Code direktnach dem Ende des Kopfes und vor dem Beginn des Körpers zu leeren,damit Skripte und Stilegeladen werden können.Indem Sie diegesamte Seitepuffern,verhindern Sie,dass diesgeschieht. Daher "fühlt" sich die Seite langsam an,da der Benutzer wartenmuss,bis WordPress diegesamte Seitegerendert hat,bevor der Benutzeretwas sieht.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
-
Scott sprachnicht über das Puffern dergesamten Seite,sondern über die Verwendung der Apache-Ausgabekomprimierung.Dasistetwas anderes,nur wenn Sie die PHP-Ausgabekomprimierung über den Ausgabepuffer verwenden,hätte dies die Mängel,die Sie vagebeschreiben.Aber sowiesonichtper se,denn am Ende kann das Puffern der Ausgabe die Dinge schnellermachen.Dies hatetwasmit E/A auf Ihrem Server zutun.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
Ich habe kürzlichim WordCamp Houston über dieses Themagesprochen . Alle obengenannten Empfehlungen sindgroßartig und das Wichtigsteist,sicherzustellen,dass alle Front-End-Inhalte vollständig optimiert sind,damit Siemit der Arbeit an den Caching- und Serverleistungsproblemenbeginnen können.
Beimprogressiven Rendernfühlen sich Ihre Seiten schneller an,da der Benutzer den Seiteninhalt sieht,bevorer vollständiggeladenist. Stellen Sie dazu sicher,dass sich alleblockierendenjsganz unten auf der Seite und cssganz obenbefinden.
Auch wenn Sie viele Social-Media-Schaltflächen verwenden,können Sie die Skripte so anpassen,dass sienach dem vollständigen Laden der Seitein einen Iframegeladen werden. Ich habeein Tutorial darübergeschrieben,wiemanesmit dem TweetMeMe-Re-Tweet-Buttonmacht (jetzt veraltet,seit Twitter seineneigenen Retweet-Button veröffentlicht hat),kann abertrotzdem auf andere Share-Buttons angewendet werden.
Für die Serverleistung sollten Sie Nginx als Front-End-Proxyfür statische Inhaltebetrachten,wobei Apache das schwere PHP- und MySQL-Lifting übernimmt.
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
Da diesnochniemanderwähnt hat,bestehteiner der wichtigsten Schritte zur Verbesserung der Serverleistungin Verbindungmit einem LAMP-Setup darin,zu Apache Worker Thread undmod_fcgid zu wechseln.
Dadurch wurden 500 MB Speicher aufmeinem virtuellenprivaten Serverfreigegeben.
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.
-
Ich habees schoneinmal versucht,aberich konntenochnie eine stabile Apache Worker + FCGI-Umgebung zum Laufenbringen.Wennjemand unter Ubuntueinige *gute * Setup-Anweisungen dafür kennt,poste siebitte.Ich wärebesonders dankbarfür Anweisungen,dieeinige der Apache-Konfigurationsanweisungen,die sich auf das FCGI-Verhalten auswirken,detailliertbeschreiben underläutern,wie sicheine Optimierung auf die Speichernutzung,die Leistung usw. auswirken kann. Derzeit verwendeicheinen gegabelten Apachemit einer Nginx-Front-im Proxy-Cache-Server.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
-
Stabil definieren.Meine Installation läuft sehr stabil,aber Sie würden 2 GB RAMin meiner Konfigurationbenötigen.Siemüssennur lesen und optimieren.Die Dokumentation von Apache zufcgiist ziemlich umfangreich.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
-
Versuchen Sie,http://www.virtualmin.com/zu überprüfen,esist sehr stabil und kostenlostry to check http://www.virtualmin.com/ its very stable and free
- 3
- 2011-09-11
- Ünsal Korkmaz
-
- 2014-10-21
Anleitung zum Überprüfen der Verlangsamung des Plugins
Esgibt ein wunderschöneinfaches Pluginnamens Ladezeit der Seite ,das Ihrer Seitenfußzeileeinen Timer hinzufügt. Es sindeigentlichnur vier Codezeilen:
<?php function ur_pageload_footer() { printf(__('Page in %s seconds', 'pageload'), timer_stop()); } add_action('wp_footer', 'ur_pageload_footer')
Dann:
- Erstellen Sieeine Tabelle
- Listen Sie alle aktiven Plugins auf undfügen Sie sie dortein.
- Aktualisieren Sie die Seite dreimal undnotieren Sie die Ladezeit der Seitein jeder Runde
- Gehen Sie Ihre Pluginsnacheinander durch und deaktivieren Sie sie
- Wiederholen Sie Schritt 3
- Beachten Sie die Reihenfolge,in der Sie die Plugins deaktiviert haben
Ihre Tabelle sollte ungefähr so aussehen wie
+-------+-------+-------+-------+--------+ | Run 1 | Run 2 | Run 3 | Order | Plugin |
Wenn sich alsonach dem Deaktiviereneines Plugins die Antwortzeit der Seiteerheblicherhöht,können Sie sehen,ob Sie dieses Plugin vermeiden können.
Ich habe zwei Pluginsgefunden,dieeine "signifikante" Verlangsamung verursacht haben mqtranslate und (das ziemlich alte,abergute) ) Mehrstufiges Navigations-Plugin .
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.
-
Es wäre wirklich cool,diesen Prozessmit Phantomjs und Selen (oder ähnlichem) zu automatisieren,damiter automatisch ausgeführt wird und am Endeeinen kleinen Bericht ausspuckt.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
Halten Sie sich an das Plugin W3 Total Cache für die Caching-Funktionalitätin WordPress. Aktivieren Sie das Seiten-Caching und das Datenbank-Caching auf der Einstellungsseite des Plugins. Stellen Sie sicher,dass Sie als Caching-Mechanismus 'Alternativer PHP-Cache (APC/APCu)' auswählen. Aktivieren Sie KEINE Minimierungim W3 Total Cache,da Siemöglicherweise das Erscheinungsbild und/oder die Funktionalität Ihrer Sitebeeinträchtigen. Wir überlassenes Cloudflare.
Wenn Siemit dem Konfigurieren der restlichen Plugin-Funktionenfertig sind,richten Sie Cloudflarefür Ihre Websiteein. Stellen Sie sicher,dass Sie Cloudflare auchin den W3 Total Cache-Einstellungen unter "Erweiterungen" aktivieren.
Cloudflareistein Content Delivery Network,das alle statischen Inhalte (Bilddateien,CSS,JS,Dokumente usw.) Ihrer Website zwischenspeichert und Ihren Besuchern vonihrenglobalen Servern ausbereitstellt. Dies kann dazubeitragen,die Ladezeiten von Seiten zu verkürzen und die Belastung Ihres Servers zu verringern. Eine Liste der Dateitypen,die von Cloudlfare zwischengespeichert werden,finden Sie unter diese Liste . Darüber hinaus hat Cloudflareeinen kostenlosen Plan.
Setzen Siein Cloudflare die Caching-Stufe auf Standard und den Ablauf des Browser-Cache aufmindestens 20 Stunden. Aktivieren Sie Always Online ™,damit Cloudflare die statischen Seiten Ihrer Website auch dann aus dem Cachebereitstellt,wenn Ihr Server ausfällt. Aktivieren Sie auch die automatische Minimierungsfunktion (erinnern Sie sich,warumich Siegebeten habe,die Minimierungnicht zu aktivieren,ist W3 Total Cache? Weil Cloudflareesbessermacht!). Setzen Sie dann Rocket Loader ™ auf automatisch.
Hieristein Auszug dessen,was Rocket Loadermacht:
-
Verringern der Anzahl der Netzwerkanforderungen durch Bündeln von JavaScript Dateien,auch Ressourcen von Drittanbietern,umeine Verlangsamung der Seite zu vermeiden Rendern.
-
Asynchrones Laden von Skripten,einschließlich Skripten von Drittanbietern,also
dass sie den Inhalt Ihrer Seitenicht daran hindern,
zu laden sofort. -
Zwischenspeichern von Skripten lokal (mit LocalStorage,verfügbarbei denmeisten
Browser und Smartphones),sodass sienurerneut abgerufen werden,wenn
notwendig.
Weitere Informationenfinden Sie unter hier .
Wechseln Sienach Möglichkeit zum Genesis-Frameworkfür WordPress,da diese ohne Aufblähen sauber sind. Genesis wurdemit Blick auf Geschwindigkeit und SEOentwickelt. Ich selbst habeesgetestet undmeine PageSpeed-Werte warengut. Wenn Sie Genesis verwenden,vergessen Sienicht,den Fragment-Cachein den W3-Gesamt-Cache-Einstellungen zu aktivieren.
Da Sie Cloudlfarejetzt als CDN verwenden,können Sieein Plugin wie ' Imagify ' oder ' Compress JPEG & amp; PNG-Bilder 'von TingPNG,um Ihre Bilder zu komprimieren. Beide sind kostenlose Plugins,dieim Plugin-Repository von WordPress.org verfügbar sind. Außerdem unterstützt Imagify den leistungsstarken verlustbehafteten Komprimierungsalgorithmus.
Installieren Sie abschließend das Plugin ' Abfragezeichenfolgen aus statischen Ressourcenentfernen ' aus dem WordPress-Repository,damit die Abfragezeichenfolgen aus statischen Ressourcen wie CSS & amp; JS-Dateien. Dies liegt daran,dass Ressourcenmit einem "?" oder "& amp;"in der URL werden voneinigen Proxy-Caching-Servernnicht zwischengespeichert (denken Sie daran,Cloudflareist auchein Proxy-Caching-Server).
Installieren Sie anschließend das Plugin ' Use Google Libraries '. Mit diesem Plugin kann Ihre WordPress-Site das AJAX Library API-CDN von Google verwenden,anstatt diese Dateien direkt aus Ihrer WordPress-Installationbereitzustellen.
Einige der Vorteile sind:
- Erhöht die Wahrscheinlichkeit,dassein Benutzer diese Dateienbereits zwischengespeichert hat.
- Entlastet Ihren Server zusätzlich.
- Verwendet komprimierte Versionen der Bibliotheken (sofern verfügbar).
- Die Server von Google sind soeingerichtet,dass sie die HTTP-Komprimierungmit dem aushandeln Browser anfordern.
Lastbutnot least verwenden Sie das Plugin ' WP-Optimize ' von Ruhani Rabin,um Ihre Datenbank zubereinigen und zu optimieren.
Ich hoffe,diesbeantwortet Ihre Frage zur Optimierung von WordPress,um die Serverlast zu reduzieren.
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.
Neben der Installation von W3 Total Cache odereinem anderen Caching-Plugin,welche Schritte kannich unternehmen,um sicherzustellen,dassmein Thema undmeine Site so schnell wiemöglich ausgeführt werden.