Schnellere lokale Entwicklung durch die Blockierung externen Requests

Ich entwickle Seiten immer lokal. Bei der Entwicklung verwende ich dabei Docker was ich in einer zukünftigen Blogreihe vorstellen möchte. Manchmal erlebe ich bei der lokalen Entwicklung sehr lange Request-Zeiten, vor allem im Backend. Da ich normalerweise während der Entwicklung immer das Query Monitor Plugin einsetze, konnte ich schnell feststellen, dass es an einigen HTTP Requests lag, die fehlschlugen. Dieser wurden entweder vom Core oder Premium Plugins/Themes ausgelöst, die nach Updates gesucht haben.

Externe Requests blockieren

Um diese Fehler zu beheben habe ich zuerst einzeln Filters oder Actions deaktiviert, die diese Requests auslösen. Dann bin ich aber auf einen globalen Filter gestoßen, der das noch vereinfacht:

add_filter( 'pre_http_request', '__return_true', 100 );

Das ist nicht der einfachste oder beste Weg, denn er blockiert sämtliche Requests, egal auf welchen Host sie zugreifen. Um nur externe Requests zu blockieren, kann man stattdessen einfach folgende Konstante setzen:

define( 'WP_HTTP_BLOCK_EXTERNAL', true );

Das blockiert keine lokalen Requests, die eventuell für Cronjobs oder ähnliche Funktionalitäten gebraucht werden.

Bestimme externe Hosts erlauben

Manchmal kann man aber nicht einfach alle externen Requests blockieren, da einige Plugins/Themes, die man gerade entwickelt, externe APIs verwenden. Daher kann man mit einer anderen Konstante über eine kommagetrennte Liste diese Hosts definieren:

define( 'WP_ACCESSIBLE_HOSTS', 'example.com, *.example.com' );

Wie ihr in meinem Beispiel sehen könnt, sind auch Wildcard-Subdomains möglich. Hierbei wird über einen regulären Ausdruck das Suchmuster auf eine beliebige Tiefe an Subdomains geprüft.

Mehr als nur HTTP Requests blockieren

Die beiden Konstanten helfen dabei HTTP Requests zu blockieren, die durch WordPRess ausgelöst werden. Dies funktioniert aber nur, wenn diese die WordPreSS API Funktionen für HTTP Requests verwenden. Wenn ein Plugin/Theme allerdings mit file_get_contents, curl oder ähnlichem arbeitet, werden solche Requests nicht blockiert.

Weiterhin werden auch keine Requests blockiert, die vom Browser aus gemacht werden. Wenn man auch solche Requests blockieren will, dann kann man das Plugin „Offline Mode“ von Frank Bültge einsetzen, das man direkt von GitHub aus runterladen und installieren kann. Es versucht so viele externe Requests wie möglich zu blockieren.

Fazit

Lokal zu entwickeln ist immer der beste Weg, wenn man an einem Projekt arbeitet. Sollte man aber eine instabile Internetverbindung haben (oder gar keine, wie z.B. im Flugzeug), dann kann das die lokale Entwicklung extrem verlangsamen. Mit Hilfe der beiden vorgestellten Konstanten mann man die gewohnte Geschwindigkeit wieder zurückholen.

Veröffentlicht von

Bernhard ist fest angestellter Webentwickler, entwickelt in seiner Freizeit Plugins, schreibt in seinem Blog über WordPress und andere Themen, treibt sich gerne bei den WP Meetups in Berlin und Potsdam herum und läuft nach Feierabend den ein oder anderen Halbmarathon.

3 Kommentare » Schreibe einen Kommentar

  1. Nachdem ich bis zur Konstante gelesen hatte und dir einen kleinen Hinweis zum ‚alten aber für mich bewährten‘ Plugin senden wollte — lese ich den Hinweis; danke dafür!

    @Tobias: ja.

    • @Tobias: Frank will mit seinem „Ja“ natürlich sagen, dass es auch HTTPS Requests mit einschließt. Es werden hierfür ja auch die gleichen Funktionen verwendet.

Schreibe einen Kommentar

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