Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Smarty: Ist Caching sinnvoll?

Einklappen

Neue Werbung 2019

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

  • [Erledigt] Smarty: Ist Caching sinnvoll?

    Hi!

    Klar, die Frage sollte sich selbst erklären: Meistens sollte Caching ja sinnvoll sein.
    Doch bei meinen mometanen Script (ein Teil eines Browsergames) ist ein
    aktiviertes Caching in Smarty langsamer als ein deaktiviertes.

    Aktiviert: ~20-25ms Deaktiviert: ~10-14ms
    (AMD Athlon-Mobile 1200 Mhz, 256 MB Ram, WinXP Home)

    Ich frage mich nur wieso?

    Ich habe genau mit dem Zend-Debugger nachgeschaut: Er
    umgeht durch das Cacheing ungefähr 30 MySQL-Abfragen (ist eine recht
    komplexe Seite) und dazu noch ca. 200-300 Zeilen Code (so viel weil eine
    Schleife mit jeweils 2 aufgerufenen Funktionen) - dazu kommen noch die
    Zeilen für die MySQL Klasse...

    Ich kann es mir nicht erklären, und ich bin 100% sicher, dass er wirklich
    die Cachedatei im Cachemodus lädt!

    Hat jemand ein ähnliches Phänomen?
    Wäre für Rückmeldungen oder Erklärungen dankbar!

    Thomas

    PS: Oder kann es einfach sein, dass die Cache-funtktion von Smarty derart komplex ist, dass es einfach zu langsam ist?

  • #2
    einige Codezeilen:

    die Stelle, wo der Content generiert wird:
    PHP-Code:
    <?php
            
    if ($smarty->is_cached('con_baumenu.tpl'$_SESSION['userid']."|".$_SESSION['x'].":".$_SESSION['y']) == false){
                
    $db->query("SELECT id,title,beschreibung_short,holz,eisen,nahrung,menschen,dauer,img,bezeichnung,crewls FROM crewl_data_gebaude");
                
    $a 0;
                while (
    $db->fetchRowWhile()){
                    
    $a++;
                    
    $row $db->row;
                
                    if (
    gebaude_allowed($row['id']) == true){;
                        
    // Daten übernehmen
                        
    $data[$a] = $row;
                    
                        
    // Dauer ausrechnen und formatieren
                        
    $dauer_format format_time(calc_dauer($row['id'],$row['bezeichnung'],$row['dauer']));
                        
    $data[$a]['dauer'] = $dauer_format;
                    
                        
    // Rohstoffewerte formatieren
                        
    $data[$a]['eisen'] = number_format($data[$a]['eisen'],0,".",".");
                        
    $data[$a]['holz'] = number_format($data[$a]['holz'],0,".",".");
                        
    $data[$a]['nahrung'] = number_format($data[$a]['nahrung'],0,".",".");
                        
    $data[$a]['menschen'] = number_format($data[$a]['menschen'],0,".",".");
                        
    $data[$a]['crewls'] = number_format($data[$a]['crewls'],0,".",".");
                        
                        
    // Anzahl bestehender Gebäude
                        
    $anz check_gebaude($row['id']);
                        if (
    $anz and $row['id'] != and $row['id'] != 2){
                            
    $data[$a]['title'] .= " (".$anz.")";
                        }
                    }
                }
                
    $smarty->assign('data'$data);
            }
            
            
    $tplfile = array('con_working.tpl' => '''con_baumenu.tpl' =>  $_SESSION['userid']."|".$_SESSION['x'].":".$_SESSION['y']);?>
    Hier wird das file geladen:

    PHP-Code:
    <?php
            
    ### Content ###
            
    foreach ($tplfile as $key => $value){
                if (
    $value){
                    if (
    $value == 'cache'){
                        echo 
    "load cache";
                        
    $smarty->cache_lifetime 3600;
                        
    $smarty->display($key);
                    }else{
                        echo 
    "load cache";
                        
    $smarty->cache_lifetime 3600;
                        
    $smarty->display($key$value);
                    }
                }else{
                    echo 
    "load no cache";
                    
    $smarty->cache_lifetime 0;
                    
    $smarty->display($key);
                }
            }
    ?>
    Warum ist der Teil so komplex? ... Ganz einfach, weil ich unterscheiden
    muss, ob ich mehrere templatedateien hintereinander ausgeben will und
    ob wenn es nur eins ist, dies gecached werden soll oder nicht, genauso
    bei mehreren. Hinzu kommt, ob ich eine cacheid mit dazuhaben will.

    ... ich merk grad, das ich den zweiten teil eigentlich garnicht brau, wenn ich immer gleich in nem array mache .... doof doof doof *autsch* ... naja okay

    Kommentar


    • #3
      Re: Smarty: Ist Caching sinnvoll?

      Zitat von TTornado
      Aktiviert: ~20-25ms Deaktiviert: ~10-14ms
      (AMD Athlon-Mobile 1200 Mhz, 256 MB Ram, WinXP Home)

      [..] Er
      umgeht durch das Cacheing ungefähr 30 MySQL-Abfragen (ist eine recht
      komplexe Seite) und dazu noch ca. 200-300 Zeilen Code
      Das kann ich mir beim besten willen nicht vorstellen...

      Kommentar


      • #4
        hmm okay ... was mir noch aufgefallen ist: Der erste Aufruf bei Cache dauer ja logischweise länger. Bei Caching=false, gibt es diesen einen längeren Aufruf auch. Hat das vielleicht mi der Compile-Version zutun ... ich hab wegen echt keine ahnung, an was da noch liegen könnte ...

        Kommentar


        • #5
          läuft noch iene php-seitige cache-engine ?
          [URL="http://www.robo47.net"]robo47.net[/URL] - Blog, Codeschnipsel und mehr
          | :arrow: [URL="http://www.robo47.net/blog/192-Caching-Libraries-and-Opcode-Caches-in-php-An-Overview"]Caching-Klassen und Opcode Caches in php[/URL] | :arrow: [URL="http://www.robo47.net/components"]Robo47 Components - PHP Library extending Zend Framework[/URL]

          Kommentar


          • #6
            Hm sorry, die Frage versteh ich ned

            Meinst du, ob die Cacheengine von Smarty in PHP ist? ... öhm joa, also ich habe keine extensions oder so in die phpini eingetragen, falls du das meinst ...

            Kommentar


            • #7
              ich dachte an
              eAccelerator
              den zend-cache oder so,
              mit php-seitig meine ich als modul von php um PHP-Code in form von bytecode zu cachen

              sprich dass auch hier beim ersten aufruf eines scripts erst ein "cache" des scripts erstellt wird


              mfg
              robo47
              [URL="http://www.robo47.net"]robo47.net[/URL] - Blog, Codeschnipsel und mehr
              | :arrow: [URL="http://www.robo47.net/blog/192-Caching-Libraries-and-Opcode-Caches-in-php-An-Overview"]Caching-Klassen und Opcode Caches in php[/URL] | :arrow: [URL="http://www.robo47.net/components"]Robo47 Components - PHP Library extending Zend Framework[/URL]

              Kommentar


              • #8
                Achso nein - jetzt weiß ich, was du meinst - sowas läuft nicht.


                (Hab es gerade nochmal getestet - mit cache definitif ~10 ms langsamer)

                *edit*

                Ich probier das ganze jetzt mal nicht auf nen local server, sondern auf nen richtigen webserver ... mal gucken, ob es da genauso ist ...

                Kommentar


                • #9
                  ... so ... hat zwar ne Weile gedauert, aber folgendes Ergebnis:

                  Mit Cache und ohne Cache ist genau gleich schnell! (~7.5 ms)
                  Bei beiden ist der Erstaufruf 20ms.

                  Also irgendwas muss auch bei deaktivierten Caching gecached werden, denn auch hier gibt es einen Erstaufruf, der länger dauert. Ich kann mir nur nicht erklären, wass es sein soll, denn auf dem server läuft 100% garnichts!

                  ... ich bin mit meinem latein schon lange am ende

                  Kommentar


                  • #10
                    ach mist ich hab hier überall bei den milisekunden eine 0 vergessen ...

                    jetzt weiß ich auch, was zergling gemeint hat ... sry bin halt zu blöd zum umrechnen

                    Kommentar


                    • #11
                      vielleicht schon mal dran gedacht das die initialisierung und das preladen von php bereits einige millisekunden beschlag zieht??

                      Kommentar

                      Lädt...
                      X