Ak sa vaše stránky Divi 5 zobrazujú 3 – 8 sekúnd, aj keď váš server nie je preťažený, problém často pramení z výbušnej zmesi: načítanie prvkov všade, opakované požiadavky a blokovanie vykresľovania JavaScriptom tretích strán.
Problém
„Chyba“ nie je ojedinelá chyba, ale vzorec, ktorý často vidím na stránkach Divi 5 (WordPress (6.9.4, PHP 8.1+): Front-end sa spomalí po pridaní modulov, marketingových skriptov alebo po aktualizácii témy/pluginu. Na strane administrátora môže byť Visual Builder tiež pomalý, ale tento príspevok sa zameriava predovšetkým na výkon front-endu.
Keď povolíte ladenie, v protokoloch sa môžu zobraziť tieto signály (realistické príklady):
PHP Warning: Undefined array key "et_pb_pagebuilder" in /wp-content/themes/Divi/includes/builder/frontend-builder/helpers.php on line 123
PHP Notice: Function _load_textdomain_just_in_time was called incorrectly. Translation loading for the my-plugin domain was triggered too early.
This is usually an indicator for some code in the plugin or theme running too early. in /wp-includes/functions.php on line 6121
A na strane prehliadača (konzoly) typické príznaky:
[Violation] 'requestAnimationFrame' handler took 120ms
[Violation] Added non-passive event listener to a scroll-blocking 'touchstart' event
Uncaught ReferenceError: jQuery is not defined
Kde sa objavuje:
- čelné : stránka, ktorá „bliká“, vysoká LCP, príliš dlhý čas do interakcie, trhané rolovanie.
- admin : pomalý nástroj na tvorbu, pomalé ukladanie, dlhý náhľad (často spojené s rovnakou príčinou: príliš veľa prvkov a volaní AJAX).
- Cron / AJAX Niekedy opakované volania (heartbeat, REST endpointy, admin-ajax) zvyšujú záťaž.
Pre koho je táto príručka určená? Viete, ako pridať kód (podradenú tému alebo „mu-plugin“), čítate Query Monitor a chcete optimalizácie. kompatibilný WordPress 6.9.4+ sans Prelomenie Divi 5, Elementoru alebo Avady. Na konci budete vedieť, ako izolovať úzke miesto (materiály, databáza, JS), aplikovať 3 opravy kódu „pred/po“ a overiť zisky.
Rýchle zhrnutie
- Začnite meraním Monitor dotazov + nástroje DevTools (LCP, TBT) pred dotykom kódu.
- Divi 5 sa spomaľuje najmä keď načítate CSS/JS všade (aj na stránkach, ktoré to nepotrebujú).
- Druhá najčastejšia príčina opakujúce sa databázové dotazy (možnosti/automatické načítanie, meta dotazy, shortcody, ktoré prepočítavajú).
- Tretia príčina skripty tretích strán (chat, analytika, A/B testovanie), ktoré blokujú hlavné vlákno.
- 3 záplat podmienené dotazy, prechodné javy + zneplatnenie, cielené odloženie/oneskorenie (bez dotyku skriptov buildera).
Príznaky
- Stránka je pomalá iba na určitých URL adresách (napr. ultramodulárna domovská stránka Divi), zatiaľ čo jednoduché články sú v poriadku.
- LCP > 3 s na mobile, a to aj s povolenou vyrovnávacou pamäťou stránok.
- Vysoká TBT (Celkový čas blokovania): stránka „reaguje“ pomaly, rolovanie sa zasekáva, kliknutia sa ignorujú.
- Počet žiadostí veľmi vysoké (200+), často kvôli skriptom + fontom + modulom tretích strán.
- HTML sa doručuje rýchlo, ale vykresľuje sa pomaly Server je v poriadku, ale prehliadač trávi čas v JS.
- Chyby po pridaní úryvkov : biela obrazovka (fatálne) alebo rozbité stránky po príliš agresívnom „odložení“.
- Konflikt vyrovnávacej pamäte/minifikacie CSS nebol použitý, JS „jQuery nie je definované“, moduly Divi už neanimujú.
Rýchla diagnostická tabuľka
| symptóm | Príčina pravdepodobná | overenie | Riešenie |
|---|---|---|---|
| TTFB v poriadku (< 300 ms), ale LCP/TBT slabé | JS úroveň + príliš veľa prvkov | Nástroje pre vývojárov > Výkon / Lighthouse | Riešenie 1 + Riešenie 3 |
| Vysoký TTFB (> 800 ms) aj s vyrovnávacou pamäťou | Nesprávna konfigurácia vyrovnávacej pamäte / stránky nie sú uložené do vyrovnávacej pamäte / veľa požiadaviek | Vyrovnávacia pamäť hlavičiek + Monitor dotazov (dotazy) | Riešenie 2 + kontrola vyrovnávacej pamäte servera |
| Stránky sú pomalé iba pri pripojení | Administrátorský panel, nástroj na tvorbu, skripty pre „prihlásených“ používateľov | Inkognito + pripojený test | Podmienené dotazy + zakázanie nepotrebných administrátorských modulov |
| Pomalý nástroj na tvorbu divízií, prijateľná predná strana | Náročné administrátorské pluginy, Heartbeat, koncové body | Monitor dotazov (AJAX), sieť | Obmedzenie srdcového tepu, vyčistenie administrátorských pluginov |
| Po „odložení JS“ animácie prestali fungovať | Odložiť skripty jQuery/Divi | Konzola „jQuery nie je definovaná“ | Riešenie 3 (zoznam vylúčení) |
Prečo sa to deje?
Jednoducho povedané: Divi 5 funguje dobre, keď načítava iba to, čo stránka potrebuje. Ale akonáhle naň navrstvíte moduly, efekty, písma, skripty tretích strán a „all-in-one“ pluginy, zaplatíte za to cenu v podobe CSS/JS a spracovania na strane prehliadača.
Technická verzia: dominujú tri úzke miesta.
- Globálne aktíva vaša téma/podradený objekt alebo súbory z vášho pluginu zaradené do frontu všetko stránky prostredníctvom
wp_enqueue_scripts, niekedy bezpodmienečne. Aj keď Divi 5 optimalizuje svoj vlastný pipeline, vaše pridania tieto optimalizácie obchádzajú. - Opakované dotazy a výpočty krátke kódy, filtre
the_contenta moduly, ktoré vytvárajúWP_Queryaleboget_posts()s každým prístupom. Na stránke s vysokou návštevnosťou vyrovnávacia pamäť stránok čiastočne maskuje... až kým nemáte stránky bez vyrovnávacej pamäte (nákupný košík, členská sekcia) alebo veľa variácií (súbory cookie, geolokácia, A/B testovanie). - Blokovanie JavaScriptu Sledovacie skripty, chat, tepelné mapy, slidery atď. pridávajú prácu do hlavného vlákna. Prehliadač oneskoruje vykresľovanie a skóre Core Web Vitals prudko klesá.
Príčiny sú uvedené od najčastejšie po najvzácnejšie (na Divi 5):
- Globálne zaradenie do frontu (CSS/JS) v podradenej téme alebo plugine úryvkov.
- Príliš agresívna minifikácia/concat (vyrovnávacia pamäť pluginov), ktorá mení poradie závislostí (jQuery zaostáva, vložené skripty pred knižnicou).
- Opakované databázové dotazy + nadrozmerné možnosti automatického načítavania.
- Skripty tretích strán pridané „manuálne“ v Divi (kódový modul) alebo prostredníctvom pluginu hlavičky/päty.
- Nekompatibilita PHP/pamäte (stránky stále v PHP 8.0 alebo príliš nízky memory_limit), zriedkavé, ale skutočné.
Predpoklady pred začatím
- zabezpečiť Dokončené (súbory + databáza). Ak ste v produkčnom prostredí, vykonajte klonovanie/staging.
- verzia WordPress 6.9.4, PHP 8.1+ (ideálne 8.2/8.3, ak ho váš poskytovateľ hostingu ponúka), aktuálny Divi 5.
- outils :
- Monitor dopytov pre dotazy, hooky, HTTP API, chyby PHP.
- Kontrola stavu a riešenie problémov izolovať konflikt bez narušenia verejného priestoru.
- Prístup k
wp-config.phpaby sa správne povolilo ladenie.
Povoľte použiteľné ladiace prostredie (ak je to možné, na stagingovom rozhraní):
define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );
define( 'WP_DEBUG_DISPLAY', false ); // Évitez d'afficher les notices en front
define( 'SCRIPT_DEBUG', false ); // Laissez à false en prod; true uniquement pour diagnostiquer
Užitočné úradné dokumenty: Ladenie WordPressu.
Riešenie 1: Vyčistite zbytočne načítaný CSS/JS (podmienené dotazy)
S týmto problémom som sa často stretol na stránkach Divi, kde podradená téma načítava všade súbory „site.css“ + „site.js“ a tieto súbory obsahujú rozsiahle knižnice (swiper, gsap, fancybox) použité na 2 stránkach.
Diagnostický
- Nástroje pre vývojárov > Sieť: identifikuje „vlastné“ súbory CSS/JS načítané na stránke, ktorá ich nepotrebuje (napr. jednoduchý článok).
- Monitor dotazov > Skripty/štýly: identifikujte úchyty (názvy) a pôvod (podradená téma, plugin).
Predtým (nefunkčné): globálne zaradenie do frontu
Typický príklad v functions.php z podradenej témy (alebo pluginu úryvkov):
<?php
add_action( 'wp_enqueue_scripts', function () {
// Mauvaise pratique : chargé sur toutes les pages, même quand inutile
wp_enqueue_style(
'child-site',
get_stylesheet_directory_uri() . '/assets/site.css',
array(),
'1.0.0'
);
wp_enqueue_script(
'child-site',
get_stylesheet_directory_uri() . '/assets/site.js',
array( 'jquery' ),
'1.0.0',
true
);
}, 10 );
Po (opravené): načítať iba v prípade potreby
Cieľ: načítať vaše dáta iba na stránkach, kde sú potrebné. V Divi máte často stránky identifikovateľné podľa ID, slugu, šablóny alebo prítomnosti shortcode/modulu.
<?php
/**
* Plugin conseillé : placez ce code dans un mu-plugin pour éviter les pertes lors d'une mise à jour.
* Fichier : wp-content/mu-plugins/divi-perf-enqueues.php
*/
add_action( 'wp_enqueue_scripts', function () {
// Ne jamais casser l'admin
if ( is_admin() ) {
return;
}
$should_load = false;
// 1) Exemple : ne charger que sur la page "Accueil" (à adapter)
if ( is_front_page() ) {
$should_load = true;
}
// 2) Exemple : ne charger que sur un template spécifique
if ( is_page_template( 'templates/landing.php' ) ) {
$should_load = true;
}
// 3) Exemple : ne charger que sur une page précise (ID)
if ( is_page( 123 ) ) {
$should_load = true;
}
if ( ! $should_load ) {
return;
}
// Versionnez avec filemtime() pour éviter les caches fantômes après déploiement
$css_path = get_stylesheet_directory() . '/assets/site.css';
$js_path = get_stylesheet_directory() . '/assets/site.js';
wp_enqueue_style(
'child-site',
get_stylesheet_directory_uri() . '/assets/site.css',
array(),
file_exists( $css_path ) ? (string) filemtime( $css_path ) : null
);
wp_enqueue_script(
'child-site',
get_stylesheet_directory_uri() . '/assets/site.js',
array(),
file_exists( $js_path ) ? (string) filemtime( $js_path ) : null,
true
);
}, 20 );
Prečo sa to vlastne zrýchľuje?
- Menej bajtov Na stiahnutie, najmä na mobile.
- Menej CSS na analýzu (prehliadač trávi čas prepočítavaním štýlov).
- Menej JS kódu na spustenie, preto je TBT nedostupný.
Vysvetlenie blok po bloku
is_admin(): zabraňuje narušeniu editora/tvorcu.$should_load: centralizuje logiku. Videl som príliš veľa stránok s 10ifrozptýlené, nemožné udržiavať.filemtime(): vyhýba sa pasci „Opravil som to, ale vyrovnávacia pamäť zobrazuje starú verziu“.- Odstránenie závislosti
jqueryAk ho nepotrebujete: jQuery je často prítomný na Divi, ale nevyžadujte ho zbytočne.
Užitočná alternatíva: zaradenie pluginu do frontu na určitých stránkach
Mnohé spomalenia pramenia z pluginov, ktoré sa načítavajú všade (formuláre, slidery, mapy). Ak poznáte ich funkcie, môžete ich jednoducho odstrániť.
<?php
add_action( 'wp_enqueue_scripts', function () {
// Exemple : sur les articles, enlever un script inutile (handle à adapter)
if ( is_single() ) {
wp_dequeue_script( 'some-plugin-frontend' );
wp_dequeue_style( 'some-plugin-frontend' );
}
}, 100 ); // Priorité haute pour passer après les enqueues du plugin
Oficiálna referencia: wp_dequeue_script ().
Riešenie 2: Vyhnite sa opakovaným požiadavkám (prechodové javy + vyrovnávacia pamäť objektov)
V Divi 5 majú „marketingové“ stránky často dynamické moduly (vybrané články, produkty, referencie). Úskalie: krátky kód alebo vlastný modul vykoná databázový dotaz pri každom zobrazení, niekedy aj viackrát na stránke.
Diagnostický
- Monitor dotazov > Dotazy: identifikácia opakovaných dotazov (rovnaký SELECT, rovnaký meta_kľúč).
- Pozrite sa aj na „Volajúci“: rýchlo uvidíte, či pochádza z krátkeho kódu v
the_contentalebo globálny háčik.
Predtým (nefunkčné): krátky kód, ktorý vyžaduje pri každom zásahu
Realistický príklad: shortcode „najnovšie články“ vložený do modulu Code Divi.
<?php
add_shortcode( 'latest_posts_cards', function ( $atts ) {
$atts = shortcode_atts(
array(
'count' => 6,
),
$atts,
'latest_posts_cards'
);
$q = new WP_Query(
array(
'post_type' => 'post',
'posts_per_page' => (int) $atts['count'],
'no_found_rows' => true,
)
);
if ( ! $q->have_posts() ) {
return '';
}
ob_start();
echo '<div class="cards">';
while ( $q->have_posts() ) {
$q->the_post();
echo '<a class="card" href="' . esc_url( get_permalink() ) . '">' . esc_html( get_the_title() ) . '</a>';
}
echo '</div>';
wp_reset_postdata();
return (string) ob_get_clean();
} );
Problémy:
- Každé zobrazenie = jeden dopyt (alebo viac, ak pridáte metaúdaje/výrazy).
- Ak skrátený kód pokrýva viacero stránok, načítanie sa rozloží.
- Ak sa nachádzate na neskrytej stránke (člen, nákupný košík), platíte za to pri každej návšteve.
Po (opravené): prechodné + správne zneplatnenie
Finálny HTML kód sa ukladá do vyrovnávacej pamäte a pri publikovaní/aktualizácii článku sa zneplatní. Je jednoduchý, robustný a kompatibilný s WordPressom 6.9.4.
<?php
/**
* Cache HTML d'un shortcode avec transient.
* Compatible PHP 8.1+.
*/
function bpcab_latest_posts_cards_render( int $count ): string {
$q = new WP_Query(
array(
'post_type' => 'post',
'posts_per_page' => $count,
'no_found_rows' => true,
'ignore_sticky_posts' => true,
'update_post_meta_cache' => false,
'update_post_term_cache' => false,
)
);
if ( ! $q->have_posts() ) {
return '';
}
ob_start();
echo '<div class="cards">';
while ( $q->have_posts() ) {
$q->the_post();
echo '<a class="card" href="' . esc_url( get_permalink() ) . '">' . esc_html( get_the_title() ) . '</a>';
}
echo '</div>';
wp_reset_postdata();
return (string) ob_get_clean();
}
add_shortcode( 'latest_posts_cards', function ( $atts ) {
$atts = shortcode_atts(
array(
'count' => 6,
),
$atts,
'latest_posts_cards'
);
$count = max( 1, min( 20, (int) $atts['count'] ) );
// Clé de cache dépendante du paramètre
$cache_key = 'bpcab_latest_posts_cards_' . $count;
$cached = get_transient( $cache_key );
if ( is_string( $cached ) && $cached !== '' ) {
return $cached;
}
$html = bpcab_latest_posts_cards_render( $count );
// TTL raisonnable : 15 minutes (à adapter)
set_transient( $cache_key, $html, 15 * MINUTE_IN_SECONDS );
return $html;
} );
/**
* Invalidation : quand un post est publié/mis à jour/supprimé.
* On supprime plusieurs variantes (count 1..20) pour rester simple.
*/
function bpcab_latest_posts_cards_purge_cache(): void {
for ( $i = 1; $i <= 20; $i++ ) {
delete_transient( 'bpcab_latest_posts_cards_' . $i );
}
}
add_action( 'save_post_post', function ( $post_id, $post, $update ) {
// Évitez les autosaves/révisions
if ( wp_is_post_autosave( $post_id ) || wp_is_post_revision( $post_id ) ) {
return;
}
bpcab_latest_posts_cards_purge_cache();
}, 10, 3 );
add_action( 'deleted_post', function ( $post_id ) {
if ( get_post_type( $post_id ) === 'post' ) {
bpcab_latest_posts_cards_purge_cache();
}
}, 10, 1 );
Prečo to problém vyrieši?
- Odstraňujete požiadavky na väčšinu prístupov (najmä pri ukladaní objektov do vyrovnávacej pamäte Redis/Memcached).
- Vyhnete sa prepočtu HTML v
the_content, čo je na Divi veľmi populárna stránka (veľa filtrov). - Vyrovnávacie pamäte meta/termíz obmedzíte pomocou
update_post_meta_cacheetupdate_post_term_cachekeď to nepotrebujete.
Hodnotenia výkonu a kompatibility
- Prechodové javy sa ukladajú do databázy bez objektovej vyrovnávacej pamäte a do pamäte pomocou Redis/Memcached. Obe možnosti sú v poriadku, ale zvýšenie výkonu je oveľa lepšie s perzistentnou objektovou vyrovnávacou pamäťou.
- Oficiálny dokument: Prechodné javy API.
- Vyhnite sa nastaveniu TTL na „1 deň“ bez zneplatnenia: uvidíte zastaraný obsah a nakoniec v panike „vymažete všetky vyrovnávacie pamäte“.
Riešenie 3: Odloženie JavaScriptu tretej strany (defer/delay) bez narušenia Divi 5
Klasický scenár: v plugine na ukladanie do vyrovnávacej pamäte povolíte možnosť „JS Delay“ a Divi (alebo modul) sa pokazí. Potom túto možnosť vypnete a stratíte obrovský zisk. Správny prístup je odkazovať iba na tretiua vylúčiť kritické skripty (jQuery, skripty témy/buildera, závislé inline skripty).
Diagnostický
- Nástroje pre vývojárov > Výkon: identifikácia dlhých úloh a blokujúceho JS kódu.
- Nástroje pre vývojárov > Sieť: identifikácia domén tretích strán (napr.
connect.facebook.net,www.googletagmanager.com, mačka atď.).
Predtým (nefunkčné): globálne odloženie na všetkých skriptoch
Nebezpečný úryvok, ktorý stále koluje (často kopírovaný zo starého tutoriálu):
<?php
add_filter( 'script_loader_tag', function ( $tag ) {
// Mauvaise pratique : defer sur absolument tout
return str_replace( '<script ', '<script defer ', $tag );
} );
Typické výsledky: Uncaught ReferenceError: jQuery is not definedModuly Divi, ktoré sa nepodarilo inicializovať, zamrznuté slidery.
Po (opravené): cielené odloženie + zoznam vylúčení
Uplatňujeme defer Vylučujeme iba nekritické skripty a explicitne vylučujeme citlivé handle. Kľúčový bod: nehádame interné handle Divi (môžu sa meniť). Namiesto toho vylučujeme podľa závislostí a podľa „rodín“ (jQuery + skripty označené ako kritické) a obmedzujeme sa na tretiu stranu, ktorú ovládate (vaše skripty + niekoľko pluginov).
<?php
/**
* Defer ciblé des scripts front.
* Objectif : réduire le JS bloquant sans casser Divi 5.
*
* Placez ce code en mu-plugin et testez sur staging.
*/
add_filter( 'script_loader_tag', function ( $tag, $handle, $src ) {
if ( is_admin() ) {
return $tag;
}
// 1) Exclusions strictes : ne touchez pas à jQuery ni aux scripts "core"
$excluded_handles = array(
'jquery',
'jquery-core',
'jquery-migrate',
);
if ( in_array( $handle, $excluded_handles, true ) ) {
return $tag;
}
// 2) Exclure les scripts chargés dans l'en-tête (souvent critiques)
// Si un script n'est pas en footer, on évite d'y toucher par défaut.
// (On ne peut pas toujours détecter "in_footer" ici de façon fiable selon les plugins.)
// Stratégie : n'appliquer defer qu'à une allowlist.
$allowed_handles = array(
'child-site', // Votre JS custom
'contact-form-7', // Exemple : à adapter
'wpforms', // Exemple : à adapter
'gtm4wp', // Exemple : à adapter
);
if ( ! in_array( $handle, $allowed_handles, true ) ) {
return $tag;
}
// 3) N'ajoutez pas defer si déjà présent
if ( str_contains( $tag, ' defer' ) ) {
return $tag;
}
// Ajout de defer
return str_replace( '<script ', '<script defer ', $tag );
}, 10, 3 );
Možnosť „Oneskorenie“ (agresívnejšia): iba pre identifikované skripty tretích strán
Keď skutočný problém pramení z scenár tretia strana (chat/teplotná mapa), defer To nie vždy stačí. Môžete oddialiť ich načítanie po interakcii. Je to rizikovejšie (UX, sledovanie), ale efektívne.
Minimalistický príklad: skript tretej strany sa vloží až po prvom rolovaní/kliknutí. Robím to hlavne pre widgety chatu.
<?php
/**
* Injecte un loader JS "delay" en footer.
* Ajustez la liste de scripts tiers selon vos besoins.
*/
add_action( 'wp_footer', function () {
if ( is_admin() ) {
return;
}
?>
<script>
(function() {
"use strict";
var loaded = false;
function loadThirdParty() {
if (loaded) return;
loaded = true;
// Exemple : charger un script tiers (URL à adapter)
var s = document.createElement("script");
s.src = "https://example-cdn.invalid/chat-widget.js";
s.async = true;
document.head.appendChild(s);
}
// Déclencheurs : interaction utilisateur
window.addEventListener("scroll", loadThirdParty, { passive: true, once: true });
window.addEventListener("click", loadThirdParty, { passive: true, once: true });
window.addEventListener("keydown", loadThirdParty, { passive: true, once: true });
// Fallback : charge au bout de 8s si aucune interaction
window.setTimeout(loadThirdParty, 8000);
})();
</script>
<?php
}, 100 );
riziká Ak budete príliš dlho otáľať, môžete stratiť analytické udalosti typu „zobrazenie stránky“. Otestujte to pomocou svojho nástroja (GA4, Matomo, Pixel) a zdokumentujte svoju voľbu.
Oficiálna dokumentácia o načítavaní skriptov: wp_enqueue_script () a filter tag_načítača_skriptov.
Kontroly po korekcii
- Pred/po meraní :
- Maják (mobilný): LCP, TBT, CLS.
- Nástroje pre vývojárov > Sieť: počet požiadaviek, celková prenesená hmotnosť.
- Monitor dotazov: počet dotazov do databázy, celkový čas, pomalé dotazy.
- Funkčné testy Divi 5 :
- Menu, kotvy, posuvníky, harmoniky, formuláre.
- Stránky s dynamickými modulmi (blog, obchod, referencie).
- Test pripojených verzus odpojených Divi a niektoré pluginy sa načítavajú rýchlejšie, keď ste prihlásení.
- Cache Vymažte vyrovnávaciu pamäť pluginu + vyrovnávaciu pamäť servera (ak ju máte) + vyrovnávaciu pamäť prehliadača. Videl som ľudí „overiť“ regresiu, pretože testovali starý zdroj uložený v vyrovnávacej pamäti.
Ak to stále nefunguje
- Izolujte konflikt Pomocou Kontroly stavu (režim riešenia problémov): vypnite všetky pluginy okrem Divi/Divi Builder a potom ich jeden po druhom znova aktivujte.
- Skontrolujte chyby v PHP v
wp-content/debug.logZáplava oznámení môže veci spomaliť (najmä ak je protokol na pomalom disku). - Ovládanie pamäte PHP Ak sa priblížite k limitu, dôjde k výmene/GC. Skontrolujte
WP_MEMORY_LIMITa limit na strane poskytovateľa hostingu. - Zobraziť možnosti automatického načítania : kedy
autoloadStáva sa to obrovské; každý dotaz načíta príliš veľa údajov. Monitor dotazov môže pomôcť, inak použite inšpekciu databázy (pokročilé). - Dočasne zakázať minifikáciu/concat (Plugin vyrovnávacej pamäte): Ak sa stránka opäť stabilizuje, problémom je poradie skriptov. Znova ho aktivujte, s výnimkou handlerov Divi/jQuery.
- Konzola prehliadača : jediná chyba JS môže zabrániť inicializácii modulov (čo vyzerá ako „pomalá stránka“, keď ide o skript, ktorý sa opakuje).
- Test bez CDN (dočasne): nesprávne nakonfigurovaná CDN môže zvýšiť latenciu a vynechanie vyrovnávacej pamäte.
- Prepisuje Ak máte chyby 404 v aktívach, regenerujte trvalé odkazy (prepíšte ich) a skontrolujte pravidlá servera.
Užitočné príkazy WP-CLI (ak máte prístup)
# Vérifier l'environnement
wp core version
wp php version
wp plugin list --status=active
wp theme list
# Vider certains caches (selon votre stack)
wp cache flush
# Repérer des options autoload (avancé, à manipuler avec prudence)
wp db query "SELECT SUM(LENGTH(option_value)) AS autoload_bytes FROM wp_options WHERE autoload='yes';"
WP-CLI: oficiálna dokumentácia.
Časté úskalia a chyby
| symptóm | Príčina pravdepodobná | Odporúčané riešenie |
|---|---|---|
| Biela obrazovka po pridaní úryvku kódu | Kód skopírovaný na nesprávne miesto / chýba bodkočiarka | Test na staging, aktivácia WP_DEBUG_LOGopravte syntax |
jQuery is not defined |
Odloženie použité na jQuery alebo poradie skriptov prerušené minifikáciou | Vylúčiť jquery/jquery-corezakázať concat, znova otestovať |
| Úryvok kódu „nefunguje“ | Stránka vyrovnávacej pamäte/CDN zobrazuje starú verziu | Verzia s filemtime()vymazať vyrovnávaciu pamäť pluginu + CDN |
| Optimalizácia lokálne OK, v produkcii pomalá | Skripty tretích strán, latencia siete, chýbajúca vyrovnávacia pamäť objektov | Profil v produkcii (bez vplyvu), ak je to možné, povoľte Redis/Memcached |
| Hooky neboli vykonané | Úryvok kódu umiestnený v deaktivovanom plugine / konflikt s pluginom úryvku kódu | Uprednostnite mu-pluginskontrolujte poradie načítania |
| CSS/JS sa nenačítal | zlý get_stylesheet_directory_uri() vs get_template_directory_uri() |
Pre detské témy použite get_stylesheet_* |
| Regresia na Elementore/Avade | Zrušenie zdieľaného alebo príliš globálneho popisovača z frontu | Použite podmienky pre každú stránku/šablónu, vyhnite sa pravidlám pre celý web |
Chyby, ktoré často vidím (a ktoré sú nákladné)
- Skopírujte úryvok „odložiť všetko“ Našiel som to na fóre: skôr či neskôr sa to pokazí.
- Vložte kód do nesprávneho súboru (Ex.
functions.php(nadradenej témy Divi). V ďalšej aktualizácii bude všetko nefunkčné. - Zabúdanie na prioritu : pre
wp_dequeue_script, často sa vyžaduje vysoká priorita (napr. 100). - Mätúca akcia a filter :
script_loader_tagje filter, nie akcia. - Testovanie priamo v produkcii bez vrátenia zmien. Na stránke Divi môže chyba JS ovplyvniť všetky stránky.
Variant / alternatíva
Metóda bez kódu (pluginy)
- Ak si nájdete čas na konfiguráciu vylúčení Divi, môže postačovať plugin na ukladanie do vyrovnávacej pamäte/performance, ktorý spravuje vylúčenia pomocou handle-ov (minifikacia, JS delay). Úskalím je „optimalizácia jedným kliknutím“: na Divi často nefunguje.
- Pre databázu poskytuje perzistentná objektová vyrovnávacia pamäť (Redis/Memcached) čistý zisk na stránkach neukladaných do vyrovnávacej pamäte.
Pokročilejšia metóda (vývojári)
- PHP profiler (APM): Sentry, New Relic, Datadog. Okamžite uvidíte, či je pomalosť spôsobená databázou, HTTP API alebo CPU.
- Nahradiť niektoré krátke kódy statickými blokmi alebo vzormi, keď obsah nie je potrebné prepočítavať pri každom zásahu.
- Rozdelenie vlastného JS : jeden balík na typ stránky, načítaný podmienene (riešenie 1), namiesto
site.jsmonolitický.
Vyhnite sa tomuto problému v budúcnosti
- Prijmite jednoduché pravidlo Žiadne vlastné „globálne“ CSS/JS bez odôvodnenia. Načítava sa podľa stránky/šablóny alebo podľa funkcie.
- Skryť, čo je drahé Krátke kódy a dotazy musia mať stratégiu ukladania do vyrovnávacej pamäte (prechodná + neplatná).
- Vyhnite sa neviditeľným závislostiam Ak váš JavaScript závisí od jQuery, deklarujte ho explicitne. Ak je to možné, prejdite na jednoduchší JavaScript, aby ste znížili obmedzenia poradia.
- Monitorovanie skriptov tretích strán Každý „bezplatný“ widget zvyšuje cenu. Videl som stránky s 12 marketingovými tagmi; žiadna optimalizácia pre WordPress to nedokáže vynahradiť.
- Uchovávajte si interný denník zmien Keď povolíte „oneskorenie JS“, všimnite si výnimky, inak pri ďalšom incidente stratíte hodiny.
Užitočné referencie pre WordPress:
- Najlepšie postupy pre zaradenie do frontu: Vrátane CSS a JavaScriptu
- API prechodných javov: transients
- Skripty s hákmi: tag_načítača_skriptov
zdroje
- Ladenie WordPressu (WP_DEBUG, protokoly)
- developer.wordpress.org — Vrátane CSS a JavaScriptu
- developer.wordpress.org — Prechodové API
- developer.wordpress.org — filter script_loader_tag
- Monitor dotazov (plugin)
- Kontrola stavu a riešenie problémov (plugin)
- WordPress Core Trac (vyhľadávanie vstupeniek na predstavenia)
- GitHub — vývoj na wordpresse (zdrojový kód)
- PHP.net — OPcache (priamy vplyv na výkon)
často kladené otázky
Je Divi 5 nevyhnutne pomalší ako bloková téma?
Nie. Na jednoduchých stránkach môže byť Divi 5 úplne postačujúci. Rozdiel je badateľný najmä na vysoko modulárnych stránkach a pri počte skriptov tretích strán. Skutočným faktorom je to, čo na každej stránke načítate a spustíte.
Kam umiestniť kód: detská téma, plugin, mu-plugin?
Pre optimalizácie „infraštruktúry“ (zaradenie do frontu, odloženie, vyrovnávacia pamäť) odporúčam mu-pluginVyhnete sa stratám počas aktualizácie Divi alebo zmeny témy.
Je to kompatibilné s Elementorom alebo Avadou?
Áno, ak sa budete držať podmienok pre jednotlivé stránky/šablóny a zoznamu povolených úchytov. Nebezpečenstvo predstavuje úryvok kódu „odložiť všetko“ alebo wp_dequeue_* príliš globálne, čo môže odstrániť aktíva potrebné pre iného staviteľa.
Prečo Monitor dotazov zobrazuje menej dotazov, ale stránka zostáva pomalá?
Pretože úzke hrdlo je pravdepodobne na strane prehliadača (JS/CSS) alebo siete (skripty tretích strán). Skontrolujte TBT, dlhé úlohy a celkovú prenesenú hmotnosť.
Nestačí vyrovnávacia pamäť stránky?
Ukladanie stránok do vyrovnávacej pamäte pomáha predovšetkým s TTFB. Ak je váš LCP/TBT slabý, často je to spôsobené príliš podrobným alebo zle načítaným CSS/JS. Preto je dôležitý podmienený dotaz a cielené odloženie.
Mám povoliť OPcache?
Áno, ak to váš poskytovateľ hostingu umožňuje. OPcache výrazne znižuje využitie CPU v PHP. Referencia: PHP OPcache.
Ako viete, ktoré úchyty vylúčiť z odloženia?
Začnite vylúčením jquery, jquery-corePotom pridajte skripty, ktoré sa počas používania pokazia. Presné identifikátory nájdete v časti Monitor dotazov (karta Skripty).
Spôsobí prechodný stav problémy so zastaraným obsahom?
Nie, ak počas aktualizácií správne zneplatníte platnosť (napr. save_postBez zneplatnenia áno, skončíte s nekonzistentným obsahom.
Je „delay JS“ zlý pre SEO?
Záleží na tom, čo odďaľujete. Odďaľovanie chatu vo všeobecnosti nemá vplyv na SEO. Odďaľovanie skriptu, ktorý vkladá viditeľný obsah, môže spôsobiť problémy. Udržujte kritické skripty okamžité a odďaľujte nepodstatné tretie strany.
Spomalenia zažívam iba vtedy, keď som pripojený na internet, je to normálne?
Často áno: administrátorský panel, editačné skripty, pluginy, ktoré načítavajú prvky „prihláseného používateľa“. Vždy testujte v režime súkromného prehliadania, aby ste zmerali zážitok návštevníka.