Compleet handboek voor het verbeteren van de efficiëntie van WordPress-databaseverzoeken
De database vormt de basis van een WordPress-site; alle content, gebruikersgegevens en instellingen worden hier opgeslagen. Naarmate de inhoud van de site toeneemt, kunnen onefficiënte database-verzoeken het presteren van de site vertragen en de gebruikerservaring negatief beïnvloeden. De efficiëntie van database-verzoeken is rechtstreeks van invloed op de snelheid van pagina-laadprocessen en het gebruik van serverbronnen, en heeft ook indirect effect op de indexatie en rangschikking door zoekmachines.
Het genereren van een WordPress-pagina kan vele tientallen of zelfs honderden keer interacties met de database omvatten. Het optimaliseren van database-vraagjes is daarom een essentieel en zeer effectief onderdeel van de prestatieoptimalisatie. Hier wordt systematisch uitgelegd hoe de efficiëntie van de database-vraagjes in WordPress kan worden verbeterd, vanuit meerdere aspecten.
Het begrijpen van het levenscyclus van een WordPress-databaseverzoek
Om effectief te kunnen optimaliseren, is het eerst nodig om te begrijpen hoe vragen in WordPress worden gecreëerd en uitgevoerd. Een typisch vraagverzoek gaat door verschillende belangrijke fases: van het indienen tot het terugsturen van de resultaten. In elke fase zijn mogelijkheden voor optimalisatie te vinden.
Aanbevolen leesmateriaal Hoe bouw je met een WordPress-thema een efficiënte en aantrekkelijke bedrijfswebsite?。
De ingebouwde query-objectklasse van WordPress
Op het kernniveau van uitvoering gebruikt WordPress voornamelijk…WP_QueryDeze klasse wordt gebruikt om verschillende soorten datavragen te verwerken. De klasse vormt de kern van het bouwen van pagina-inhoud, zoals artikelen, pagina's en zelfgemaakte artikeltypes. De inhoud van de homepagina, categoriepagina's en de lijst met artikelen op de artikelpagina's wordt in veel gevallen gecreëerd met behulp van deze klasse.WP_QueryDe implementatie wordt gedreven door voorbeelden (instances). Het verpakkt de complexe procedure voor het opstellen van SQL-verzoeken, waardoor ontwikkelaars de zoekvoorwaarden kunnen definiëren met behulp van een array van parameters.
$args = array(
'post_type' => 'post',
'posts_per_page' => 10,
'category_name' => 'news'
);
$query = new WP_Query($args); Caching-mechanism voor zoekresultaten
WordPress beschikt over een ingebouwde objectcache-mechanisme, bedoeld om het aantal dubbele verzoeken naar de database te verminderen.get_post()、get_term_by()Wanneer functies worden opgeroepen, probeert WordPress eerst de gegevens uit de cache te halen.
Het kernpunt van deze cache is…WP_Object_CacheKlasse. Er moet echter worden opgemerkt dat de cache, in het standaardgeval (dus wanneer er geen persistentie-cache-plugin is geïnstalleerd), “niet-persistent” is en enkel bestaat gedurende de levenscyclus van een enkele paginaverzoek. Dit betekent dat de cache wanneer de gebruiker de volgende keer de pagina bezoekt niet meer geldig is, waardoor de database nog steeds moet worden bezocht voor de vereiste gegevens. Om een aanzienlijke verbetering van de prestaties te bereiken, wordt meestal een persistentie-objectcache-backend gebruikt, zoals Redis of Memcached, in combinatie met een plugin (bijvoorbeeld Redis Object Cache).WP_Object_CacheVerbinding opzetten.
Handige tools voor het analyseren van trage query's
Positieering is de eerste stap in het optimaliseren van een website. Het meest directe hulpmiddel hiervoor is WordPress.SAVEQUERIESFouten oplossen met constante: definieer ze zoals hier wordt aangegeven.trueWordPress slaat alle uitgevoerde SQL-verzoeken en de daarbij behorende tijdsspannen op in een globaal array.
// 在 wp-config.php 中添加
define('SAVEQUERIES', true);
// 页面底部(如footer.php)检查查询
if (current_user_can('administrator')) {
global $wpdb;
print_r($wpdb->queries);
} Daarnaast bieden veel professionele plugins voor het monitoren van query's, zoals Query Monitor, een meer intuïtieve gebruikersomgeving om alle query's te zien, de bron van hun oproep (de plugin of het thema), de uitvoertijd, en kunnen ze trage query's gemarkeerd worden. Dit is een goede hulpmiddel voor het optimaliseren van de ontwikkelingsomgeving. In een productieomgeving moet het logboek met trage query's (Slow Query Log) van de database-server (bijvoorbeeld MySQL) worden ingeschakeld voor langdurig monitoren.
Aanbevolen leesmateriaal WooCommerce-handboek: van nul een professionele online winkel bouwen。
Optimatiepraktijken op het niveau van de kerncode
Code is essentieel voor het realiseren van efficiënte queries. Zowel bij het ontwikkelen van thema's als plugins kan het volgen van beste praktijken ervoor zorgen dat prestatieproblemen vanaf het begin worden voorkomen.
De kern-API-functies moeten op de juiste manier worden gebruikt.
WordPress biedt een uitgebreide en geoptimaliseerde set API-functies aan, die je moet gebruiken in plaats van rechtstreeks SQL-opdrachten te schrijven. Denk hierbij aan het ophalen van artikelen uit de huidige categorie.
Contrapunt (onefficiënt): Het gebruik ervan op directe manier$wpdb->get_results()Schrijf de originele SQL-opdracht; hiervoor is mogelijk de cache overgeslagen.
Goed voorbeeld (efficiënt): gebruikWP_Queryof de afgeleide functies daarvanget_posts()Het gebruikt automatisch de cache en het prestatieniveau wordt onderhouden door het kernteam.
In een loop moet je voorkomen om dingen te gebruiken als…get_post_meta()Voor het uitvoeren van een groot aantal queries met een bepaalde functie, is het correct om deze functie eerst te initialiseren.WP_QueryOp dat moment, door middel van...'meta_query'De parameters kunnen worden gebruikt voor filtering, of om andere acties uit te voeren.update_postmeta_cacheRelevante functies: Met deze functies kun je in één keer alle metagegevens van alle artikelen verkrijgen.
De Transients API biedt mogelijkheden voor het tijdelijk opslaan (cachen) van data voor een korte tijd.
Voor duurzame en niet in real time uitgevoerde queries (bijvoorbeeld resultaten van externe API-oproepen of gegevens die worden verwerkt door complexe berekeningen), moet de WordPress-transients-API worden gebruikt voor het opslaan van cachematerialen. Hierbij worden de gegevens samen met een specifiek sleutelnaam en een vervaldingsdatum in de database opgeslagen (of, indien beschikbaar, in een objectcache).
Als voorbeeld: het opslaan van een lijst met populaire artikelen in de cache.
$popular_posts = get_transient('mytheme_popular_posts');
if (false === $popular_posts) {
// 如果缓存不存在或已过期,执行复杂查询
$args = array('meta_key' => 'view_count', 'orderby' => 'meta_value_num', 'posts_per_page' => 5);
$popular_posts = new WP_Query($args);
// 缓存查询结果12小时(43200秒)
set_transient('mytheme_popular_posts', $popular_posts, 43200);
} Optimaliseren van het bouwen van aangepaste queries
Als het echt niet anders kan...$wpdbWanneer je met een klasse een aangepaste query uitvoert, moet je de veiligheidsregels strikt naleven en de juiste hulpmethoden gebruiken. Vergeet dit niet!$wpdb->prepare()Maak voorbereidingen voor de query, om SQL-injecties te voorkomen en om te zorgen dat de data op de juiste manier wordt geëscapeerd.
global $wpdb;
$user_id = 123;
$results = $wpdb->get_results(
$wpdb->prepare(
"SELECT * FROM {$wpdb->prefix}custom_table WHERE user_id = %d AND status = %s",
$user_id,
'active'
)
); Ook moet ervoor worden gezorgd dat er geschikte indexen zijn op de velden van de tabel waarop wordt gecocht.JOINcomplex of moeilijk om uit te voerenWHEREDeze overweging is vooral van belang in het kader van subclausules.
Aanbevolen leesmateriaal Ultimatumgids voor WordPress-optimisatie: een volledig overzicht van strategieën om de snelheid en veiligheid van je website te verbeteren。
Vraagoptimalisatie met behulp van geavanceerde plugins en externe diensten
Wanneer de optimalisatie van de code een plateau bereikt, kunnen ervaren tools en diensten worden gebruikt om nog meer verbeteringen in de prestaties te realiseren.
De persistentie van objectcache inschakelen
Dit is een van de meest effectieve methoden voor websites met hoge bezoekersaantallen. Door een Redis- of Memcached-server te installeren en deze te combineren met de juiste WordPress-plug-ins (zoals “Redis Object Cache” of “Memcached Redux”) kan de prestaties van de website worden verbeterd.WP_Object_CacheDe gegevens zijn opgeslagen in het geheugen.
Dit maakt het mogelijk om de cachering van tussenpaginaverzoeken te realiseren. Als bijvoorbeeld een HTML-fragment van een populaire artikel eenmaal is gemaakt en in de cache is opgeslagen, worden alle volgende verzoeken van gebruikers direct uit de geheugen gehaald, waardoor de uitvoering van PHP-code en de uitvoering van database-opvragen worden vermeden. Na het succesvol instellen van deze optie zie je een aanzienlijke vermindering in het aantal uitgevoerde queries.
Paginering en lazy loading gebruiken
Als je gebruikmaakt van onbeperkt scrollen of veel artikelen laadt, kan dit tot een zeer grote hoeveelheid verzoeken (queries) leidden. Dit moet worden vermeden.WP_QueryGebruik het verstandig.'posts_per_page'Om te voorkomen dat er op één keer honderden of zelfs duizenden records worden gevraagd, worden paginatieparameters gebruikt. Voor lange lijsten of fotoalbums kan de techniek van lazy loading worden geactiveerd: inhoud die niet in beeld komt, wordt pas geladen wanneer dit nodig is. Dit verlicht de belasting op de database tijdens het laden van de eerste pagina aanzienlijk.
Stel je voor dat je een kopie van de database maakt die alleen leesbaar is (niet te bewerken).
Voor zeer grote WordPress-sites waar veel wordt gelezen en weinig wordt geschreven (bijvoorbeeld nieuwsportalen), kan je kijken naar master-slave-replicatie van de database. Alle schrijvende acties (bijv. het plaatsen van artikelen en commentaren) worden gerouteerd naar de master-database, terwijl de meeste leesacties worden verwerkt door één of meerdere alleen-lezende slave-databases. Hiervoor zijn plugins of diepe aanpassingen nodig om de scheiding van lezen en schrijven mogelijk te maken. De technische vereisten zijn relatief hoog, maar dit kan de concurrentieel leescapaciteit van de database aanzienlijk verbeteren.
Optimalisatie van de configuratie van servers en databases
Uiteindelijk worden alle queries uitgevoerd op een MySQL- of MariaDB-servers. Het optimaliseren van de serverconfiguratie is de basis voor het uitvoeren van efficiënte queries.
Belangrijke aanpassingen van MySQL-prestatieparameters
In de configuratiebestand van de database-server (bijvoorbeeld…)my.cnfEr zijn enkele parameters in deze instellingen die van cruciaal belang zijn voor de prestaties van WordPress.innodb_buffer_pool_sizeDe grootte van de InnoDB-bufferpool moet worden ingesteld op 70–80% van het beschikbare geheugen. Dit bepaalt hoe veel gegevens en indexen de database in het geheugen kan opslaan.query_cache_size(Vraag naar de grootte van de cache): Hoewel deze functie sinds versie 8.0 is verwijderd, was ze in eerdere versies handig voor situaties waarin eenvoudige vragen vaak worden gesteld.max_connectionsDe instellingen moeten zo worden geselecteerd dat zowel verbindingen met de webserver als met de back-up-verbindingen worden ondersteund.
Regelmatig onderhoud van de database uitvoeren.
WordPress generereert tijdens het gebruik veel overtollige gegevens, zoals versies van berichten, ontwerpen, beoordelingen die nog moeten worden bekeken, en tijdelijk vervallen gegevens. Deze gegevens zorgen onnodig voor een grotere omvang van de databank en verminderen de snelheid van queries. Je kunt regelmatig plugins gebruiken zoals “WP-Optimize” of “Advanced Database Cleaner” om deze overtollige gegevens te verwijderen. Daarnaast kun je de databastabellen optimaliseren (OPTIMIZE TABLE) of repareren (REPAIR TABLE) om de gegevensstructuur te verbeteren en de I/O-snelheid te verhogen. Het is aan te raden om deze acties uit te voeren in een tijdsperk met weinig gebruikersactiviteit, bijvoorbeeld via phpMyAdmin of op de commandoregel.
Een efficiënte index voor een database-tabel opzetten
Dit zijn essentiële optimalisaties op het niveau van de database. Indexen zijn vergelijkbaar met de inhoudsopgave van een boek; ze helpen de database-engine om gegevens snel te vinden. Allereerst moet worden gezorgd dat de kerntabellen van WordPress (met name…)wp_posts、wp_postmeta、wp_commentsDe primaire en externe sleutelindexen op de tabel zijn compleet. Daarnaast zijn er ook indexen voor de elementen die vaak voorkomen…WHERE、ORDER BY或JOINDe velden in de condities (zoals…)post_status、post_type、comment_post_ID、meta_keyJe moet bepalen of er een gewone index of een samengestelde index nodig is. Het toevoegen van een index kan worden gedaan met SQL-commando's in phpMyAdmin, bijvoorbeeld:
ALTER TABLE wp_postmeta ADD INDEX idx_meta_key (meta_key(50)); Let op: het toevoegen van een index vereist extra schijfruimte en heeft een lichte negatieve invloed op de schrijfsnelheid. Het is belangrijk om de voor- en nadelen af te wegen.
Samenvatting
Het optimaliseren van WordPress-databaseverzoeken is een systeemmatig proces dat uit vier aspecten bestaat: diagnostiek, programmering, tools en onderhoud. De beste aanpak is als volgt: eerst gebruik je tools om trage verzoeken precies te lokaliseren; vervolgens houd je je tijdens het ontwikkelen strikt aan de regels van de kern-API's en de cache-mechanismen, om onefficiënt code te voorkomen; daarna introducer je een permanente objectcache om direct een verbetering in de prestaties te bereiken; ten slotte voer je op het niveau van de databaseserver een goede configuratie en onderhoud uit, en maak je voor specifieke grote tabellen effectieve indexen. Dankzij deze combinatie van optimalisaties kunnen zelfs WordPress-sites met veel inhoud zorgen voor efficiënte databaseverzoeken en snelle responsen, waardoor gebruikers en zoekmachines een soepe bezoekervaring krijgen.
Veelgestelde vragen (FAQ)
Waar worden de “tijdelijke” (transient) gegevens in WordPress opgeslagen?
De opslagplek voor de gegevens van de Transients API in WordPress is afhankelijk van je configuratie. Als de website de permanente objectcache (bijvoorbeeld Redis) niet heeft geactiveerd, worden de tijdelijke gegevens opgeslagen in de database.wp_optionsIn de tabel (met)_transient_Als de opslag van persistentie-objecten is geactiveerd, worden tijdelijke gegevens voorrangrijk opgeslagen in de memoriëncache (bijvoorbeeld in Redis). Dit zorgt voor zeer snelle lees- en schrijfsnelheden en verlichtte de belasting op de database aanzienlijk.
Hoe kun je op een groepsgewijze manier vervallen tijdelijke gegevens schoonmaken?
Overdraagde tijdelijke gegevens worden soms niet automatisch verwijderd. Je kunt gebruikmaken van speciale database-cleanup-plug-ins (zoals WP-Optimize), die meestal de mogelijkheid bieden om overtollige, tijdelijke gegevens in één keer te verwijderen. Of, indien je ervan overtuigd bent dat dit veilig is, kun je in phpMyAdmin SQL-commando's uitvoeren om deze gegevens handmatig te verwijderen.
DELETE FROM wp_options WHERE option_name LIKE '_transient_%' AND option_name NOT LIKE '_transient_timeout_%'; Is het normaal dat het aantal gevraagde gegevens drastisch afneemt nadat de Redis-objectcache is geactiveerd?
Dit is helemaal normaal en is ook een belangrijk resultaat van het activeren van de persistent object caching. Het verminderen van het aantal gevraagde gegevens betekent dat veel gegevens (zoals menu's, artikelen en resultaten van zoekvraag) rechtstreeks uit het geheugen (Redis) worden gehaald, waardoor er geen verzoeken meer worden gestuurd naar de database. Dit verlicht de belasting op de CPU en de I/O-verbindingen van de database-server, wat een teken is van een verbeterde prestatie. Je kunt met het Query Monitor-plugin zien dat de proportion van “cache hits” aanzienlijk is toegenomen.
Op welke database-velden moet een index worden gemaakt?
Voor het opstellen van een index moet je rekening houden met de principes van hoge frequentie van vragen en hoge filteringsmogelijkheden. Geef speciale aandacht aan velden die vaak worden gebruikt voor het zoeken, ordenen en relateren van gegevens. In WordPress zijn enkele typische kandidaten voor indexvelden:wp_poststabellarischpost_type和post_statusCombination (vaak gebruikt voor het opvragen van gepubliceerde artikelen)wp_postmetatabellarischmeta_key(Vaak gebruikt voor het filteren op specifieke metadata), enwp_commentstabellarischcomment_post_ID(Dit wordt gebruikt om artikelen en commentaren met elkaar te verbinden.) Het is handig om de specifieke logs met langzaam uitgevoerde query's te analyseren voordat je een index toevoegt.
De volgende stap, wat moeten we als volgende doen?
Voor meer informatie en praktische kennis
De volgende content is relevant voor het onderwerp van dit artikel en is geschikt voor verder lezen. Het kan vaak effectief zijn om eerst het artikel te lezen dat het dichtst bij uw huidige vraagstuk staat en vervolgens geleidelijk aan artikelen over aanverwante onderwerpen te bekijken.
- Waarom je een online winkel zou moeten bouwen met WooCommerce
- Waarom kiezen voor WordPress? De tien belangrijkste voordelen van een open-source content management systeem (CMS)
- WooCommerce in 10 minuten onder de knie: een handleiding voor het opzetten van een webwinkel vanuit het begin tot het maken van winst
- WooCommerce-compleet handleiding: van installatie tot het opzetten van een geavanceerde e-commerceomgeving
- Wat is WordPress? Een uitgebreide introductie in het Content Management Systeem (CMS)