Performance-Optimierung in Odoo 16
7 Dezember, 2022 durch
Performance-Optimierung in Odoo 16
Intero Technologies GmbH

Performance-Optimierung - einer der Hauptaspekte der neuen Odoo Version 16. Leitmotiv dabei ist die Dauer eines Wimpernschlags: 150 Millisekunden. Jede Aktion, jede Darstellung in Odoo läuft ab sofort innerhalb dieser Zeit ab. Um dieses Performance-Level zu erreichen, wurden alle Ebenen der Anwendung geprüft und optimiert - vom Webclient über das Server-Framework bis hin zum Hosting und der Hardware.

Die Webclient-Ebene

Ein Großteil der Performance-Steigerung wird durch die Verbesserungen innerhalb des Webclients bewirkt. So wurde neben der Einführung der zweiten Version des eigenen OWL-Frameworks und dessen BlockDOM auch ein Upgrade auf Bootstrap 5 durchgeführt. Während in Odoo 15 nur knapp 30% der Widgets durch OWL implementiert waren, sind es bei Odoo 16 nun nahezu 100%.

Weiterhin wurden diverse Bereinigungen im Code vorgenommen. So wurde beispielsweise die Anzahl von CSS bzw. SCSS u.a. durch die Zusammenführung der Community und Enterprise CSS um 68% reduziert.

Verbesserungen gab es auch bei der Auflistung von Datensätzen. Bisher wurde immer die vollständige Anzahl angezeigt. Um Performance zu sparen, werden nun nur noch die ersten 10.000 mit einem „+“ angezeigt. Mit einem Klick auf das Plus sind die Informationen weiterhin einsehbar, aber eben nur dann, wenn sie auch benötigt werden. Verbesserungen erhielt auch der Chatter. Hier wird nun statt dem Long-Polling-Verfahren auf einen Web-Socket gesetzt.

Die Netzwerk-Ebene

Insgesamt wurde die Anzahl an http-Aufrufen deutlich reduziert, indem eine Vereinigung der common und frontend-Assets stattfand. Die Dateigrößen bei der initialen Abfrage für die Darstellung einer Ansicht verringerte sich um ca. 35%. Innerhalb der Ansichten wurde versucht, Redundanzen durch Modifikatoren wie z.B. readonly oder invisible zu vermeiden.

Optimierungen gibt es ebenfalls für die Odoo-Worker. Dateien, die bisher durch den Browser über NGINX angefragt werden mussten und durch einzelne Worker bereitgestellt wurden, können jetzt durch einen einzelnen Worker an NGINX geliefert und von dort an den Browser weitergereicht werden. Ermöglicht wird dies durch das NGINX X-Accel-Redirect (vgl. mit Apache X-Sendfile).

Business Features und Server-Framework

Compute vs. Onchange

Während einiges an Refactoring stattgefunden hat, wurde auch eine grundlegende Funktion geändert, nämlich die Onchange-Funktionalität. Diese wurde auf Compute-Funktionalitäten abgeändert, was Vorteile bietet - Computes funktionieren nicht nur für den JS-Client sondern auch für die Python Module. Auch ist es einfacher, eine klare Abhängigkeit zwischen den einzelnen Berechnungen festzustellen. Während Onchanges nur Logik am Interface abbilden können, sind Computes in der Lage auch Businesslogik auszudrücken. Der wohl aber entscheidendste Vorteil ist, dass mehrfache (gleiche) Berechnungen unterbunden werden können.

Mit dem neuen Parameter precompute=True können außerdem Berechnungen vor der Erstellung des Datensatzes durchgeführt werden, sodass ein nachträgliches Update in der Datenbank vermieden wird.

Übersetzte Felder

In Odoo 15 waren Übersetzungen stets in einer separaten Datenbank-Tabelle gespeichert, wobei immer die Referenz zum übersetzten Datensatz benötigt wurde. Anders in Odoo 16: Nun werden Übersetzungen direkt in der ursprünglichen Tabelle gespeichert. Dazu wird die Sprache zusammen mit dem Übersetzungswert in Form eines JSON-Objekts hinterlegt. Dadurch sind die bisher notwendigen JOIN-Befehle innerhalb der SQL-Queries zum Abfragen von Übersetzungen nicht mehr nötig. Diese Änderung ist gerade für das Laden von Ansichten relevant, da dort sehr viele Übersetzungen auf einmal abgefragt werden.

Fragment-Caching

Besonders im Bereich der Webseite und des E-Commerce ist das Caching, also die Zwischenspeicherung von Teilen der Webseite, spannend. Bei einem üblichen Aufbau hat man einen Header, den Content, die Übersicht über angebotene Produkte und den Footer - zum Beispiel mit Links wie AGB oder dem Impressum. Besucher der Webseite unterscheiden sich dabei grundlegend nur darin, ob sie eingeloggt sind oder nicht. Bereiche wie Header und Footer sind dabei üblicherweise für alle Nutzer gleich. Warum sollte also der Inhalt für diese Bereiche immer wieder initial neu geladen werden, wenn jemand die Webseite besucht?

Genau diese Bereiche können nun mit Odoo 16 zwischengespeichert und aus eben diesem Zwischenspeicher geladen werden, wenn ein Aufruf stattfindet. Andere Bereiche, wie die Produktübersicht, könnten jedoch vom Nutzer abhängig sein, zum Beispiel wenn jemand andere Preise angezeigt bekommt, weil für ihn eine andere Preisliste gilt. Hier wäre es also nach wie vor sinnvoll, die Bereiche neu zu laden. Aber auch das ist nicht zwingend nötig, denn das Fragment-Caching unterstützt auch bestimmte Bedingungen, wie eben die Angabe von Produkten oder einer Preisliste, um die Informationen nur dann neu zu laden, wenn es auch wirklich nötig ist.

Sessions

Bisher wurde immer eine neue Session erstellt und gespeichert, wenn ein neuer Besucher auf die Webseite zugegriffen hat. In Odoo 16 wird zwar immer noch eine Session erstellt, diese aber nur dann gespeichert, wenn es wirklich Unterschiede zur Standard-Session gibt. Besuchen also mehrere Personen die Webseite und nur eine von ihnen legt etwas in den Warenkorb, dann wird auch nur diese Session gespeichert.

Jetzt kostenlose Odoo Beratung anfordern!


Rufen Sie uns an unter 03831 44557 0 oder nutzen Sie das Kontaktformular.

Odoo Beratung anfordern

in Odoo