Wenn der OpenImmo-Import mal länger dauert...

Gerade wenn OpenImmo2WP in einer WordPress-Hosting-Umgebung mit begrenzten Ressourcen - vor allem hinsichtlich der maximalen Laufzeit und des verfügbaren Speichers für PHP-Prozesse - eingesetzt wird, kann schon einmal folgendes Phänomen auftreten:

Das Problem

Von der Maklersoftware aus wird ein OpenImmo-ZIP-Archiv mit einer überschaubaren Anzahl an Objekten und zugehörigen Bilddateien - z. B. zehn Objekte mit jeweils drei oder vier Fotos - übertragen und dann dauert es eine geschlagene halbe Stunde (oder sogar noch länger), bis der Import endlich abgeschlossen ist und die neuen Angebote in der Website verfügbar sind. Oh ha... 😳

Es kommt zum Glück nicht oft vor, aber ab und zu erreichen uns dann schon mal - absolut verständlich - wütende Support-Anfragen à la "Wieso ist euer sch... OpenImmo-Importer so langsam??? Das kann ja wohl nicht sein!! Wie kann man den schneller machen?!?!? 🤬" *

Die Ursache(n)

Um das Warum zu ergründen, muss ich etwas ausholen: Zunächst einmal ist die Hauptaufgabe unseres Import-Plugins die Vorbereitung der zu importierenden OpenImmo-Daten sowie die anschließende Steuerung der Verarbeitung. Die eigentliche, zeitaufwendige Arbeit (Speichern oder Löschen der Immobilien-Beiträge und Dateianhänge, Skalieren von Bildmaterial etc.) wird dann von den jeweiligen internen WordPress-Funktionen verrichtet. Die Abläufe im Hintergrund sind hier also größtenteils mit denen der manuellen Erfassung eines Immobilienobjekts im WP-Backend identisch.

Das hat auch einen guten Grund: Die Daten nur aus Performancegründen o. ä. am WordPress-Kernsystem vorbeizuschleusen ist eine denkbar schlechte Idee, denn diese würde erhebliche Kompatibilitätsprobleme mit sich bringen. (Es gäbe noch weitere negative Auswirkungen, die ich aber an dieser Stelle außen vor lasse...)

Ergo: Nicht die Importsteuerung ist "langsam", sondern die WP-interne Verarbeitung.

Aaaaaber... selbst auf der lahmsten Server-Krücke, auf der WordPress noch gerade so läuft, dauert das Speichern eines Beitrags (ohne Bilder) nicht mehrere Minuten! Größere Verzögerungen beim Import müssen also eine andere Ursache haben: In fast allen Fällen dieser Art sind serverseitige Abbrüche des Importscripts der Grund. Diese treten meistens dann auf, wenn beim Skalieren von Bildmaterial das für den entsprechenden PHP-Prozess verfügbare Arbeitsspeicher-Kontingent oder dessen maximale Laufzeit überschritten wird.

Ein Abbruch an sich ist kein Problem, da die Importverarbeitung beim folgenden Neustart an der gleichen Stelle fortgesetzt wird. Ein serverseitiger Abbruch bedeutet allerdings, dass das Importscript diesen Neustart nicht selbst bzw. ohne Zeitverzögerung einleiten kann. Genau hierdurch kann eine Reihe zeitlicher Lücken entstehen, die die Ausführungszeit in der Summe mitunter enorm verlängern.

Bei welchem Verarbeitungsschritt genau diese Lücken entstehen, kann übrigens anhand der Debug-Protokolle geprüft werden, die zu jedem Importvorgang per Mail versendet (sofern aktiviert) und im Archivordner .../wp-content/uploads/immonex-openimmo-import/archive gespeichert werden.

Kleiner Exkurs: WP-Cron

Starts und Restarts der Importvorgänge hängen vom - wiederum WordPress-internen - System WP-Cron ab: Hierüber werden sowohl die regelmäßige Prüfung auf zu verarbeitende OpenImmo-Dateien als auch Start und Fortsetzung der Importprozesse gesteuert.

Das Prüfintervall liegt bei zwei Minuten, was allerdings nicht bedeutet, dass exakt alle zwei Minuten ein Importvorgang gestartet oder fortgesetzt wird! WP-Cron funktioniert nämlich standardmäßig so, dass nur beim Aufruf einer beliebigen Seite der Website die vorab hierfür definierten Aufgaben abgearbeitet werden. Sprich, hat die Website bspw. zwei Stunden lang keine Besucher, findet in diesem Zeitraum auch keine Importverarbeitung statt. (Das kann bei schwach frequentierten oder reinen Entwicklungs-WP-Installationen natürlich oft vorkommen.)

Dieser Nachteil kann mit einem "echten Cronjob" ausgebügelt werden (siehe unten).

Die Lösung(en)

1. Script-Ressourcen

Lösungsansatz Nr. 1 zielt darauf ab, die Anzahl der serverseitigen Abbrüche zu reduzieren - im Optimalfall auf Null. Hierfür können im Tab Script-Ressourcen der OpenImmo2WP-Optionen (Einstellungen ➞ OpenImmo Import) verschiedene Einstellungen vorgenommen werden.

Screenshot: OpenImmo-Import-Ressourcen-Optionen

Es bietet sich an, die Werte hier schrittweise zu reduzieren, bis ein passendes Ergebnis erreicht ist. Die wichtigste Angabe ist hierbei die im untersten Eingabefeld: die Anzahl der maximal zu verarbeitenden Dateianhänge. Diese kann im Bedarfsfall bis auf 1 reduziert werden. (Sollte das notwendig sein, ist allerdings der Wechsel zu einem stärkeren Hosting-Paket oder einem alternativen Anbieter die bessere Lösung.)

2. Echter Cronjob

Der Lösungsansatz Nr. 2 ist vor allem dann relevant, wenn es sich um eine Produktiv-Website (Live-Umgebung) handelt, bei der der Import generell zeitkritisch ist. Hier wird mittels eines "echten Cronjobs" die Seite wp-cron.php alle zwei Minuten aufgerufen. Das Format der URL sieht so aus: https://domain.tld/wp-cron.php?doing_wp_cron

Sofern ein entsprechender Eintrag direkt in einer Crontab-Datei (/etc/crontab) vorgenommen wird, könnte dieser folgendermaßen aussehen (anstatt wget funktioniert auch curl o. ä.):

# OpenImmo-Import (alle zwei Minuten)
*/2 * * * * root wget -q -O – https://domain.tld/wp-cron.php?doing_wp_cron

Parallel zur Einrichtung des Cronjobs sollte dann die o. g. reguläre WP-Cron-Verarbeitung beim Aufruf der Website mit dieser Ergänzung in der Datei wp-config.php deaktiviert werden:

define( 'DISABLE_WP_CRON', true );

3. Vollimport-Modus

Auch ein dauerhaft aktiver Modus alle löschen / alle neu importieren für die Verarbeitung von Vollabgleichen, der in den Plugin-Optionen unter Einstellungen ➞ OpenImmo Import eingestellt werden kann, kann zu einer deutlichen und unnötigen Erhöhung der Import-Ausführungszeiten beitragen.

Dieser Modus sollte nur in Ausnahmefällen aktiviert und anschließend wieder per Auswahl der Standardeinstellung teilweise löschen / nur geänderte aktualisieren deaktiviert werden.

4. Bildoptimierungs- und CDN-Plugins

Sind Plugins zur "Optimierung" von Bildmaterial etc. oder dessen Bereitstellung über ein Content Delivery Network (CDN) im Einsatz, können auch diese den Import durch weitere Verarbeitungsschritte deutlich verlangsamen. Das gilt vor allem dann, wenn zusätzliche Größenvarianten jeder Bilddatei generiert werden. Lösungen dieser Art sollten also - zumindest für die Bildanhänge der Immobilienangebote - deaktiviert werden.


* dramatisiert, muss nicht stimmen

Carsten

Carsten

immonex ONE Bulle Hinnak - bullshitfrei inveris