Skip to the content
Documentation
Help Start
Reading in:
  • German: 9,075 of 9,075 pages
About the help in other languages
All help pages

Leistung in Erweiterungen

Eine Erweiterung auch unter persistenten Workern schnell und sicher halten - Abfragen zählen, mit Limits abrufen, cachen, Listener sparsam halten, messen und nie Request-Zustand in statischen Variablen ablegen.

Download as PDF

Address: https://doc.exponential.earth/exphelp/viewer/help/extension-development/part-3-extension-developer/performance-in-extensions.md

On this page

This page is a translation. Read the English original

Leistung in Erweiterungen

Teil 3, Kapitel 36. Eine Erweiterung kann jede Seite einer Website langsamer machen: ein Listener auf response/output, ein Operator im Pagelayout, ein Fetch in einer Schleife. Dieses Kapitel nennt die üblichen Ursachen und die Werkzeuge, die sie finden.

Zuerst messen

WerkzeugZeigt
Die Zeittabelle der Debug-Leistewie lange jeder Teil eines Requests gedauert hat
[DatabaseSettings] SQLOutput=enabledjede Abfrage einer Seite; zählen Sie sie
{debug-timing-point id='...'}...{/debug-timing-point}die Zeit eines Teils eines Templates
./console exp:benchmarkSeitenzeiten über HTTP, A/B-Vergleich zwischen zwei Servern, Kernel-Messpunkte, eine Regressionsprüfung gegen eine Basislinie (Benchmarking)

Messen Sie die Seite, bevor und nachdem Sie Ihre Erweiterung einschalten; der Unterschied ist das, was sie kostet.

Datenbank

  • Zählen Sie die Abfragen. Eine Seite, die dieselbe Abfrage einmal pro Listeneintrag ausführt, enthält eine Schleife, die nur einmal abrufen sollte.
  • Rufen Sie mit Limits und Filtern ab; laden Sie nie einen ganzen Teilbaum, nur um ihn zu zählen (subTreeCountByNodeID() und die _count-Fetch-Funktionen zählen in der Datenbank).
  • Laden Sie keine Attribute, die Sie nicht verwenden: load_data_map false() für Namenslisten.
  • Indizieren Sie Ihre eigenen Tabellen auf den Spalten, nach denen Sie abfragen.

Caching

EbeneEinsatz
Der View-Cache für InhalteInhalts-Views werden bereits gecacht; hebeln Sie das nicht aus, indem Sie benutzerspezifische Daten in einem Full-View-Template ausgeben
cache-blockaufwendige Teile des Pagelayouts: Menüs, Fußzeilen (Caching und Templates)
Ihr eigener CacheErgebnisse langsamer Arbeit (einer externen API): legen Sie sie in einer Cache-Datei unter dem Cache-Verzeichnis ab oder verwenden Sie den Cluster-Datei-Handler, jeweils mit Ablaufzeit; leeren Sie sie, wenn sich Ihre Daten ändern
Die Schlüssel des View-Cacheswenn die Ausgabe einer View von etwas Neuem abhängt, fügen Sie es mit dem Filter content/view/cachekeys hinzu, statt das Caching abzuschalten

Listener und Operatoren auf jeder Seite

response/output, request/input und Operatoren im Pagelayout laufen bei jedem Request. Halten Sie sie bei wenigen Mikrosekunden: keine Datenbank, kein Lesen von Dateien, kein Netzwerk. Erledigen Sie die Arbeit an anderer Stelle und speichern Sie das Ergebnis.

Persistente Worker (Velocity)

Velocity, der empfohlene Anwendungsserver, hält PHP-Prozesse zwischen Requests am Leben. Das macht den Kernel schnell und ändert die Regeln für Ihren Code:

  • Kein Request-Zustand in statischen Variablen. Ein Worker setzt die statischen Variablen jeder Klasse zwischen den Requests zurück, aber Code, der sich darauf verlässt, dass eine statische Variable zu Beginn eines Requests leer ist, sollte es nicht geben: Berechnen Sie pro Request oder versehen Sie den Wert mit dem Schlüssel des Requests.

  • Registrieren Sie einmal pro Request mit einem Request-Schlüssel, nicht mit einem true-Flag, wie die Velocity-Dokumentation zeigt:

    if ( self::$registered !== eZExecution::requestKey() )
    {
        self::$registered = eZExecution::requestKey();
        register_shutdown_function( array( __CLASS__, 'flush' ) );
    }
  • Neue Klassen erfordern einen Neustart der Worker. Nach dem Bereitstellen von neuem Code erzeugt ./console exp:velocity deploy die Autoloads neu, leert die Caches und startet die Worker neu.

  • Umschließen Sie einen Download samt eZExecution::cleanExit() nie mit catch ( Exception ): Unter Velocity wirft der saubere Abschluss eine Ausnahme, um den Request zu beenden.

Siehe Velocity: Exponential in einem Webserver mit persistenten Workern betreiben.

Frontend

  • Laden Sie Skripte und Stylesheets über den Packer (ein Bündel, gecacht, mit dem Zeitstempel im Namen).
  • Binden Sie seitenspezifische Skripte mit ezscript_require nur auf dieser Seite ein.
  • Bilder über Bildaliase, nicht als vollständige Originale.

Verwandte Seiten

Werden Sie Exponential-Partner

Partner teilen ihre Informationen, stellen Mittel bereit, geben Beiträge zurück und entwickeln die Produkte mit uns, und so wächst Exponential. Eine Partner-Website und ein Dashboard sind für Mitte 2027 geplant: Werden Sie noch heute Partner, damit wir schneller wachsen und neue Funktionen früher liefern.

Something wrong on this page? Report an error

Documentation license

This documentation is free documentation, licensed under the GNU Free Documentation License 1.3 or later.

Exponential Copyright © 1998-2026 Exponential Foundation and 7x