Neu in Craft CMS 2.6
Craft CMS 2.6 und Craft Commerce 1.1 wurden gestern veröffentlicht. Das wichtigste neue Feature ist das Eager Loading für Elemente, eine Verbesserung, die den Release allein schon rechtfertigt.
Eager Loading
Wer mit verschachtelten Element-Queries in Craft gearbeitet hat, kennt das Problem: Jedes Mal, wenn in einer Schleife entry.featuredImage aufgerufen wird, führt Craft eine separate Datenbankabfrage aus. Bei 20 Artikeln mit jeweils einem Bild sind das 20 zusätzliche Queries. Bei verschachtelten Beziehungen, zum Beispiel Artikel mit Autor und Avatar, vervielfachen sich diese Datenbankzugriffe schnell auf hunderte pro Seitenaufruf.
Eager Loading löst dieses Problem. Mit dem neuen with-Parameter werden alle verknüpften Elemente in einer einzigen Query vorgeladen:
{% set entries = craft.entries.section('articles').with('featuredImage').find() %}
20 Artikel mit Bildern kosten jetzt einen Extra-Query statt zwanzig. Bei komplexen Datenmodellen macht das den Unterschied zwischen einer schnellen und einer trägen Seite.
Folgende Elemente unterstützen Eager Loading:
- Beziehungen über Einträge, Dateien, Benutzer, Tags und Kategorien
- Matrix-Blöcke
- Bildtransformations-Indizes
Mit withTransform lassen sich außerdem Bildtransformationen im Voraus laden, statt sie bei jedem getUrl()-Aufruf einzeln zu berechnen. Drittanbieter-Plugins können Eager Loading über das neue IEagerLoadingFieldType-Interface anbinden.
Weitere Neuerungen
- Private Asset Sources – Asset-Quellen können jetzt als privat markiert werden, indem die Einstellung „Assets in this source have public URLs" deaktiviert wird. So lassen sich erstmals Dateien hinter einer Zugriffskontrolle verwalten, etwa für Downloads, die nur für registrierte Benutzer zugänglich sein sollen.
- Rich-Text-Felder – Für jedes Feld lässt sich nun festlegen, welche Asset-Quellen und Bildtransformationen Redakteuren im Rich-Text-Editor zur Verfügung stehen.
- Client-Edition – Administratoren können jetzt bestimmen, welche Berechtigungen der Client-Account erhält. Bisher waren diese starr vorgegeben.
- {% case "foo" or "bar" %} – Im Switch-Tag können nun mehrere Werte in einem einzigen Case zusammengefasst werden.
- Standard-Eintragsstatus – Channels und Structures können einen Standard-Status für neue Einträge definieren, was insbesondere für Redaktions-Workflows mit Freigabeprozessen hilfreich ist.
- Neues Dashboard-Widget – „New Users" zeigt eine Übersicht der zuletzt angelegten Benutzerkonten.
Fazit
Craft 2.6 bringt ein Feature mit, das den Release allein schon rechtfertigt: Eager Loading. Wo zuvor hunderte Datenbankabfragen pro Seitenaufruf entstehen konnten, sind es jetzt nur noch wenige. Für Entwickler markiert das den Moment, an dem Craft-Sites auch bei komplexen Datenmodellen performant bleiben, ohne Workarounds, ohne Plugins, einfach durch das Anhängen von .with() an die Query. Der Rest des Releases ergänzt das Gesamtbild, aber Eager Loading ist der Grund, warum 2.6 in Erinnerung bleibt.