Thumbnails
Vorschaubilder in Brandbox werden anhand der zugrunde liegenden Quelldateien über die Delegates erstellt und an den Client ausgeliefert. Um diese Vorschaubilder nicht bei jeder Anfrage erneut generieren zu müssen, können diese Bilder gespeichert werden.
Eine Datei kann somit mehrere Thumbnails besitzen. Die Thumbnail-Datensätze enthalten Informationen, welche die Vorschau auszeichnen, wie z.B. Breite und Höhe. Die tatsächlichen Binärdaten der Vorschaubilder werden auf dem Dateisystem gespeichert (temp/cache/framework/thumbnail/...).
Diese Art der Persistierung ist in der Theorie flexibel. Es wäre ebenfalls möglich die Binärdaten auf dem Dateisystem des Servers abzulegen.
Durch den Einsatz von SQL Foreign Keys werden Thumbnails bzw. ThumbnailBinaries automatisch gelöscht, sofern die Quelldatei bzw. das Thumbnail gelöscht werden.
Generierung
Thumbnails werden in der Regel über eine zentrale Methode generiert: \Brandbox\Framework\Base\File\Manager::getThumbnailByFile
Diese Methode erwartet einen mamFile-Datensatz, ein Array an Optionen, welches von den Delegates berücksichtigt wird und (optional) ein Konfigurationsobjekt für die Steuerung der Thumbnail Generierung.
Die Thumbnail Generierung wird maßgeblich über zwei Events beeinflusst:
\Brandbox\Framework\Base\File\lib\event\OnFetchThumbnailFile
Dieses Event erlaubt es dem Nutzer die zu generierende Datei auszutauschen.
Diese Funktion wir beispielsweise dafür genutzt, um RAW-Dateien gegen ihre extrahierten und kleineren JPG-Stellvertreter auszutauschen, um die Performance beim Erstellen von Thumbnails zu verbessern.
\Brandbox\Framework\Base\File\lib\event\OnFetchThumbnail
Dieses Event erlaubt es dem Nutzer ein Thumbnail-Objekt bereitzustellen, welches von
getThumbnailByFile
an die aufrufende Stelle zurückgegeben wird.Diese Funktion wird beispielsweise genutzt, um tatsächlich eine Vorschau einer Datei zu genrieren, oder um ein Platzhalter Thumbnail bereitzustellen, falls sich die Konfiguration des zu generierenden Thumbnails in der Warteschlange befindet.
Konfiguration
Die Thumbnails selbst verfügen über keine Konfiguration. Es ist jedoch möglich Dateien (Bilder) festzulegen, welche in folgenden Fällen dargestellt werden:
Eine Vorschau kann nicht generiert werden.
Eine Vorschau wird nicht generiert, da sich zu dieser Konfiguration bereits ein Eintrag in der Warteschlange befindet.
Diese Einstellungen können in der Tabelle "ConfigBaseFile" vorgenommen werden. Sie befindet sich im abgesichterten Adminsitrations-Bereich.
Klicken Sie im Kopfbereich der Brandbox auf das Timer-Symbol
Authentifizieren Sie sich ggf.
Klicken Sie auf den Eintrag "Allgemeine Konfiguration" in der Kachel "Dateien"
Hier können Sie die Dateien im Konfigurationsdatensatz festlegen
Besonderheiten
Kann eine Vorschau nicht generiert werden, so wird ein Datensatz über einen booleschen Wert markiert, sodass bei der nächsten Anfrage ohne erneuten Versuch das Fallback Thumnbail bereitgestellt wird. Dieser Wert kann in der Bearbeiten-Ansicht des Datensatzes gesetzt werden.
Generierung als Hintergrundprozess
Dateien, die über den herkömmlichen Upload in die Brandbox eingebunden werden, erhalten Einträge in der Tabelle ThumbnailQueue. In dieser Tabelle Einträge abgelegt, die stets eine Datei referenzieren. Darüber hinaus enthält jeder Datensatz diverse Optionen, mit denen ein Thumbnail generiert werden soll. Diese Tabelle wird von einem CronJob auf zu generierende Thumbnails geprüft. Durch diesen CronJob werden die Thumbnails passiv im Laufe der Zeit generiert. Diese Vorgehensweise sorgt dafür, dass der Upload sich tatsächlich hauptsächlich mit dem Upload der Datei kümmert. Teilaufgaben wie das Ermitteln von Metadaten, das Generieren von Vorschaubildern etc. soll in separaten Prozessen abgearbeitet werden, damit die Vorgänge performant bleiben.
Befüllen der Warteschlange
Die Warteschlange wird durch ein Event befüllt, welches durch die Methode \Brandbox\Framework\Base\File\Manager::populateThumbnailQueue
ausgelöst werden kann. Dabei handelt es sich um das Event \Brandbox\Framework\Base\File\lib\event\OnPopulateThumbnailQueue
. Diese Methode wird bei einem erfolgreichen Upload ausgelöst, sodass die Listener die Warteschlange mit entsprechenden Optionen befüllen können. Das Framework nutzt dieses Event um die Thumbnailkonfigurationen für die Listenansicht- und Kartenansicht in Base in der Warteschlange zu ergänzen. Um die Warteschlange mit Einträgen von Dateien zu füllen, die noch keine Thumbnails oder Einträge in der Warteschlange besitzen, kann die Methode \Brandbox\Framework\Base\File\Manager::queueFilesWithoutThumbnails
genutzt werden.
Öffentliche Thumbnails über URLs
Die bisher beschriebene Logik generiert Thumbnails und liefert diese üblicherweise Base64-kodiert an den Browser aus. Das bringt mit sich, dass Thumbnails üblicherweise nicht direkt über einen Link aufrufbar sind, aber dafür ist der initiale Seitenaufbau abhängig von diesen Thumbnails. Bei vielen oder großen Thumbnails wird die Dauer bis zum vollständigen Seitenaufbau entsprechend erhöht. Das wiederum kann schlechte Auswirkungen auf diverse Ratings zu Webseiten haben. Um dieses Verhalten zu vermeiden, gibt es die Möglichkeit Thumbnails in einem öffentlich zugänglichen Bereich abzulegen und somit die Ladezeiten zu verkürzen. Die Pfade zu den Thumbnails werden in den src
-Parametern der image
-Elemente hinterlegt. Der Browser baut die Seite somit unabhängig der Bilder auf. Die Bilder werden separat bezogen.
Konfiguration
Diese öffentlichen Thumbnails können genutzt werden, indem man die Checkbox "Öffentlich freigeben
" bei den gewünschten Dateien (mamFile) auswählt. Werden nun Thumbnails einer solchen Datei abgefragt, werden sie zunächst in einem öffentlichen Verzeichnis abgelegt und der Pfad zu dieser Datei wird an den Browser übermittelt. Diese Thumbnails liegen in dem Verzeichnis "temp/public/framework/images/
". Je nach Datei werden gehashte Unterverzeichnisse erstellt. Wird die Checkbox bei einer Datei wieder abgewählt, werden die Dateien automatisch gelöscht. Darüberhinaus werden die öffentlichen Thumbnails einer Datei auch gelöscht, wenn die Datei selbst gelöscht wird.