Script Timer

ICTscripters maakt gebruik van cookies. Door het gebruiken en browsen naar onze site gaat je automatisch akkoord met het gebruik van cookies. Klik hier voor meer informatie

  • Deze class kan goed helpen bij het debuggen van je scripts qua tijd.
    functies:
    addmarker($name) - Plaats een marker in je script om later weer te geven hoe lang de bewerking vanaf de vorige marker in je script, of - als het de eerste marker van het script is - start de timing.
    start() / stop() - Equivalent aan addmarker('Start') en addmarker('Stop') omdat dit vaak gebruikt wordt.
    debug() - Output een tabel met de executietijden bij elke marker in je script.
    showtime() - Output het aantal seconden van de eerste tot de laatste marker.

    PHP Source Code: index.php

    1. <?php
    2. // begin class PHP_timer
    3. class PHP_timer {
    4. // array to store the information that we collect during the script
    5. // this array will be manipulated by the functions within our object
    6. var $points = array();
    7. // call this function at the beginning of the script
    8. function start() {
    9. // see the addmarker() function later on
    10. $this->addmarker("Start");
    11. }
    12. // end function start()
    13. // call this function at the end of the script
    14. function stop() {
    15. // see the addmarker() function later on
    16. $this->addmarker("Stop");
    17. }
    18. // end function stop()
    19. // this function is called to add a marker during the scripts execution
    20. // it requires a descriptive name
    21. function addmarker($name) {
    22. // call the jointime() function and pass it the output of the microtime() function
    23. // as an argument
    24. $markertime = $this->jointime(microtime());
    25. // $ae (stands for Array Elements) will contain the number of elements
    26. // currently in the $points array
    27. $ae = count($this->points);
    28. // store the timestamp and the descriptive name in the array
    29. $this->points[$ae][0] = $markertime;
    30. $this->points[$ae][1] = $name;
    31. }
    32. // end function addmarker()
    33. // this function manipulates the string that we get back from the microtime() function
    34. function jointime($mtime) {
    35. // split up the output string from microtime() that has been passed
    36. // to the function
    37. $timeparts = explode(" ",$mtime);
    38. // concatenate the two bits together, dropping the leading 0 from the
    39. // fractional part
    40. $finaltime = $timeparts[1].substr($timeparts[0],1);
    41. // return the concatenated string
    42. return $finaltime;
    43. }
    44. // end function jointime()
    45. // this function simply give the difference in seconds betwen the start of the script and
    46. // the end of the script
    47. function showtime() {
    48. echo bcsub($this->points[count($this->points)-1][0],$this->points[0][0],6);
    49. }
    50. // end function showtime()
    51. // this function displays all of the information that was collected during the
    52. // course of the script
    53. function debug() {
    54. echo "Script execution debug information:";
    55. echo "<table border=0 cellspacing=5 cellpadding=5>\n";
    56. // the format of our table will be 3 columns:
    57. // Marker name, Timestamp, difference
    58. echo "<tr><td><b>Marker</b></td><td><b>Time</b></td><td><b>Diff</b></td></tr>\n";
    59. // the first row will have no difference since it is the first timestamp
    60. echo "<tr>\n";
    61. echo "<td>".$this->points[0][1]."</td>";
    62. echo "<td>".$this->points[0][0]."</td>";
    63. echo "<td>-</td>\n";
    64. echo "</tr>\n";
    65. // our loop through the $points array must start at 1 rather than 0 because we have
    66. // already written out the first row
    67. for ($i = 1; $i < count($this->points);$i++) {
    68. echo "<tr>\n";
    69. echo "<td>".$this->points[$i][1]."</td>";
    70. echo "<td>".$this->points[$i][0]."</td>";
    71. echo "<td>";
    72. // write out the difference between this row and the previous row
    73. echo bcsub($this->points[$i][0],$this->points[$i-1][0],6);
    74. echo "</td>";
    75. echo "</tr>\n";
    76. }
    77. echo "</table>";
    78. }
    79. // end function debug()
    80. }
    81. // end class PHP_timer
    82. ?>
    Laat alles zien
    Dit script is afkomstig vanpfz,Ictscripters heeft toestemming om dit script te plaatsen.
    Bestanden

    3,692 keer bekeken

Reacties 1

  • FangorN -

    Hmm.

    Waarom roep je microtime() niet aan met de parameter true zodat je de tijd direct als float krijgt en deze niet als string hoeft te ontleden?

    Misschien is het handig om individuele timers te starten, te stoppen en te resetten (net zoals een stopwatch). Mogelijk kun je nog wat getters/setters introduceren? Mogelijk is het handig om gewoon een soort van stack van tellers bij te houden die je identificeert met indexes in plaats van namen. Indien je geen index opgeeft start je een nieuwe timer (mits dit zinnig zou zijn), geef je wel een index op doe je iets met een specifieke timer. Is het nu mogelijk dat timers overlappen?

    Bij code die verantwoordelijk is voor benchmarking van performance is het ZEER belangrijk dat deze code zelf efficiënt is en deze de performance niet of nauwelijks beinvloedt. Daarom lijkt het mij verstandig om de jointime() methode te schrappen door microtime() anders aan te roepen.