Hi!
Das komplette Video bezieht sich ja auf JavaScript. Auch wenn mir klar ist, dass JavaScript und PHP im Prinzip gundverschiedene Sprachen sind, wollte ich mal ganz dämlich nachfragen, ob und in wie weit sich Dinge aus dem Video auf PHP übertragen lassen?
Es ist nicht nur das Sprachen"problem" sondern auch die unterschiedlichen Einsatzarten. PHP läuft einmal und erzeugt ein Ergebnis, Javascript läuft mitunter die gesamte Zeit während die Seite angezeigt wird und beeinflusst das Empfinden des Anwenders deutlich länger als der Request-Prozess normalerweise dauert (dauern sollte).
Speziell allerdings würde mich interessieren, ob Konzepte (und die daraus resultierenden Probleme) wie die Scope Chain auch in PHP existieren.
Schau dir die Möglichkeiten des Variablenzugriffs in Bezug auf die Scopes unter PHP an. In Funktionen gibt es nur eine Variablentabelle (das ist geraten), in der die lokalen Variablen abgelegt werden. Zugriffe auf andere Scopes erfordern eine Bekanntmachung. Es werden schon mal nicht mehrere Scopes automatisch abgeklappert (mit Ausnahme der Superglobals). Was genau beim global $var passiert, weiß ich nicht, aber wenn es mehr als das Einbinden eines Verweises in die lokale Variablentabelle ist, tät mich das (zunächst) wundern (bis mir Gründe dafür bekannt werden).
Und wenn nicht, anhand welcher Stichworte ich mich über Gleichwertiges für PHP informieren kann.
Sei kreativ! Was willst du wissen? "PHP", keine Frage. "Variables", ohne Zweifel. "Scope", darüber reden wir ja gerade, aber das Stichwort ist eventuell kontraproduktiv, weil es auch stark bei der OOP Verwendung findet (private, public, ...). Und natürlich "Performance", einen anderen Grund, das interne Verhalten PHPs Anderen nahezubringen, sehe ich gerade nicht.
Noch ein Wort zu Messungen:
Bei Performancemessungen sollte man meiner Meinung nach immer skeptisch reagieren, wenn im Versuchsaufbau eine Schleife in hoher Iterationenanzahl durchlaufen wird, um überhaupt ein Messergebnis zu erhalten, das über dem Grundrauschen liegt. Man kann damit zwar zeigen, dass Vorgang A und Vorgang B Differenzen aufweisen oder auch nicht, doch praxisnah ist das nicht. Meist will man mit PHP eine Webseite erzeugen und keine aufwendigen wissenschaftlichen Rechnungen durchführen. Die Vorgänge kommen also meist nur in geringer Zahl vor. Ob eine (oder wenige) Operation(en) nur 10 oder 20 Millisekunden dauert, fällt nicht ins Gewicht, weil die Übertragung der Seite deutlich länger dauert oder der Flaschenhals ganz woanders sitzt (Datenbankzugriff beispielsweise). Für den Anwender zählt letztlich seine Gesamt-Wartezeit, und da wäre es realistischer, wenn man das PHP-Script so schreibt, wie es später tatsächlich verwendet werden soll und die Zeit zwischen Request-Anfang und Response-Ende misst (Apaches Tool "ab" kann unter anderem dafür verwendet werden). Dich als Systembetreuer interessiert am Ende, wieviele Anwender gleichzeitig du zufriedenstellen kannst. Also wäre in meinen Augen eine "Requests pro Zeit"-Zahl in erster Linie wesentlich sinnvoller als ein hochiterativer Teilvorgangsvergleich.
Um die Flaschenhälse im Script selbst zu finden, sollte man sich eines Profilers bedienen. Der setzt die Ausführungszeiten der Teilvorgänge gegeneinander ins Verhältnis. Damit sieht man die wirklich wichtigen zu behandelnden Stellen und kann sich die Zeit für Mikrooptimierungen sparen, die letzlich nichts oder nicht viel bringen.
Lo!