Rendertime messen..Probleme

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

  • Rendertime messen..Probleme

    Hey Leute,

    das Problem ist schnell erklärt, ich will die Rendertime für eine Seite messen. Dazu gehe ich wie folgt vor:

    PHP-Code:
    <?php

    $start
    =microtime(true);

    // hier der Inhalt

    $stop=microtime(true);

    echo 
    round($stop-$start,3)

    ?>
    Das funktioniert auch ganz gut. Jetzt wollte ich das in eine Funktion packen:

    PHP-Code:
    <?php 

    function rendertime($command)
    {
      switch (
    $command
      {
      case 
    start:
      
    $start=microtime(true); 
      break;
      case 
    stop:
      
    $stop=microtime(true);
      break;
      case 
    result:
      return 
    $render_time=round($stop-$start,3);
      break;
      }

       
    ?>

    Und auf der Seite selbst mittels

    PHP-Code:
    <?php
    rendertime
    ("start");  

    //Seite laden

    rendertime("stop");  

    echo 
    rendertime("result");  

    ?>
    ausgeben.

    Ich dachte, das wäre exakt das selbe. Nur bei der ersten Variante zeigt er mir eine Kommazahl wie es sein sollte, bei der zweiten hingegen immer 0, egal wielange die Seite lädt.

    Wo steckt der Fehler? Kann es sein dass die microtime in der Funktion "gecacht" wird und somit 2 mal dieselbe verwendet wird?
    Müsste ja dann irgendwie ne Lösung geben :9

    Danke schonmal, mfg

  • #2
    Du mußt start und stop irgendwo zwischenlagern, sonst gehen die Werte am Ende der Funktionsaufrufe verloren.
    z.B. so:
    PHP-Code:
    function rendertime($command)
    {
      static 
    $start;
      static 
    $stop;
      switch (
    $command
      {
      case 
    start:
      
    $start=microtime(true); 
      break;
      case 
    stop:
      
    $stop=microtime(true);
      break;
      case 
    result:
      return 
    $render_time=round($stop-$start,3);
      break;
      }

    Oder schöner: Eine Klasse dafür entwerfen.
    Wir werden alle sterben

    Kommentar


    • #3
      Was genau willst du messen?

      Kommentar


      • #4
        Danke Combie, das ist die Lösung..war neu für mich, fange erst gerade an alles Mögliche in funktionen zu packen.

        onemorenerd: Die Zeit, die benötigt wird um ein Script auszuführen, bzw. in dem Fall die Page (ja ich weiß dass es sich hierbei nur um die Ausführungsdauer des PHP-Scripts handelt und nicht um den gesamten Seitenaufbau )

        //edit:

        Dan noch ne kleine Frage, die mit dem Problem eher weniger zu tun hat:

        bei statischem Content liegt die Renderzeit logischerweise irgendwo bei 0.00000123s. Wenn ich da jetzt mit round() komme und den Wert auf 3 Stellen Runden will, zeigt er allerdings nur 0s statt 0.000s. Es funktioniert frühestens beim Runden auf 6 Nachkommastellen, da dort ja die 1 erreicht wird. Zwar total irrelevant, aber gibts irgendwie ne Möglichkeit, immer 3 Nachkommastellen anzeigen zu lassen?

        mfg
        Zuletzt geändert von INC.; 28.01.2007, 10:09.

        Kommentar


        • #5
          PHP-Code:
          <?PHP
          class bench {
             
             var 
          $starttime;
             
             public function 
          bench() {    
             }

             public function 
          start(){
               
          $time microtime();
               
          $time explode(" ",$time);
               
          $time $time[1] + $time[0];
               
          $this->starttime $time;
             }
             
             public function 
          stop(){
               
          $time microtime();
               
          $time explode(" ",$time);
               
          $time $time[1] + $time[0];
               
          $endtime $time;
               
          $totaltime = ($endtime $this->starttime);
               return 
          $totaltime;
             } 
             
          }
          ?>
          Killerspiele sollten in der Größenordnung von Kinder********************grafie eingeordnet werden.(G. Beckstein)
          - ...und solche Behauptungen in "falsches Resourcenmanagement"

          Kommentar


          • #6
            Danke für die Klasse, habe mich auch mal an einer Klasse für diese Aufgabe versucht:

            PHP-Code:
            <?php

            class Timebench
            {
                private 
            $starttime;
                private 
            $stoptime;
                private 
            $resulttime;
                
                public function 
            start()
                {
                    
            $this->starttime microtime(true);
                }
                
                public function 
            stop()
                {
                    
            $this->stoptime microtime(true);
                }
                
                public function 
            getresult()
                {
                    
            $this->resulttime $this->stoptime-$this->starttime;
                    return 
            $this->resulttime;
                }
            }

            ?>
            Gibts da was zum verbessern?
            Habe bei der Klasse drüber nicht ganz verstanden warum die stop- und endtime nicht auch zu einer Eigenschaft gemacht wurden, wäre das nicht schöner wenn starttime doch auch eine ist?

            Kommentar


            • #7
              Schau dir mal printf und number_format an um Kommazahlen formatiert auszugeben!
              hopka.net!

              Kommentar

              Lädt...
              X