Warum sind meine gleichzeitigen AJAX-Anfragen an PHP-Skripte/WP-REST-API so langsam?

Lesezeit: 2 Minuten

Benutzeravatar von Slevin
Slevin

Nach einigen Nachforschungen habe ich den Titel der Frage aktualisiert. Bitte beachten Sie meine Updates unten.

Ursprüngliche Frage:

Ich erstelle eine Website mit WordPress und verwende manchmal asynchrone Aufrufe an WP-REST-API-Endpunkte.

Der Aufruf dieser Endpunkte aus meinen AJAX-Funktionen führt oft zu TTFB-Zeiten von mindestens ~780ms:

Geben Sie hier die Bildbeschreibung ein

Aber wenn ich die URL/den Endpunkt direkt im Browser öffne, bekomme ich TTFB-Zeiten, die 4-5 mal schneller sind:

Geben Sie hier die Bildbeschreibung ein

Ich frage mich, woher die Verzögerungen kommen. Ich betreibe diese Seite auf meinem lokalen Entwicklungsserver mit aktiviertem Apache 2.4, HTTP/2 und PHP 7.

Was ist der beste Weg, um solche Leistungsprobleme zu überwachen?

Bitte beachten Sie: Ich bin nicht mit der eingebauten AJAX-Funktionalität von WordPress. Ich rufe nur so etwas an

axios.get(`${url}/wp-json/wp/v2/flightplan`)

innerhalb einer React-Komponente, die ich in mein Homepage-Template gemountet habe.

Aktualisieren

Verdammt interessant: Das Löschen von Cookies reduziert TTFB viel:

Geben Sie hier die Bildbeschreibung ein

Aktualisierung 2

Nach dem Entfernen der anderen beiden AJAX-Aufrufe wird die flightplan Anfrage wird viel schneller ausgeführt. Ich denke, es gibt einige Probleme mit gleichzeitigen AJAX-Anfragen. Ich habe ein wenig über das Sperren von Sitzungen gelesen, aber da WordPress und alle installierten Plugins keine Sitzungen verwenden, kann dies nicht der Grund sein.

Aktualisierung 3

Definitiv hat es etwas mit meinem lokalen Server-Setup zu tun. Habe die Seite gerade auf einem “echten” Webserver bereitgestellt:

Geben Sie hier die Bildbeschreibung ein

Aber es wäre trotzdem interessant zu wissen, wie man einen Server einrichtet, der gleichzeitig besser umgehen kann.

Aktualisierung 4

Ich habe einen kleinen Test gemacht: 4 Dummy-Requests aufrufen, bevor die “echten” aufgerufen werden. Das Skript gibt nur einen “Foobar”-String zurück. Zur Zeit sieht alles gut aus:

Geben Sie hier die Bildbeschreibung ein

Aber beim Hinzufügen sleep(3) zum Dummy-AJAX-Skript, alle anderen Anfragen dauern auch viel länger:

Geben Sie hier die Bildbeschreibung ein

Wieso den?

Weil Ihr Ajax-Aufruf auf das Laden aller Ihrer WP-Plugins wartet 🙂

Sie müssen also einige Tests ohne Plugin durchführen und eines nach dem anderen aktivieren, um zu sehen, welches Ihren Ajax-Aufruf verlangsamt.

  • Es sind nur wenige WP-Plugins aktiviert (MultilingualPress, ACF, ACF to REST und Timber), und alle sind für die richtige Ausgabe meiner REST-API-Aufrufe erforderlich (ok, neben Timber). Aber ich verstehe den Unterschied zwischen meinem AJAX-Aufruf nicht, der nur den Inhalt von abruft example.com/rest/foo und direkt zugreifen example.com/rest/foo.

    – Slevin

    10. August 2016 um 9:03 Uhr

  • Habe gerade eine Geige erstellt (außerhalb einer WP-Umgebung) und einen AJAX-Aufruf an einen Endpunkt getätigt. Gleiche Geschwindigkeit wie beim direkten Zugriff. Also scheint WordPress AJAX-Anfragen zu modifizieren/filtern/was auch immer?

    – Slevin

    10. August 2016 um 9:14 Uhr

  • Wenn Sie Ajax in WordPress verwenden, brauchen Sie Hooks, also laden Sie alle WordPress-Mechaniken, damit es mit Sicherheit langsamer wird.

    – MaximeK

    10. August 2016 um 9:16 Uhr

  • Ich mache keine Hooks? Ich rufe nur an $.ajax({...}) in meinen JS-Funktionen.

    – Slevin

    10. August 2016 um 9:19 Uhr

  • Es ist nur axios.get(`${$('meta[name="site-url"]').attr('content')}/wp-json/wp/v2/flightplan`)

    – Slevin

    10. August 2016 um 9:23 Uhr


1397020cookie-checkWarum sind meine gleichzeitigen AJAX-Anfragen an PHP-Skripte/WP-REST-API so langsam?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy