myty 5.2 mit Aufräumarbeiten im Kern und PHP7-Unterstützung

Mike Reiche in Wissen 15.08.2016

Das Siteroles-Modul als Kernbestandteil für Role Base Access Control ist Dreh- und Angelpunkt für sämtliche Nutzer, ihren Rollen und deren Zugriffsberechtigungen. 

Mit der Umstellung auf Doctrine, wurde damit das letzte direkte Myty-Modul von eigenen ORM-Implementationen gelöst. Das wird in Nachfolgeversionen die Entwicklung im Zusammenhang mit Siteroles beschleunigen, da nun eine mächtige und performante API zur Verfügung steht.

Bemerkbar macht sich das zum Einen im Code, denn der Siteroles-Quellcode ist von 208kiB auf 92kiB um mehr als die Hälfte geschrumpft, und das obwohl ein Kompatibilitätslayer übrig geblieben ist, der veraltete Funktionen bereitstellt. Dank intelligentem Refactoring konnten aber viele Klassen ersetzt werden, so ist z.B. die veraltete Klasse RBAC_Ressource ein Alias für Resource, der PHP-Funktion class_alias() sei Dank!

Doctrine macht ORM nicht auf Anhieb performanter. Grundsätzlich kann man sagen, dass der Performance-Break-Even-Point erst bei umfangreicher Nutzung erreicht wird, denn die Initialisierung des Frameworks kostet selber verhältnismäßig viel Zeit.

Daher bedient sich das Myty-Frontend eines einfachen aber wirkungsvollen Tricks: Es speichert den Gast-Nutzer und seine Rollen zwischen. Dadurch sank die Rendering-Zeit meiner Entwicklungsplattform von 95ms auf 60ms, somit auf 63%. Mit PHP7 wirds sogar noch deutlicher, denn hier misst der Page-Load nur noch 30ms, was einer Reduzierung auf 31% des Ausgangswertes mit PHP 5.5 entspricht.

Last but not least ist noch das Refactoring des Konfigurations-Frameworks zu erwähnen. Im Grunde wird hier lediglich die Konfiguration aus serialisierten PHP-Arrays und unstrukturierten relationalen Daten in ein Dokumenten-System überführt. Was einfach klingt ist aber in der Praxis haarsträubend, denn die Schwierigkeit liegt darin, dass Legacy-Code weiterhin läuffähig bleibt.

Wo vorher Zugriffe auf Arrays stattgefunden haben, verrichten nun komplexere ArrayAccess-kompatible Klassen ihren Dienst, die dafür sorgen dass die Zugriffe auf tyConfig::$data['modules'] weiterhin funktionen.