Freitag, 11. September 2015

Cmsmadesimple und Smarty

Cmsms verwendet von Anfang an die Templateengine Smarty.
Aber sie verwenden es konzeptionell nicht optimal.

Daher setzt Cmsms seit einiger Zeit eine gehackte Smarty-Version ein und hat jetzt mit Cmsms 2 das Problem mit den Entwicklungen von Smarty nicht mit halten zu können.

Darüber hinaus hat Cmsms offenbar noch nie Experimente mit Smarty gemacht.

Die damalige Powercms Version basierte auf Cmsmadesimple, jedoch habe ich alle die Dinge in die Tonne getreten, welche - was Leistung betraf - hinderlich waren.

Aus dem Archiv habe ich mal einen kleinen Test von damals heraus gewühlt der mir seiner Zeit ein Aha Erlebnis verpasste und der auch heute in der aktuellen Smartyversion so funktioniert.

Damals verwendete ich 3 Miniscripte - t1,t2,t3.

t1
----

PHP t1.php

<?php

include_once('smarty/libs/Smarty.class.php');

$smarty = new Smarty();
$smarty->assign('content',file_get_contents('smarty/libs/Smarty.class.php'));
$smarty->display('t1.tpl');

Template t1.tpl
{$content}

t2
---
PHP t2.php


<?php

include_once('smarty/libs/Smarty.class.php');

$smarty = new Smarty();
$smarty->display('t2.tpl');

Template t2.tpl

{t2}
{$content}

Das Plugin t2

<?php

function smarty_function_t2($params, $template)
{
 $template->assign('content',file_get_contents('smarty/libs/Smarty.class.php'));
    
}

t3

t3.php

<?php

include_once('smarty/libs/Smarty.class.php');

$smarty = new Smarty();
$smarty->display('t3.tpl');

Template t3.tpl

{t3}

Plugin t3

<?php

function smarty_function_t3($params, $template)
{
 echo file_get_contents('smarty/libs/Smarty.class.php');
 
}


Was mich damals interessierte war die Frage wo Smarty am optimalsten ist.
1. Man weist im PHP Script die Variablen dem Smarty zu und gibt sie dann mit dem Template aus
2.Man weist im Template über ein Plugin die Variablen dem Smarty zu und gibt sie dann mit dem Template aus
3. Man gibt die Inhalte über ein Plugin im Template direkt aus.

Die Ergebnisse damals haben mich überrascht.
Und - sie sind heute noch gültig.

Gemessen mit dem Apache Benchmark ab -kc 100 -t 30 

Vorweg gesagt - die optimalste Variante ist t2 - sie bietet unter Last die besten Ergebnisse.

t1


Percentage of the requests served within a certain time (ms)
  50%    144
  66%    159
  75%    176
  80%    188
  90%    230
  95%    293
  98%    373
  99%    419
 100%    757 (longest request)

t2


Percentage of the requests served within a certain time (ms)
  50%    144
  66%    159
  75%    174
  80%    185
  90%    218
  95%    267
  98%    326
  99%    364
 100%    603 (longest request)

t3

Percentage of the requests served within a certain time (ms)
  50%    143
  66%    160
  75%    176
  80%    189
  90%    230
  95%    289
  98%    358
  99%    402
 100%    623 (longest request)
Die Variante t1 - also via PHP treu alle Inhalte holen, an Smarty zuweisen um dann alles via Template auszugeben ist die allerschlechteste Wahl.

Solche Test's habe ich damals laufend gemacht und die damalige Powercms Version war um einiges schneller als Cmsms.

Die Cmsms Entwickler haben so etwas noch nie gemacht und mit ihrem eigenen Hack die schlechteren t1 Ergebnisse sogar noch verschlechtert.
Das Cmsms nicht zum "Stillstand" gekommen ist verdankt man Verbesserungen an anderer Stelle.

Hier in dem kleinen Test geht es nur um eine einzige Variable - noch größer sind die Abstände wenn es - wie bei einem CMS üblich ist - um viel mehr geht.


1 Kommentar:

  1. Man sollte sich immer vor Augen halten - das hier ist ein Test mit minimalsten Anforderungen an Smarty. Es geht nur darum eine einzige Variable zu füllen und darzustellen und das ist im Vergleich zu einem CMS rein nichts.
    Nun kann man sich lebhaft vorstellen wie dieses Spiel aussehen wird wenn man einen realistischen Betrieb herbeiführt.
    Man nehme dazu Cmsms und den Apache Benchmark und schon hat man das Ergebnis.

    AntwortenLöschen