Lassú Frissítések oldalak nagy hálózatoknál
Opcionális lapozó kódrészlet a Custom Dashboard kiegészítővel, ha több száz Child-webhelynél lelassulnak a Frissítések oldalai.
Ez a fejezet olyan rendszergazdáknak szól, akik több száz Child-webhelyet kezelnek, és náluk már lassúak vagy nem reagálnak a Frissítések oldalak. Ha az oldalak normálisan töltenek be és reagálnak, maradj az alapértelmezett működésnél: a nagy webhelyszám önmagában nem ok a kódrészlet használatára.
A frissítési listák sok bővítmény-, sablon- és webhelysort tartalmazhatnak, az összecsukott szakaszokban lévőket is. Ezek megjelenítése jelentős terhelést ró a böngészőre. A kerülőmegoldás korlátozza az egy listába betöltött webhelyek számát, és lapozóvezérlőket ad, így kisebb csomagokban dolgozhatod végig a hálózatot.
A beépített lapozás a Frissítések oldalakhoz tervben van, határidő nélkül. Az alábbi kódrészlet ideiglenes, opcionális megoldás.
Előfeltétel: több száz csatlakoztatott Child-webhely, tapasztalható lassúság vagy a böngésző akadozása a Frissítések oldalakon, rendszergazdai jog és engedély egyedi PHP szerkesztésére a vezérlőpulton, valamint a Custom Dashboard kiegészítő telepítve és bekapcsolva a vezérlőpulton.
Mikor segít a megoldás
Szekció neve “Mikor segít a megoldás”Akkor érdemes használni, ha egy Frissítések oldal sokáig tölt, nehezen kezelhetővé válik, vagy nagy frissítési lista megjelenítésekor magas a böngésző processzorhasználata. A megoldás azt csökkenti, hány webhely ad sort az aktuális listához. Nem diagnosztizálja a lassú vezérlőpult minden okát, és nem garantál konkrét betöltési időt. A szerverhibák, a kapcsolati problémák és más kiegészítők adatbetöltése külön hibaelhárítást igényel.
Az oldalméret webhelyeket számol, nem bővítményeket, sablonokat vagy frissítési sorokat. 100 webhelyes oldalnál is lehet egy oldalon több száz frissítés. Azok a webhelyek is beleszámítanak a csomagba, amelyeknél nincs elérhető frissítés.
A lapozó kódrészlet hozzáadása
Szekció neve “A lapozó kódrészlet hozzáadása”-
Nyisd meg a Kiegészítők → Custom Dashboard oldalon a PHP fület. Közvetlen cím:
/wp-admin/admin.php?page=Extensions-Mainwp-Custom-Dashboard-Extension&tab=php. Szerkesztés előtt őrizz meg egy másolatot a már ott lévő PHP-kódról. -
Másold be a teljes alábbi kódblokkot a PHP-szerkesztőbe. Nyitó vagy záró PHP-címke nélkül kell beilleszteni. A szerkesztőben már meglévő, nem kapcsolódó kódrészleteket hagyd meg. A lapozó kódrészletet csak egyszer add hozzá: ha már van korábbi változata, cseréld le, ne vegyél fel másodikat. A megvalósításhoz a teljes kód kell, a navigációs vezérlőkkel együtt.
// MainWP Updates: load sites in pages. Paste WITHOUT an opening PHP tag.// Start with 100 sites/page; reduce to 50 if needed. Use a positive whole number.( static function () {$per_page = 100;if ( ! is_admin() || wp_doing_ajax() ||'updatesmanage' !== ( isset( $_GET['page'] ) ? sanitize_key( wp_unslash( $_GET['page'] ) ) : '' ) ) {return;}$tab = isset( $_GET['tab'] ) ? sanitize_key( wp_unslash( $_GET['tab'] ) ) : 'plugins-updates';if ( ! in_array( $tab, array( 'plugins-updates', 'themes-updates', 'wordpress-updates', 'translations-updates' ), true ) ) {return;}$state = null;$get_state = static function () use ( &$state, $per_page ) {if ( null !== $state ) {return $state;}$db = \MainWP\Dashboard\MainWP_DB::instance();$is_staging = 'no';if ( ( is_plugin_active( 'mainwp-staging-extension/mainwp-staging-extension.php' ) ||is_plugin_active( 'mainwp-timecapsule-extension/mainwp-timecapsule-extension.php' ) ) &&'staging' === \MainWP\Dashboard\MainWP_System_Utility::get_select_staging_view_sites() ) {$is_staging = 'yes';}// Count the connected, accessible sites without fetching update JSON.$params = array( 'connected' => 'yes', 'is_staging' => $is_staging, 'count_sql' => true, 'others_fields' => array() );if ( \MainWP\Dashboard\MainWP_System::instance()->is_multi_user() ) {$params['where'] = 'wp.userid = ' . (int) get_current_user_id();}$total = (int) $db->get_var_field( $db->get_sql_websites_for_current_user_by_params( $params ) );$pages = max( 1, (int) ceil( $total / $per_page ) );$current = 1;if ( isset( $_GET['current_page'], $_GET['_opennonce'] ) &&wp_verify_nonce( sanitize_key( wp_unslash( $_GET['_opennonce'] ) ), 'mainwp-admin-nonce' ) ) {$current = max( 1, (int) $_GET['current_page'] );}$state = array( 'total' => $total, 'pages' => $pages, 'current' => min( $current, $pages ) );return $state;};add_filter( 'mainwp_manage_updates_limit_loading', static function ( $limit, $context ) use ( $per_page ) {return 'updates' === $context ? $per_page : $limit;}, 10, 2 );// Keep this request's page stable even if another admin opens a different page.add_filter( 'mainwp_get_sql_websites', static function ( $params ) use ( $per_page, $get_state ) {if ( ! empty( $params['limit_sites'] ) && isset( $params['connected'] ) && 'yes' === $params['connected'] ) {$state = $get_state();$params['per_page'] = $per_page;$params['page'] = $state['current'];}return $params;}, 100 );add_action( 'mainwp_updates_after_nav_tabs', static function () use ( $per_page, $get_state, $tab ) {$state = $get_state();$first = $state['total'] ? ( $state['current'] - 1 ) * $per_page + 1 : 0;$last = min( $state['total'], $state['current'] * $per_page );echo '<div id="bk-updates-site-pages" class="ui segment" style="margin:1em 0">';echo '<strong>' . esc_html( sprintf( 'Sites %d-%d of %d | Page %d of %d', $first, $last, $state['total'], $state['current'], $state['pages'] ) ) . '</strong>';if ( $state['pages'] > 1 ) {$base = add_query_arg( array('page' => 'UpdatesManage', 'tab' => $tab,'current_page' => 999999999, '_opennonce' => wp_create_nonce( 'mainwp-admin-nonce' ),), admin_url( 'admin.php' ) );$links = paginate_links( array('base' => str_replace( '999999999', '%#%', $base ), 'format' => '','current' => $state['current'], 'total' => $state['pages'],'type' => 'array', 'prev_text' => 'Previous', 'next_text' => 'Next','add_args' => false,) );echo '<nav aria-label="Updates site pages" style="display:flex;flex-wrap:wrap;gap:.5em">';foreach ( $links as $link ) {echo '<span class="ui small basic label">' . wp_kses_post( $link ) . '</span>';}echo '</nav>';}echo '</div>';} );} )(); -
Kattints a Save Changes gombra. Ha a szerkesztő szintaktikai hibát jelez, ellenőrizd, hogy a teljes blokkot másoltad-e be, PHP-címke és Markdown-kódkerítés nélkül.
-
Nyisd meg a Frissítések → Bővítmények oldalt (közvetlen cím:
/wp-admin/admin.php?page=UpdatesManage&tab=plugins-updates). A lista fölött megjelenik a webhelytartomány és az oldalszám. A számozott oldalakkal, a Previous és a Next hivatkozással léphetsz a csomagok között. A kódrészlet a Sablonok, a WordPress és a Fordítások frissítési oldalakra is érvényes, amikor azok elérhetők.
A kódrészlet alapból 100 webhelyet tölt be oldalanként.
A webhelyek számának megválasztása oldalanként
Szekció neve “A webhelyek számának megválasztása oldalanként”A kódrészlet tetején lévő alapértelmezett sor:
$per_page = 100;Ha a lista még így is nehéz, módosítsd erre:
$per_page = 50;Mentsd a kódrészletet, és nyisd meg újra a Frissítések → Bővítmények oldalt, így az első oldalról indulsz. Pozitív egész számot használj. A kisebb csomagok kevesebb sort töltenek be egyszerre, de több oldalváltást kívánnak. A legjobb érték attól függ, hány frissítés van egy-egy webhelyen, és mennyire érzed gyorsnak a listát.
A megoldás korlátai
Szekció neve “A megoldás korlátai”| Elem | Viselkedés a kódrészlettel |
|---|---|
| A frissítési lista és a darabszámai | Az aktuális oldalon lévő webhelyek frissítéseit tartalmazzák. |
| A listában lévő tömeges frissítési műveletek | A betöltött webhelyoldalra vonatkoznak. A teljes hálózathoz oldalanként végig kell menned. |
| Az oldalsáv frissítési összesítői | Továbbra is a teljes hálózatot mutatják, ezért magasabbak lehetnek, mint az aktuális lista darabszámai. |
| Globális figyelmen kívül hagyás | Továbbra is globálisan érvényes, a lapozás nem szűkíti. |
| Elem-, webhely- és címkenézet | Az éppen betöltött csomag frissítéseit csoportosítják. A csoportosítás váltása nem tölti be a hálózat többi részét. |
| Automatikus frissítések és szinkronizálási ütemezések | A kódrészlet nem állítja be és nem módosítja őket. |
| Más vezérlőpult-oldalak és kiegészítők | Nem kapnak lapozást a kódrészlettől. A Lighthouse-jelentések adatbetöltését sem érinti. |
A kódrészlet egyedi PHP-t ad a meglévő MainWP-hookokhoz, a MainWP bővítményfájljait nem módosítja. A hookok és az oldalak viselkedése a későbbi kiadásokban változhat: távolítsd el a kerülőmegoldást, amikor áttérsz a beépített lapozásra.
A lapozóvezérlők hibaelhárítása
Szekció neve “A lapozóvezérlők hibaelhárítása”Nincs Next vagy Previous hivatkozás
Szekció neve “Nincs Next vagy Previous hivatkozás”A vezérlők csak akkor jelennek meg, ha a jogosult csatlakoztatott webhelyek több oldalra oszlanak. Ha az összes belefér a beállított korlátba, a webhelytartomány megjelenik, de nincs második oldal.
Egy oldalon nincs elérhető frissítés
Szekció neve “Egy oldalon nincs elérhető frissítés”Egy csomagban lehetnek olyan webhelyek, amelyeknél a kiválasztott kategóriában nincs frissítés. A lapozóvezérlőkkel lépj tovább. Az üres csomag nem jelenti, hogy az egész hálózat naprakész.
Egy régi oldalhivatkozás az első oldalra visz
Szekció neve “Egy régi oldalhivatkozás az első oldalra visz”A lapozási hivatkozások időkorlátos WordPress-nonce-t tartalmaznak. Nyisd meg újra a Frissítések → Bővítmények oldalt, és a friss vezérlőket használd, ne mentett lapozási címet.
Az oldal még mindig lassú
Szekció neve “Az oldal még mindig lassú”Csökkentsd az oldalankénti webhelyek számát, és hasonlítsd össze a reakcióidőt. Ha alig javul, távolítsd el a kódrészletet az alábbiak szerint, és fordulj a MainWP támogatásához: add meg az érintett frissítési fület, a webhelyek hozzávetőleges számát, és hogy a késés az oldal betöltésekor vagy a lista használatakor jelentkezik.
A kerülőmegoldás eltávolítása
Szekció neve “A kerülőmegoldás eltávolítása”- Nyisd meg a Kiegészítők → Custom Dashboard → PHP oldalt (
/wp-admin/admin.php?page=Extensions-Mainwp-Custom-Dashboard-Extension&tab=php). - Csak a lapozó kódrészletet töröld, és kattints a Save Changes gombra. A nem kapcsolódó PHP-kódot hagyd meg.
- Töltsd újra a Frissítések → Bővítmények oldalt: a MainWP visszatér a normál, teljes listás betöltéshez.
Készült: