"Templatesystem" so okay?

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • "Templatesystem" so okay?

    Also ich mache mir schon länger darüber Gedanken, wie ich meinem Portal eine größtmögliche Anpassungsfähigkeit geben kann, ohne das dabei die Geschwindigkeit zu kurtz kommt.

    Damit der Designer maximalen Handlungsspielraum hat, sind immer mindestens die folgenden Dinge nötig:

    -Variablen
    -Schleifen
    -Includes
    -Bedingungen

    Nun könnte man ja auf Eingenen wie Smarty zurrückgreifen allerdings finde ich dies recht Sinnfrei, da die Alternative Schreibweise der oben genannten Befehle in PHP meiner Meinung nach genauso leicht zu erlernen sind die zugehörigen Synonyme in Smarty & Co.

    Deshalb habe ich mir folgendes System erarbeitet:
    Die Templates sind ganz normale PHP Dateien in denen halt noch HTML eingebettet ist.

    Insgesammt ergibt sich dann folgende forgehensweise:

    1.) Während des gesammten Skriptdurchlaufs, wird ein Array mit den Template Variablen zusammen gebaut.

    2.) Am Ende wir dann ob_start() aufgerufen und das zu der jeweiligen Seite gehörige Template includet, anschließend wird dann der Inhalt erstmal mit ob_get_contents() in einen String gespeichert und im Cache gespeichert, dann wird nocheinmal eval auf den String angwendet (um letzt Dynamische Infos wie die Generierungszeit anzuzeigen). Dann verwende ich nochmal ob_start('gz_handlert') und gebe alles aus.

    Jetzt frage ich mich allerdings noch es besser ist zweimal das Template zu includen, oder halt nur einmal und dann nochmal eval().


    Was haltet ihr von dem gesammten System?
    daniel-portal.com/games Free Games and more

  • #2
    Wenn es dem Designer möglich ist auf deine Applikations-Logik Einfluss zu nehmen kannst du auch direkt Templates weglassen, denn der Sinn von Templates ist nicht Trennung von HTML / PHP sondern die Trennung der Applikationslogik von der Präsentationslogik
    Für alle die Fehler suchen, gibts gratis tolle Debuggingmöglichkeiten:
    var_dump(), print_r(), debug_backtrace und echo.
    Außerdem gibt es für unsere Neueinsteiger ein hervorragendes PHP Tutorial zu PHP 4 und PHP 5 (OOP)
    Es heißt $array['index'] und nicht $array[index]! Und nein, das ist nicht egal!
    Dieses Thema lesen, um Ärger im Forum und verzögerte Hilfen zu vermeiden.

    Kommentar


    • #3
      Original geschrieben von Shurakai
      Wenn es dem Designer möglich ist auf deine Applikations-Logik Einfluss zu nehmen kannst du auch direkt Templates weglassen, denn der Sinn von Templates ist nicht Trennung von HTML / PHP sondern die Trennung der Applikationslogik von der Präsentationslogik
      Ich dachte immer das wäre nur zum Trennung von Programm Code und Design. Was genau meinst du denn mit Präsentationslogik?
      daniel-portal.com/games Free Games and more

      Kommentar


      • #4
        Original geschrieben von daniel987
        Ich dachte immer das wäre nur zum Trennung von Programm Code und Design. Was genau meinst du denn mit Präsentationslogik?
        als ich benutze Smarty zur Trennung von PHP-Code und Design und fahre damit auf www.mangacarta.de wunderbar. Es war für mich noch nie so einfach, meinen Code auf Performance zu drillen und das ist momentan noch echt nötig...

        Forenübersicht:
        94 queries, done in 0.540267 seconds
        das ist unglaublich langsam und das sind unglaublich viele Queries (85 SELECTs), da werd ich auf jeden Fall nochmal ran müssen und wenn ich dann noch das gesamte Layout dazwischen kleben hätte, würde ich eher eine Neuprogrammierung starten, als das Alte zu verbessern -.-

        Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

        bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
        Wie man Fragen richtig stellt

        Kommentar


        • #5
          OffTopic:
          @ghostgambler: Ich habe gerade gesehen, daß auf jeder Seite "Skriptausführung: x Sekunden" (x > 0) steht. Ist nicht das erste mal, habs schon öfter gesehen. Frag mich jedesmal wieder, wozu das gut sein soll.

          Kommentar


          • #6
            OffTopic:
            Original geschrieben von onemorenerd
            @ghostgambler: Ich habe gerade gesehen, daß auf jeder Seite "Skriptausführung: x Sekunden" (x > 0) steht. Ist nicht das erste mal, habs schon öfter gesehen. Frag mich jedesmal wieder, wozu das gut sein soll.
            hm? Was meinst du mit x > 0?


            Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

            bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
            Wie man Fragen richtig stellt

            Kommentar


            • #7
              OffTopic:
              na irgend ne Zahl größer Null

              Kommentar


              • #8
                OffTopic:
                Original geschrieben von onemorenerd
                na irgend ne Zahl größer Null
                da steht bei mir nie ne Zahl größer null...sonst würd ich mir bei _den_ Skripts auch echt Sorgen machen


                Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

                bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
                Wie man Fragen richtig stellt

                Kommentar


                • #9
                  OffTopic:
                  0,0000000005 > 0
                  Ich denke, also bin ich. - Einige sind trotzdem...

                  Kommentar


                  • #10
                    Ich glaube wir verstehen uns irgendwie falsch ich benutze doch immernoch Templates nur das ich halt nicht replace sonderne include. Der einzige Unterschied der später zu anderen Templateengines besteht, ist das eine Variable für einen Designer so aussieht:

                    PHP-Code:
                    <?php $dp['portal_title'?>
                    Eventuell könnte man da ja auch noch einen Zwischenconverter Einbauen. Der Die Template Variblen einmalig von {$portal_title} in das oben genannte umwandelt, allerdings finde ich es jetzt auch nicht so schlimm, wenn man da noch so <?php ?> drummschreiben muss. Es würde dann (beim konvertieren) wahrscheinlich auch noch Probleme beim umwandeln von Verschachtelten Schleifen geben.

                    Aber die Performance die man durch solche PHP Templates erreicht ist nach meinen Messungen schneller als jede Template Engine.
                    daniel-portal.com/games Free Games and more

                    Kommentar


                    • #11
                      Original geschrieben von daniel987
                      Aber die Performance die man durch solche PHP Templates erreicht ist nach meinen Messungen schneller als jede Template Engine.
                      Kannst du mir da mal Code schicken?

                      Würde das dann auf http://templatecompare.howtodo.de/ einbauen
                      Ich denke, also bin ich. - Einige sind trotzdem...

                      Kommentar


                      • #12
                        Original geschrieben von mrhappiness
                        Kannst du mir da mal Code schicken?

                        Würde das dann auf http://templatecompare.howtodo.de/ einbauen
                        Werd ich machen allerdings wird das dann wohl noch ein paar Tage dauern, wenn sowas öffentlich sein soll muss ich ja noch kommentare einbauen und es so machen, das es auch als Standalone läuft. Ich melde mich dann aber gern nochmal bei dir.

                        Edit: gibt eine Cache Funktion Pluspunkte?
                        daniel-portal.com/games Free Games and more

                        Kommentar


                        • #13
                          Original geschrieben von daniel987
                          Werd ich machen allerdings wird das dann wohl noch ein paar Tage dauern, wenn sowas öffentlich sein soll muss ich ja noch kommentare einbauen und es so machen, das es auch als Standalone läuft. Ich melde mich dann aber gern nochmal bei dir.
                          wenn's läuft, schauich mir den code nicht wirklich im detail an, dann reicht's, wenn ich weiß, wie ich es nutze

                          standalone wäre aber schon schön, muss es ja irgendwie einbauen, kannst mir aber auch gerne eine vorabversion schicken, bleibt dir überlassen

                          gibt eine Cache Funktion Pluspunkte?
                          kommt drauf an was cache für dich heißt...

                          cache im sinne von zwischenspeichern des bereits einmal generierten effektiven outputs: nein, würde bei zeitmessungen auch verfälschend wirken, schließlich ist der normalfall ja, dass man ein template je request einmal ausgeben lässt und nicht 50-mal völlig identische ausgaben an den browser schickt...

                          cache im sinne von
                          Eventuell könnte man da ja auch noch einen Zwischenconverter Einbauen. Der Die Template Variblen einmalig von {$portal_title} in das oben genannte umwandelt,
                          wenn deine engine das kann: ja

                          pluspunkte gekommst du aber nur in form von evtl. besseren zeiten und einer daraus resultierenden besseren platzierung

                          ich freu mich schon auf deine engine
                          Ich denke, also bin ich. - Einige sind trotzdem...

                          Kommentar


                          • #14
                            Nun ja ein Cache kann meiner Meinung nach schon sehr Sinnvoll sein, du kannst selber die Cache Gruppen mitgeben (wie bei Smarty), da angeblich fast 90% der User eine Seite sowieso nur lesend betrachten, lohnt sich sowas bei vielen Hits schon. Außerdem hast du immer noch die Möglichkeit in den Templates letzte Dynamische Variablen einzubringen, z.B Seitengenerierungszeit & Queries. Und dank einer is_cached Funktion kann man da schon einiges an Ressourcen sparen.
                            daniel-portal.com/games Free Games and more

                            Kommentar


                            • #15
                              Das ist ja was anderes, und wenn du das eingebaut hast/einbauen willst, bin ich der letzte, der da was dagegen hat

                              Was ich verhindern will ist:
                              PHP-Code:
                              zeitmessung_start();
                              $tpl = new $zu_benchmarkende_engine();
                              for (
                              $i 0$i 50$i++)
                                
                              $tpl->fetch('bench.tpl');
                              zeitmessung_ende(); 
                              , wenn die fetch-methode so aussieht
                              PHP-Code:
                              function fetch($templatefile) {
                                if (isset(
                              $this->output[$templatefile]))
                                  
                              $this->output[$templatefile] = $this->parse($templatefile);
                                return 
                              $this->output[$templatefile];

                              Denn dadurch würden die Ergebnisse verfälscht werden und außerdem halte ich das für doch recht realitätsfern...

                              Wenn deine Cache-Funktion mit folgendem Konstrukt zurechtkommt (genauso Pseudocode wie das oben), wird sie auch genutzt
                              PHP-Code:
                              zeitmessung_start();
                              for (
                              $i 0$i 50$i++) {
                                
                              $tpl = new $zu_benchmarkende_engine();
                                
                              $tpl->fetch('bench.tpl');
                              }
                              zeitmessung_ende(); 
                              (Natürlich könnte deine fetch-Methode auch so aussiehen wie oben, nur bringen würde es dir nichts )

                              Ich würde mir dann sogar ggf. überlegen, einen entsprechenden Benchmark zu entwickeln, da das ja momentan noch nicht von den schon vorhandenen Benchmarks abgedeckt ist.

                              Aber bring du deine Engine erstmal auf einen Stand, in dem man sie "einfach" benutzen kann, schick sie mir, am besten noch mit einem kleinen Beispieltemplate für der Engine alle möglichen Fälle (welche das sind, siehst du ja auf der Homepage) und die Cache-geschihcte kannst du ja in einer späteren Version nachreichen
                              Ich denke, also bin ich. - Einige sind trotzdem...

                              Kommentar

                              Lädt...
                              X