Die Performance-Lüge (warum smarty doof ist #2)


Smarty „kompiliert“ seine Templates, was auf smarty.net folgendermaßen beschrieben wird:

„Einer der einzigartigen Aspekte von Smarty ist die Kompilierung der Templates. Smarty liest die Template-Dateien und generiert daraus neue PHP-Skripte; von da an werden nur noch diese Skripte verwendet. Deshalb müssen Templates nicht für jeden Seitenaufruf performance-intensiv neu geparst werden und jedes Template kann voll von PHP Compiler-Cache Lösungen profitieren.“

Wow, klingt super. Das Parsen ist auch tatsächlich ziemlich rechenintensiv. Jeder Smarty-User wird bestätigen, dass man sofort merkt wie langsam die Site wird wenn man force_compile anstellt und wie schnell es wieder geht wenn man es deaktiviert. Tolle Sache also? Weit gefehlt! Mit dem „Kompilieren“ spart Smarty höchstens die Resourcen die man ohne Smarty gar nicht erst verbraucht hätte. Das Kompilieren ist nämlich letzendlich nicht viel mehr als aus Templates in Smarty-Syntax Templates in PHP-Syntax zu bauen. Aus {$foo.bar} wird <?php echo $this->_tpl_vars[‚foo‘][‚bar‘]; ?>, aus {include file=“x.tpl“} wird <?php $this->_smarty_include(„x.tpl“); ?>, aus {if true}x{/if} wird <?php if (true): ?>x<?php endif; ?> und so weiter und so fort… Das so in PHP übersetzte Template wird dann ins Dateisystem geschrieben (wobei der spürbare Geschwindigkeitsunterschied bei force_compile=true eher durch die hohe I/O-Last als die CPU-Zeit beim Parsen verursacht werden dürfte) und erst dann von PHP verarbeitet. Das Ganze kann also von Natur aus nie performanter sein als gleich native PHP-Templates zu verwenden.

Um das ganze mit einem schlechten Autovergleich zu veranschaulichen: Man baut mit einer Autofabrik erst eine Autofabrik um in dieser dann Autos herzustellen und freut sich dass man nicht für jedes Auto (solange es die gleiche Farbe hat wie das vorherige) wieder erst eine neue Autofabrik in der ersten Autofabrik herstellen muss.

Advertisements

Ein Gedanke zu “Die Performance-Lüge (warum smarty doof ist #2)

  1. Hm ja, das ist ja klar. Die Idee hinter Template-Engines ist doch, dass der Designer eine einfachere Syntax hat mit der er arbeiten kann und keine weitreichende Programmiererfahrung benötigt 😛

    Aber was an den gecachten Dingern jetzt so einzigartig sein soll verstehe ich nicht ganz. Das hat sogar meine eigene kleine Template-Engine.

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s