[PHP] Ausgabe mit Klasse hat längere Parsezeit als mit echo

Renegade

Well-known member
ID: 159167
L
3 August 2006
851
77
Hi,

Ich habe mir eine kleine Klasse geschrieben (nur Grundgerüst) indem eine Datei ausgelesen wird, und ggf. bearbeitet wird. Die Klasse benutze ich in Scripten, damit man das Design hinterher leichter ändern kann.

PHP:
<?php

  class template {
    private $_content = '';

    function tpl($file) { // Datei wird eingelesen
      $handle = fopen($file, 'r');
      while(!feof($handle)) {
        $this->_content.= fgets($handle, 4096);
      }
      fclose($handle);
    }

    // ...

    function out() {  // und hier ausgegeben
      echo $this->_content;
      $this->_content = '';
    }
  }

?>

Ein Beispiel zur Verwendung:

PHP:
<?php

  require('source/tpl_class.php');
  $tpl = new template();
  $tpl->tpl('head.tpl');
  $tpl->tpl('content.tpl');
  $tpl->tpl('foot.tpl');
  $tpl->out();

?>

Jetzt habe ich den Inhalt von head.tpl, content.tpl und foot.tpl (worin eine einfache HTML Tabelle ist) kopiert und mit einem echo ausgeben. Zum Beispiel so:

PHP:
<?php
  echo '<table>';
  // ...
?>

Siehe da, mit den echos ging das ganze viel schneller (anhand der Parsezeit). Mir ist klar, dass sich der Unterschied nur in Millisekunden abspielt, aber ich denke, wenn ich komplexe Seiten mit vielen Templates und Schleifen habe, wird der Unterschied doch schon was ausmachen.

Habt ihr eine Idee, wie ich die Klasse besser machen kann/Könnt ihr mir Denkanstöße geben?

Danke :)
 
Und später dann noch Variablen und so da mit parsen? Lass es.
Da hatte ich schonmal nen schönen Thread zu und da wurde mir auch davon abgeraten. Ich such den gleich mal.
Nimm lieber Smarty oder etwas ähnliches, weil da der Code gecached wird und somit den Server deutlich weniger belastet.
 
Hi,

Ok, wenn du meinst Smarty wäre besser, vertraue ich dir da blind :ugly:
Werde mich dann mal wohl da einarbeiten. Wäre noch nett wenn du mir den Thread raussuchen könntest :)
 
Naja, Smarty ist auch nicht das Gelbe vom Ei, was das Zeitverhalten angeht.

Da ist das beinahe Drop-In-Replacement "TemplateLite" schon um einiges effizienter, aber bildet leider noch nicht alle Funktionen von Smarty ab.

Zum eigentlichen Problem:

file_get_contents() dürfte schon um einiges schneller sein als das sequentielle Einlesen der Datei, so wie Du's grade machst...
 
Danke flaschenkind.

tleilax, ich habe es nun mit file_get_contents gemacht und ich muss sagen, es ist wirklich schneller :) Danke dir. Also wenn ich mehr auf Geschwindigkeit achte, sollte ich lieber TemplateLite benutzen? Gut dann werde ich mir das auch angucken, ich habe ja Ferien :ugly:
 
Ich weiß gleich wird mich tleilax hauen^^
auch wenn Smarty vllt nicht ganz so schnell wie TemplateLite ist hat es eine weit größere Verbreitung, und wenn du Software mit Smarty auslieferst, kannst du dir fast sicher sein, dass ein anderer Programmierer auch Smarty kent oder das ganz schnell nachschlagen, aber von TemplateLite hatte ich bis eben nie etwas gehört.
 
Ich glaube das ist kein Problem. Schließlich ist die Software in erster Linie für mich bestimmt ;) Und so ein großer Unterschied ist das von der Syntax her auch nicht :)
 
Ich habe gerade ein test gemacht. Ich habe das ganze Script nun mit TemplateLite gemacht, dadurch wurden auch einige Dateien überschlüsig die ich löschen konnte. Trotzdem ist die Parsezeit um ca. 5 Millisekunden gestiegen. Das finde ich schon recht komisch.
Ich habe nur als Befehl {include file= ... } benutz und im PHP Teil assign und display.

Liegt das vllt. an meiner komplizierten Ordnerstruktur?
 

Uuui hallo Ice :dance:

Ich und ice hatten eine ähnliche Diskussion (mein minimalistisches Templatesystem vs. Smarty) schon einmal.

Das Ergebnis: Ice hat mich überzeugt bei Smarty zu bleiben - der Geschwindigkeitsunterschied war sehr gering (wenn das vom USB-Stick als repräsentatives Benchmark angesehen werden kann ^^) und das sind mir die paar Funktionen mehr von Smarty dann doch wert.

Man könnte sich jetzt ja auf jemanden beziehen, dem "Performance" weit wichtiger als schöner Code ist :ugly:
 
Johnson, natürlich ist mir sauberer Code wichtig, jedoch finde ich, dass wenn man ein etwas größeren Seitenaufbau hat, die Seite auch zügig laden sollte. Und so viele Extras wie Smarty bietet brauch ich garnicht :ugly: Man man man, jetzt habe ich aber eine Diskussion losgetreten :mrgreen:
 
Johnson hat auf einen Insider-Spaß mit seiner weißen Schrift angespielt^^

Neia ob die Seite nun 5ms schneller oder langsamer ist, spielt doch kein Unterschied, also ich bin nicht in der Lage einen Unterschied festzustellen und ich denke auch sonst hier niemand. Auch wenn Smarty teilweise überladen mit Funktionen ist das doch prima, ich sollte für einen Kunden ein System umsetzen und habe dafür, wie immer, Smarty genommen, später meinte der Kunde dann, die News werden zb selten aktualisiert und das und das, das könnte ich doch bitte cachen, dann hat der Server mehr Ruhe (dies ist eine Anwendung peak-lastige Seite), dachte ich mir schön und gut, nun bringt es doch was, dass ich smarty genommen habe, denn cachen kann es ja von Haus aus, also caching für einige Seiten rein und fertig, keine Mehrarbeit für mich, da Smarty es ja schon konnte.
 
Ah ok ^^

Das mit den 5ms hört sich natärlich sehr sehr wenig an und ist für uns nicht relevant, denn wir können kaum die 5ms bemerken. Jedoch ist die gemessene Zeit mit relativ wenig Code entstanden, und ich habe nun die Befürchtung, dass wenn dort viel Content hinzukommt, vorallem mit vielen DB-Abfragen, dass dann die Spannweite von 5ms sich deutlich erhöht. Ich werde auch mal Smarty testen und meine Ergebnisse euch mitteilen :mrgreen:
 
neija ich habe mal folgendes gerade von meinem xampp kopiert wo gerade ein größeres projekt entsteht:
footer schrieb:
0.0204s Ausführungszeit, 6 Datenbankanfragen (0.0035s)
Und viel schneller kann das auch ohne Smarty nicht werden.
 
Ich weiß gleich wird mich tleilax hauen^^
Nene, keine Angst. Für konstruktive Diskussionen bin ich immer zu haben.

Ich stand TemplateLite auch erst skeptisch gegenüber, aber als ich mir das Ganze dann mal angeguckt und gesehen habe, dass die Syntax zu etwa 95% übereinstimmt und halt dran gearbeitet wird, dass die Syntax sich eigentlich decken soll, habe ich mich doch eines anderen belehren lassen.

Im Endeffekt ist es mir ja auch wurscht, was jeder einzelne benutzt, aber da hier scheinbar grad auf die Geschwindigkeit wert gelegt wurde, dachte ich mir, dass die Erwähnung von TemplateLite vielleicht doch lohnenswert wäre.
 
Das Ergebnis: Ice hat mich überzeugt bei Smarty zu bleiben - der Geschwindigkeitsunterschied war sehr gering (wenn das vom USB-Stick als repräsentatives Benchmark angesehen werden kann ^^) [...]
Hattet ihr damals die Caching-Funktion von Smarty aus oder an ?
 
Hi,

Ich habe jetzt alle drei Versionen (meine Template Klasse, Template Lite und Smarty) mit den gleichen Templates gefüllt und je 5x Zeiten gemessen.
Hier das Ergebnis:

Meine Template Klasse:
1,907
1,863
1,896
1,969
1,853
Durchschnitt: 1,8976 ms
###

Template Lite:
18,263
13,557
16,184
13,166
14,052
Durchschnitt: 15,0444 ms
###

Smarty (mit caching):
11,767
11,738
12,497
12,689
12,021
Durchschnitt: 12,1424 ms
###

Jetzt bin ich mir nicht sicher, was ich verwenden soll. Zwar ist die erte Version deutlich schneller aber Smarty bietet viele extras die ich vllt. gebrauchen kann, vllt. auch nicht :ugly:
 
Wenn Du Dir nicht sicher bist dann bau mal ein umfangreiches Tpl auf und jag das mal durch. Mach mal ne foreach Schleife usw. dann siehst Du erst was Du wirklich nutzen solltest. Einfach einen Text im Tpl ausgeben zeigt Dir ja nicht wirklich was Smarty usw. kann. Ich könnte sogar wetten das Die Zeit sich dann net sonderlich ändert außer bei Deinem.
 
[...] aber Smarty bietet viele extras die ich vllt. gebrauchen kann, vllt. auch nicht :ugly:
Wie sieht das mit Smarty und seinen Plugins überhaupt aus ? - Ich muss zugeben, ich habs ja selber noch nie benutzt :shifty: - Wenn ich den Plugin-Ordner leerlösche, läuft es dann auch noch, bzw. läuft sogar schneller ?