Beheben von langen Ladezeiten bei WooCommerce durch wc-ajax=get_refreshed_fragments

WooCommerce ist wohl eines der populärsten Plugins, um einen Shop mit WordPress zu erstellen. Die meisten der professionellen Themes bieten integrierte Shop-Funktionen und Designs an. Auch wir betreiben einige Seiten mit WooCommerce. Seit einiger Zeit ärgern wir uns über den Geschwindigkeitstest, zum Beispiel auf Pingdom oder GTMetric und natürlich insbesondere auf Google PageSpeed Insight. Immer wieder konnten wir lange Ladezeiten bei der Komponente “wc-ajax=get_refreshed_fragments” sehen, die Teilweise mehr als 3 Sekunden konsumierte und die Seitenladezeiten insgesamt um 5-10 Sekunden verlängerte.

Wenn du dieses Problem ebefalls auf deiner WordPress-Seite mit WooCommerce beobachtest, findest du hier die passende Lösung, basierend auf den Diskussionen bei Github.

Was ist wc-ajax=get_refreshed_fragments?

Es hat eine Weile gedauert, um herauszufinden, dass „get_refreshed_fragments“ durch WooCommerce aufgerufen wird. Denn je nach Hosting, bzw. der Serverperformance allgemein, variiert die Latenz erheblich. Auf hochperfomanten Servern ist die Latenz so gering, dass wir es erst nicht für ein Problem hielten. Allerdings kann es es auf einem Shared-Hosting durchaus zu Verzögerungen von 3-10 Sekunden kommen; nur wegen diesem einen Call!

pingdom Ladezeiten ajax
Eine viel zu lange Pause beim Ladevorgang

Bei einem Hover über den Balken erfahren wir, dass es auch hier wieder viel zu lange dauert:

Latenz Ajax refresh
Zweieinhalb Sekunden auf einem recht ordentlichen Server. Bei Shared Hosting kann das zu unerträglichen Latenzen führen

Insgesamt haben wir dadurch einen nur sehr durchschnittlichen Score auf Pindom:

pingdom Ergebnis vorher
Performance Grade C… das geht doch sicher besser 🙂

WooCommerce versucht also, die Warenkorb-Details zu aktualisieren und das Script benötigt diese lange Zeit. Da da ein Warenkorb naturgemäß nicht gecached wird, treten die Ladezeiten auf jeder Seite auf. Auch wenn dort weder Warenkorb, noch sonstige Shopelemente zu sehen sind. Folgendes findet sich auf jeder Seite unten im Code:

<script type='text/javascript'>
/* <![CDATA[ */
var wc_add_to_cart_params = {"ajax_url":"\/wp-admin\/admin-ajax.php","wc_ajax_url":"\/?wc-ajax=%%endpoint%%","i18n_view_cart":"View Cart","cart_url":"http:\/\/localhost\/shop\/cart\/","is_cart":"","cart_redirect_after_add":"yes"};
/* ]]> */
</script>

Wie beheben wir dieses Problem?

Das Problem lässt sich durch „de-enqueuing“ beheben, indem man folgendes Script in der functions.php des Themes – mittels WordPress Adminpanel oder FTP/SSH – einfügt:

/** Disable Ajax Call from WooCommerce */
add_action( 'wp_enqueue_scripts', 'dequeue_woocommerce_cart_fragments', 11);
function dequeue_woocommerce_cart_fragments() { if (is_front_page()) wp_dequeue_script('wc-cart-fragments'); }

Navigiere im WordPress Admin Panel zu “Design > Editor” und lokalisiere die functions.php Datei. Füge den Code an das Ende der Datei an:

Änderungen in der functios.php
Einfügen des Codes in die functions.php Datei des Themes

Wenn du die Datei aktualisiert hast, navigiere zu „WooCommerce > Einstellungen“ und klicke auf „Produkte > Darstellung“. Aktiviere die Checkbox für die Option „Nach erfolgreichem Hinzufügen zum Warenkorb weiterleiten„:

Bild WooCommerce Einstellungen
Damit der Warenkorb auf jeden Fall aktualisiert wird, wählen wir diese Option

Dadurch wird der Kunde nach dem Hinzufügen eines Artikels zum Warenkorb geleitet, was eine Aktualisierung des Warenkorbs triggert. Aktivierst du diese Option nicht, kann es sein, dass der Artikel später nicht im Warenkorb ist, da die Funktions des Aktualisierens im Hintergrund ja nun ausgeschaltet ist.

Das macht uns – und dem Kunden –  aber nichts, da wir uns alle über wesentliche flottere Ladezeiten freuen.

Erneutes Testen der Ladezeiten

Wenn alles eingefügt wurde, lösche den Cache deiner Webseite und prüfe erneut auf Pingdom, wie sich die Modifikationen auf die Geschwindigkeit und auch das Ranking der Seite auswirken. Du solltest nun kein „wc-ajax=get_refreshed_fragments“ unter „File Requests“ mehr finden und der Performance Grade sollte sich deutlich verbessert haben:

Bild pingdom Ergebnis nachher
Ein deutlicher Unterschied im Vergleich zu vorher: Das Testergebnis nach den Modifikationen.

Wir hoffen, der Beitrag hilft dir, die Performance deiner Webseite zu verbessern und deinen Besuchern ein angenehmeres Surfen zu ermöglichen. Wenn du Anregungen oder Fragen hast, hinterlasse gerne einen Kommentar.

Ein Gedanke zu „Beheben von langen Ladezeiten bei WooCommerce durch wc-ajax=get_refreshed_fragments

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.