06. Jan 2012

FLOW3 - Was bringt Release 1.1?

Seit dem FLOW3 Release 1.0 haben wir viele Anfragen für interessante Projekte rund um das neue PHP-Framework bekommen. Auch unser erstes größeres FLOW3-Projekt ist seit dem Release-Datum live und läuft zuverlässig. So ein Launch zieht natürlich etwas Arbeit nach sich, so dass von uns über dieses fast historische Ereignis aus Zeitgründen noch kein Blogeintrag verfasst wurde.

Deswegen schauen wir jetzt mal ein bisschen nach vorne:

Was wird das nächste Release bringen?

Ein wirklich wichtiges Feature, welches in 1.0 zwar vorhanden, jedoch noch nicht nutzbar war, ist das Thema Lokalisierung und Internationalisierung (oder abgekürzt I18n).

Zur Ausgabe von lokalisierten Texten (zum Beispiel Meldungen bei der Validierung oder Labels in Formularen) ist es unumgänglich einen Mechanismus zur Übersetzung anzubieten. Auch die Ausgabe von Datum und Uhrzeit, Zahlen oder Währungen müssen an landesspezifische Eigenheiten angepasst werden. Eine Möglichkeit zur Definition der Sprachdateien bietet dabei der XLIFF-Standard, der mit TYPO3 4.6 auch Einzug in die bestehende Version des CMS gehalten hat. Ein TranslationProviderInterface bietet dabei Flexibilität für andere Implementierungen. Als Entwickler wird man dabei hauptsächlich mit der Klasse Translator oder dem <f:translate> View-Helper in Berührung kommen. Neben der Adressierung von Labels über einen Key (bekannt aus TYPO3) ist es nun auch möglich anhand des Originaltexts zu übersetzen.

Translations im PHP-Code:

  1. // Get label by id
  2. $label = $this->translator->translateById('update');
  3. // Get label by original label
  4. $label = $this->translator->translateByOriginalLabel('Authentication required');

Translations im Fluid-Template:

  1. <!-- Translate by id with default text for missing translation -->
  2. <f:translate key="user.unregistered">Unregistered User</f:translate>
  3. <!-- Translate by text -->
  4. <f:translate>Unregistered User</f:translate>

Der sogenannte FormatResolver bringt dabei flexible Argumente mit Umwandlung von lokalisierten Formaten ins Spiel. So können Zahlen und Datumsangaben oder auch eigene Werte flexibel in Übersetzungen umgewandelt werden:

  1. // Translate by original label with formatted argument
  2. $label = $this->translator->translateByOriginalLabel('Record {0,number} saved', NULL, array(42));
  3. // $label => "Record 42 saved"

Performance, Performance, Performance

Neben allgemeinem Feintuning und dem Feedback der ersten Anwender gibt es jedoch einen besonderen Schwerpunkt für das Release 1.1: die Performance (besonders im Production Context) und der Ressourcenverbrauch. Natürlich ist ein umfangreiches Framework wie FLOW3 immer etwas langsamer als ein genau auf einen Zweck geschriebenes und optimiertes Script, jedoch sollten dabei immer die Kosten eines Projekts gegenübergestellt werden. Spart ein Entwickler Zeit und wird die Wartung in Zukunft vereinfacht sind zusätzliche Kosten für mehr Hardware schnell eingespart. Jedoch zeigte sich in einigen Teilen des Frameworks wie z.B. dem ReflectionService erhebliches Optimierungspotenzial. Auch der Bootstrap, also die Initialisierung von FLOW3 ist mit 1.1 für Performance Optimierungen und Feintuning wesentlich flexibler geworden. Als positiver Nebeneffekt können Pakete nun über RequestHandler flexibel in den Bootstrap eingreifen und eine eigene Initialisierung vorgeben. So können nur die Teile des Frameworks geladen werden, welche für einen Request benötigt werden. Gerade für service-orientierte Applikationen bringt dies einen Vorteil.

Im Beispiel des TYPO3.Soap Package kann so z.B. ein optimierter RequestHandler benutzt werden:

  1. class Package extends BasePackage {
  2. public function boot(\TYPO3\FLOW3\Core\Bootstrap $bootstrap) {
  3. $bootstrap->registerRequestHandler(new RequestHandler($bootstrap));
  4. }
  5. }
  6.  
  7. class RequestHandler implements RequestHandlerInterface {
  8. public function handleRequest() {
  9. $sequence = $this->buildRuntimeSequence();
  10. $sequence->invoke($this->bootstrap);
  11. ...
  12. }
  13. public function buildRuntimeSequence() {
  14. $sequence = $this->bootstrap->buildEssentialsSequence();
  15. // Declare new step typo3.flow3:objectmanagement:proxyclasses to run after typo3.flow3:systemlogger
  16. $sequence->addStep(new Step('typo3.flow3:objectmanagement:proxyclasses', array('TYPO3\FLOW3\Core\Booting\Scripts', 'initializeProxyClasses')), 'typo3.flow3:systemlogger');
  17. ...
  18. }
  19. }

Wie man sieht kann ein Step in einer Bootstrap Sequence dynamisch Abhängigkeiten auflösen und eine individuelle Initialisierung implementieren.

Weitere Optimierungen:

  • FreezableBackendInterface für Caches, die ein “einfrieren” des Zustands für einen rein lesenden Zugriff unterstützen. Ermöglicht ein optimiertes Laden von Proxyklassen, denn im Production Context muss jetzt nicht mehr geprüft werden, ob ein Cache-Eintrag abgelaufen ist.
  • Optimierter ClassLoader mit einem neuen symbolischen Link Packages/.Shortcuts, welcher einen direkten Zugriff auf Packages liefert, unabhängig von Unterordnern in Packages.
  • Optimierte Initialisierung des PackageManager, die einen kompletten Scan der Paketverzeichnisse nur noch im Development Context oder beim initialen Aufruf erfordert.

Insgesamt konnte durch die vielen kleinen und einigen größeren Änderungen im Kern des Frameworks ein deutlicher Geschwindigkeitszuwachs mit reduziertem Speicherverbrauch erreicht werden. Wer also bisher an der Performance von FLOW3 zweifelte, sollte das Framework noch einmal ausgiebig testen.

Genau das hat das Core-Team nämlich auch gemacht. Mit einem neuen Paket für das Profiling können Speicherverbrauch und aufgewendete Zeit in verschiedenen Teilen des Frameworks auch durch Anwender einfach ausgewertet werden. Bisher musste dafür ein komplettes Profiling mit xhprof oder xdebug durchgeführt und vor allem ausgewertet werden. In umfangreichen Loadtests in einem realistischen Szenario hat sich der Durchsatz für eine unserer Applikation um den Faktor 2 verbessert. Durch den geringeren Ressourcenverbrauch blieb dabei die Latenz wesentlich konstanter als vor den Optimierungen.

Mehr Sicherheit

Schon mit Release 1.0 war mit PBKDF2 ein starkes Hashing von Passwörtern im Security-Framework implementiert. Jedoch hat die Implementierung in PHP einen Nachteil in der Anzahl der möglichen Hashing-Iteration. Mit einer neuen BCryptHashingStrategy (ab 1.1 der Standard) und der Unterstützung für mehrere Hashing-Strategien können in einem System unterschiedliche Hashing-Mechanismen benutzt werden. Auch zukünftige Migrationen sind so möglich.

Ausblick

Natürlich wurden noch viele andere Änderungen durchgeführt, die sicherlich im endgültigen Changelog Beachtung finden werden. Release 1.1 wird FLOW3 in Sachen Stabilität und Geschwindigkeit auf eine neue Stufe bringen und ermöglicht durch die renovierte Initialisierung mehr Flexibilität. Lokalisierung und Internationalisierung werden mit dem I18n-Framework vervollständigt, was eine der letzten Lücken im Funktionsumfang von FLOW3 schließt.

Trackback-Link
  •  
  • 8 Kommentar(e)
  •  
Gravatar: Julian Kleinhans (kj187)
Julian Kleinhans (kj187)
10. Jan 2012
Danke

Hey Christopher,
ein super Blogeintrag, danke!

Hoffentlich gibts von der Art in Zukunft noch mehr ;-)

Gruß
Julian

Gravatar: Ludwig Mair
Ludwig Mair
11. Jan 2012
Installationsschwirigkeiten mit Flow3

Hi Christopher,
verfolge das Geschehen rund um Flow3 schon eine Weile und kann nur Lob aussprechen wie ihr das alles haendelt. Super Projekt, super Team.
Hatte daraufhin versucht Flow3 mal kurz zu testen und muss aber feststellen, dass ich es nicht zum laufen bekommen habe. Warum kann Flow3 nicht so einfach zu installieren sein wie Codeigniter oder andere PHP-Frameworks. Runterladen, entpacken und los geht es?
Auch ist es schwer vernuenftige Anleitungen dafuer zu finden fuer z.b. Windows xampp und andere. Es ist schoen, eine Menge Posts und Postcasts zu finden was Flow alles kann, aber wenn man schon bei einer Installation scheitert, vermute ich , wenden sich sicher eine Menge Leute gleich wieder ab. In meinen Fall ist es xampp auf win. Gibt es dafuer irgendwo eine Anleitung. Waere sehr Dankbar dafuer.

g Luwig

Gravatar: Christopher Hlubek
Christopher Hlubek
16. Jan 2012
Re: Installationsschwirigkeiten

Hallo Ludwig,

eigentlich sollte sich FLOW3 auch unter XAMPP recht einfach installieren lassen. Funktioniert es nicht anhand des Quickstart Guides (http://flow3.typo3.org/documentation/guide/partii/installation.html)? Ansonsten ist der IRC Channel oder die Mailingliste eine guter Ort für spezifische Fragen oder Probleme (http://flow3.typo3.org/support.html).

Viele Grüße,

Christopher

Gravatar: Flavio
Flavio
13. Jan 2012
Internationalisierung von Datensätzten

Hi Christoph,
mich würde interessieren wie Datensätze in der Datenbank internationalisiert werden können. Gibt es diesbezüglich einen neuen Ansatz?

Herzliche Grüße

Flavio

Gravatar: Christopher Hlubek
Christopher Hlubek
16. Jan 2012
Re: Internationalisierung von Datensätzten

Hallo Flavio,

es gibt erste Planungen für die Übersetzung von Domain Models. Jedoch ist dies kein einfaches Problem. Wahrscheinlich wird es zuerst in Phoenix auch nur für Content Nodes ermöglicht werden. D.h. für FLOW3 muss zur Zeit noch eine eigene Lösung implementiert werden (z.B. Language Flag im Model und dann selektieren nach Flag). Beim Einsatz von Doctrine könnte auch das Translatable Behaviour helfen (http://www.doctrine-project.org/blog/doctrine2-behavioral-extensions#translatable).

Viele Grüße,

Christopher

Gravatar: Flavio
Flavio
19. Jan 2012
Performance

Hi Christoph,
danke für die Info. Eine kleine Frage zur Performance habe ich noch.
Gibt es irgendwo eine Beispielkonfiguration für Varnish in Verbindung mit FLOW3 bzw. TYPO3 5.0? Und kannst du mir irgendwelche Tipps zu Performance-Optimierung geben?

Diesbezüglich bin ich mir noch sehr unsicher über den Einsatz von FLOW3 für ein reales Projekt.

Herzliche Grüße

Flavio

Gravatar: David
David
07. Jun 2012
Tutorial für SOAP Package

Hallo Christopher,
Gibt es irgendwo ein Tutorial für das Soap Package oder eine Beispiel-Implementierung? Ich tue mich nur mit den Sourcen aus Git etwas schwer.

Viele Grüße
David

Gravatar: David
David
07. Jun 2012
Abo

Hab mein abo ausversehen gekündigt, deshalb nochn Post...

Mein Kommentar

Benachrichtige mich, wenn jemand einen Kommentar zu dieser Nachricht schreibt.

Zurück