Zend_Db_ProfilerEinführungZend_Db_Profiler kann aktiviert werden, um das Erstellen von Profilen für Abfragen zu erlauben. Die Profile enthalten die Abfragen, die durch den Adapter verarbeitet worden sind, sowie die Laufzeit der Abfragen, um die Kontrolle der verarbeiteten Abfragen zu ermöglichen, ohne das extra Code für das Debugging zu den Klassen hinzugefügt werden muß. Die erweiterte Verwendung ermöglicht den Entwickler sogar zu filtern, welche Abfragen aufgezeichnet werden sollen. Der Profiler wird entweder durch die Übergabe eines Parameters an den Konstruktor des Adapters oder zu einem späteren Zeitpunkt direkt an den Adapter aktiviert.
Der Wert der profiler Option ist flexibel. Er wird unterschiedlich interpretiert, abhängig von seinem Typ. Meistens sollte ein einfacher Boolscher Wert verwendet werden, aber andere Typen ermöglichen es das Verhalten des Profilers anzupassen. Ein boolsches Argument aktiviert den Profiler wenn es der Wert TRUE ist, oder schaltet ihn mit FALSE aus. Die Profiler Klasse ist die Standard Profiler Klasse des Adapters Zend_Db_Profiler.
Eine Instanz eines Profiler Objektes führt dazu das der Adapter dieses Objekt verwendet. Der Typ des Objektes muß hierfür Zend_Db_Profiler oder eine Subklasse sein. Der Profiler muß separat eingeschaltet werden.
Ein Argument kann ein assoziatives Array sein das eines oder alle der folgenden Schlüssel enthält: 'enabled', 'instance', oder 'class'. Die Schlüssel 'enabled' und 'instance' korrespondieren zu den zuvor dokumentierten boolschen und Instanz Typen. Der 'class' Schlüssel wird verwendet um die Klasse die für einen eigenen Profiler verwendet werden soll, zu benennen. Die Klasse muß Zend_Db_Profiler oder eine Subklasse sein. Die Klasse wird ohne Konstruktor Argumente instanziert. Die 'class' Option wird ignoriert wenn die 'instance' Option angegeben wurde.
Letztendlich kann das Argument ein Objekt des Typs Zend_Config sein das Eigenschaften enthält welche als Array Schlüssel verwendet werden wie anbei beschrieben. Zum Beispiel könnte die Datei "config.ini" die folgenden Daten enthalten:
Diese Konfiguration kann durch den folgenden PHP Code angesprochen werden:
Die Eigenschaft 'instance' kann wie folgt verwendet werden:
Den Profiler verwendenDer Profiler kann jederzeit über die Adapter Methode getProfiler() geholt werden: Dies gibt eine Zend_Db_Profiler Objektinstanz zurück. Mit dieser Instanz kann der Entwickler seine Abfragen mit Hilfe von verschiedenen Methoden untersuchen:
Der Rückgabewert von getLastQueryProfile() und die einzelnen Elemente von getQueryProfiles() sind Zend_Db_Profiler_Query Objekte, welche die Möglichkeit bieten, die individuellen Abfragen zu untersuchen:
Die Informationen, die Zend_Db_Profiler bereitstellt, sind nützlich, um Engpässe in der Anwendung zu ermitteln und um Abfragen zu überprüfen, die durchgeführt worden sind. Um zum Beispiel die genaue Abfrage zu sehen, die zuletzt durchgeführt worden ist: Vielleicht wird eine Seite langsam erstellt; verwende den Profiler, um zuerst die gesamte Laufzeit aller Abfragen zu ermitteln und dann durchlaufe die Abfragen, um die am längsten laufende zu finden:
Fortgeschrittene Profiler VerwendungZusätzlich zum Untersuchen von Anfragen erlaubt der Profiler dem Entwickler auch zu filtern, welche Abfragen aufgezeichnet werden sollen. Die folgenden Methoden arbeiten mit einer Zend_Db_Profiler Instanz: Filtern anhand der Laufzeit der AbfragensetFilterElapsedSecs() ermöglicht dem Entwickler, eine minimale Laufzeit anzugeben, bevor eine Abfrage aufzeichnet werden soll. Um den Filter zu entfernen, muss nur der Wert NULL an die Methode übergeben werden.
Filtern anhand des AbfragetypsetFilterQueryType() ermöglicht dem Entwickler anzugeben, welche Abfragetypen aufgezeichnet werden sollen; um mehrere Typen aufzuzeichnen, verwende das logische OR. Abfragetypen sind mit den folgenden Zend_Db_Profiler Konstanten definiert:
Mit setFilterElapsedSecs() kannst du jeden vorhandenen Filtern entfernen, indem du NULL als einziges Argument übergibst.
Hole Profil nach Abfragetyp zurückDie Verwendung von setFilterQueryType() kann die Anzahl der aufgezeichneten Abfragen reduzieren. Allerdings kann es sinnvoller sein, alle Abfragen auzuzeichnen, baer nur diese anzuschauen, die im Moment gebraucht werden. Ein weiteres Feature von getQueryProfiles() ist das Filtern der Abfragen "on-the-fly" durch Übergabe eines Abfragetyps (oder eine logischen Kombination von Abfragetypen) als erstes Argument; beachte dieses Kapitel für eine Liste der Konstanten für Abfragetypen.
Specialized ProfilersEin spezialisierter Profiler ist ein Objekt das von Zend_Db_Profiler abgeleitet ist. Spezialisierte Profiler behandeln die Profilinginformationen auf speziellen Wegen. Profilen mit FirebugZend_Db_Profiler_Firebug sendet Profilinginformationen an die » Firebug » Console. Alle Daten werden über die Zend_Wildfire_Channel_HttpHeaders Komponente gesendet welche HTTP Header verwendet um sicherzustellen das der Seiteninhalt nicht gestört wird. Das Debuggen von AJAX Anfragen die klare JSON und XML Antworten benötigen ist mit diesem Weg möglich. Notwendigkeiten:
Example #1 DB Profiling mit Zend_Controller_Front
Example #2 DB Profiling ohne Zend_Controller_Front
|