STUDIO B12  Büro für digitale Kommunikation  T  0531 28 853 78 0  E  info@studio-b12.de

Textfelder und Schriften in AS3: Der aktuelle Stand zu FlashTextEngine, TextLayoutFramework und TextField

Update: “embedAsCFF” anstelle “cff”

Mit Flashplayer 10 kam auch die neue mächtige FlashTextEngine (FTE), mit der das Erstellen von qualitativ hochwertigen typographischen Elementen möglich geworden ist. Jedoch hat das neue System auch seine Schattenseiten:

Um die neue Engine nutzen zu können, müssen die Schriften mit CFF (ein Teil der neuen DefineFont4 Embedding Engine) eingebettet werden.:

[Embed(source=‘arial.ttf’, fontFamily=‘Arial’, embedAsCFF="true")]

Seit Flex4 (Gumbo) ist der Standardwert für cff true, für Flex3 wird cff nicht automatisch beim Einbetten verwendet.

Die alte TextField-Klasse versteht allerdings weiterhin nur Schriften, die mit DefineFont3 (cff=false) eingebettet wurden. Das heißt, dass man entweder die neue FTE nutzen kann oder das alte TextField, will man beides im Projekt verwenden ist man gezwungen alle Schriften doppelt einzubetten. Generell wäre es kein Problem letztendlich auf FTE umzusteigen, denn es liefert ja  jede Menge Macht über das Aussehen und Verhalten des Textes, die wir als Flashentwickler schon immer haben wollten. Aber mit mehr Macht kommt auch mehr Speicher- und Rechenbedarf, und da Textfelder ein elementarer Bestandteil jeder Applikation sind, ist es auch wichtig auf die Performance eben dieser zu achten. Bei Adobe gab es im Dezember schon einige Diskussionen über diesen Umstand, der bis dato nicht zufriedenstellend gelöst ist.

Also habe ich ein paar Tests geschrieben (Sourcecode am Endes des Artikels), die die benötigte Zeit zur Instanzierung von jeweils 1000 simplen mehrzeiligen Textfeldern mit einer eingebetteten Schriftart messen. Hier die Ergebnisse:

  • TextField: 293ms
  • FlashTextEngine: 893ms
  • TextLayoutFramework (PLAIN_TEXT_FORMAT):  2580ms
  • TextLayoutFramework (TEXT_LAYOUT_FORMAT): 2637ms
  • TLFTextField*: 72ms

* Das TLFTextField ist eine Klasse, die von Adobe erstellt wurde um die API der TextField-Klasse zu kopieren, intern aber die FTE zu nutzen. Leider fehlen dieser Klasse elementare Features wie htmlText, scrolling, editing etc. Für Flex4 hat Adobe auch schon angekündigt, die Klasse nicht weiterentwickeln zu wollen, da andere Sachen wichtiger waren.

Die Messungen schwanken immer etwas und sind auch zum Teil abhängig von der verwendeten Schriftart, dies sind jetzt Durchschnittswerte. Man sieht, dass die FTE für die vergleichsweise einfach Aufgabe schon ungefähr die dreifache Zeit benötigt, die das alte TextField dafür in Anspruch nimmt. Weit abgeschlagen ist (natürlich) das TextLayoutFramework (TLF) mit seinen extrem umfangreichen Funktionen und Erweiterungen, hier hat Adobe ja auch von Anfang an klargestellt dass dieses nur für komplexe typographische Aufgaben bestimmt sein sollte. Doch auch zum FTE hat Adobe folgendes zu sagen:

Sie können mit der Flash Text Engine zwar auch einfache Textelemente erstellen und verwalten, sie wurde jedoch primär als Grundlage für die Entwicklung von Textverarbeitungskomponenten konzipiert.” (Quelle)

Problem dahinter ist und bleibt, dass wir in unseren Applikationen nur selten den Platz haben Schriften doppelt einzubetten. So bleibt einem nur ganz auf FTE umzusteigen (auch mit einfachen TextElementen) und die schlechtere Performance in Kauf zu nehmen oder noch beim alten TextField zu bleiben und auf das neue schicke TextRendering zu verzichten.

Diese Links könnten noch nützlich sein zu dem Thema:
Flex 3/4 Font Embedding: CFF-DefineFont4 vs DefineFont3
Adobe AS3: Verwenden der FlashTextEngine
FlashTextEngine @InsideRIA
Adobe Labs: TextLayoutFramework
Sourcecode zum Performance Vergleich

Bookmark and Share

Kommentare (1)

  1. sehr interssant.
    danke dafür

Dein Kommentar