Ankündigung

Einklappen
Keine Ankündigung bisher.

Code-Geschwindigkeitsmessungen

Einklappen

Neue Werbung 2019

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

  • Code-Geschwindigkeitsmessungen

    Hallo,

    ist wieder eine (Geschwindigkeits-) Frage die einige hier als Spinnerei abtun werden (bitte einfach aufhören zu lesen ab hier).

    Es interessiert mich aber trotzdem:

    Ich würde gerne ein bisschen die Laufzeiten verstehen, und dazu "Messen", wie schnell oder langsam verschiedene Dateien geladen, Klassen definiert und zur Verfügung gestellt werden etc.

    Das möchte ich etwas feiner granuliert erfahren, und zwar vom laden der Datei über Syntaxcheck des Parsers bis zum existieren der Klasse.

    Mit microtime( true ) z.B. vor und nach der Klassendefinition komme ich nicht so recht weiter, weil laden und parsen damit nicht auseinander zu halten sind.

    Gleiches ergibt sich, wenn ich die reine Klassendefinition in einen eigenen file packe und um das include zeiten nehme. Auch dann habe ich keine Unterscheidung zwischen der reinen Ladezeit der Klasse und der Abarbeitungszeit des Parsers.

    Zwar scheint es einen Unterschied in der Abarbeitung zu geben, wenn ich die (abstrakte) Klassendefinition mit einem "if" umschliesse aber auch da hilft nicht so wirklich.

    Frage:
    Gibt es hier Möglichkeiten, wenn man KEINE command line Möglichkeit hat (der PHP Server ist in meinem Falle in einem anderen System gekapselt und so scheiden einige Möglichkeiten offenbar aus)

    Danke für jeden Hinweis!
    Ich muss PHP im Kontext Home Automation nutzen (Vorgabe Hersteller und nicht zu ändern). Da kommt es leider ggf. auf ms an. Deshalb manche "seltsame" Frage.


  • #2
    Du kannst den Parser-Prozess nicht hooken, das geht nicht.

    Grundlegend ist die Parsezeit aber bei steigender PHP Version irrelevant, da PHP 5 in den neusten Versionen einen bytecode cache verwendet, sodass grundsätzlich geladene Dateien nur einmal geparsed werden müssen ( sofern sie sich nicht verändert haben ). Als Faustregel gillt jedoch je abstrahierender die Definition, je länger die Parser-Zeit.

    Konkret: Je mehr use statements du nutzt ( um Namespaces zu importieren oder Klassen, oder Functions oder Konstanten ), je komplexer ist das parsing auch impliziert das PHP Core Komponenten ( wie ArrayObject, MySQLi, PDO oder SplObjectStorage, ... ). Selbstständig "bytecoden" schmink dir ab.

    Invoking-Waypoints könnte man tracken ( ja, toll, was meint der damit ). Jeder Aufruf ( invoke, call ) einer Methode, Klasse oder eines Sprachkonstrukt kann man überwachen, tick-weise. Mehr dazu hier: http://php.net/manual/de/control-structures.declare.php

    Bedenke aber das sich das nur auf das deklarierte Script ( also das script dass das declare definiert ) auswirkt, nicht auf inkludierte Scripts. Das alleine schon aus Debugging gründen zu verwenden bringt den Source ins PHP-Walhalla ( overkill ).
    [URL="https://gitter.im/php-de/chat?utm_source=share-link&utm_medium=link&utm_campaign=share-link"]PHP.de Gitter.im Chat[/URL] - [URL="https://raindrop.io/user/32178"]Meine öffentlichen Bookmarks[/URL] ← Ich habe dir geholfen ? [B][URL="https://www.amazon.de/gp/wishlist/348FHGUZWTNL0"]Beschenk mich[/URL][/B].

    Kommentar


    • #3
      Vielleicht hilft dir ein einfacher Profiler wie Webgrind weiter die Laufzeit deiner Script zu verstehen. Dieser zeigt dir zwar nur die Funktionen, Anzahl der Aufrufe, Laufzeit und summierte Laufzeit der Funktionen an, die reicht aber in den meisten Fällen komplett aus, da der Parser von PHP eigentlich nie ein Problem darstellen sollte.

      Wie so eine Ausgabe aussieht:

      Kommentar


      • #4
        Ich glaube XDebug stellt schon ein Problem für ihn da, aus Webgrind wird also nix. Was auch der Grund war wieso ich nicht das Thema angeschnitten habe ( kenne Seine Umgebung etwas mehr im Detail ).
        [URL="https://gitter.im/php-de/chat?utm_source=share-link&utm_medium=link&utm_campaign=share-link"]PHP.de Gitter.im Chat[/URL] - [URL="https://raindrop.io/user/32178"]Meine öffentlichen Bookmarks[/URL] ← Ich habe dir geholfen ? [B][URL="https://www.amazon.de/gp/wishlist/348FHGUZWTNL0"]Beschenk mich[/URL][/B].

        Kommentar


        • #5
          Zitat von tr0y Beitrag anzeigen
          Ich glaube XDebug stellt schon ein Problem für ihn da
          Das kann ich mir schon vorstellen. Diese Antwort ist aber nicht nur für ihn sondern auch als Information für andere Personen die über dieses Thema stolpern zu verstehen und wissen wollen wie man ein solches Thema angehen kann.

          Kommentar


          • #6
            Speziell fuer kleinste Syteme hat sich meine Debugklasse bewaehrt.
            Download siehe meine Signatur.
            PHP-Klassen auf github

            Kommentar

            Lädt...
            X