Zend_Db_ProfilerIntroductionZend_Db_Profiler peut être activé pour permettre le profilage de requête. Les profils incluent les requêtes exécutées par l'adaptateur, ainsi que leur temps d'exécution, permettant l'inspection des requêtes qui ont été exécutées sans avoir besoin de rajouter le code spécifique de débogage aux classes. L'utilisation avancée permet aussi au développeur de filtrer quelles requêtes il souhaite profiler. Le profileur s'active soit en passant une directive au constructeur de l'adaptateur, soit en spécifiant à l'adaptateur de l'activer plus tard.
La valeur de l'option profiler est souple. Elle est interprétée différemment suivant son type. La plupart du temps, vous devriez simplement utiliser une variable booléenne, mais d'autres valeurs vous permettent de personnaliser le comportement du profileur. Un argument booléen active le profileur si c'est une valeur TRUE, ou le désactive si FALSE. La classe de profileur est celle par défaut, par exemple Zend_Db_Profiler.
Une instance d'un objet profileur fait que l'adaptateur utilise cet objet. L'objet doit être de type Zend_Db_Profiler ou une sous-classe. L'activation du profileur est faite séparément.
L'argument peut être un tableau associatif contenant une ou toutes les clés suivantes : "enabled", "instance", et "class". Les clés "enabled" et "instance" correspondent aux types booléen et instance décrites ci-dessus. La clé "class" est utilisée pour nommer une classe à prendre en tant que profileur personnalisé. La classe doit être de type Zend_Db_Profiler ou une sous-classe. La classe est instanciée sans aucun argument de constructeur. L'option "class" est ignorée quand l'option "instance" est fournie.
Enfin, l'argument peut être un objet de type Zend_Config contenant des propriétés, qui sont traitées comme les clés de tableaux décrites ci-dessus. Par exemple, un fichier "config.ini" peut contenir les données suivantes :
Cette configuration peut être appliquée par le code PHP suivant :
La propriété "instance" peut être utilisée comme ceci :
Utiliser le profileurA n'importe quel moment, vous pouvez récupérer le profileur en utilisant la méthode getProfiler() de l'adaptateur : Ceci retourne une instance de Zend_Db_Profiler. Avec cette instance, le développeur peut examiner les requêtes en utilisant un éventail de méthodes :
La valeur de retour de getLastQueryProfile() et les éléments individuels de getQueryProfiles() sont des objets de type Zend_Db_Profiler_Query qui permettent d'inspecter les requêtes :
L'information que Zend_Db_Profiler fourni est utile pour profiler des goulots d'étranglement dans les applications, ainsi que pour déboguer les requêtes qui viennent d'être exécutées. Par exemple, pour voir la dernière requête qui vient de s'exécuter : Si une page se génère lentement, utilisez le profileur pour déterminer le nombre total de requêtes, et ensuite passer d'une requête à l'autre pour voir laquelle a été la plus longue :
Utilisation avancée du profileurEn plus de l'inspection de requête, le profileur permet aussi au développeur de filtrer quelles requêtes il veut profiler. Les méthodes suivantes fonctionnent avec une instance de Zend_Db_Profiler : Filtrer par temps d'exécutionsetFilterElapsedSecs() permet au développeur de définir un temps minimum d'exécution de la requête avant que celle-ci soit profilée. Pour retirer le filtre, passez une valeur NULL à la méthode.
Filtrer par type de requêtesetFilterQueryType() permet au développeur de définir quels types de requêtes doivent être profilées ; pour profiler des types multiples vous pouvez utiliser le OU logique. Les types de requêtes sont définis sous forme de constantes de Zend_Db_Profiler :
Comme avec setFilterElapsedSecs(), vous pouvez retirer tous les filtres en passant NULL comme unique argument.
Récupérer les profils par type de requêteUtiliser setFilterQueryType() peut réduire les profils générés. Cependant il est parfois utile de garder tous les profils et voir uniquement ceux dont on a besoin, à un moment donné. Une autre possibilité de getQueryProfiles() est qu'il est possible de filtrer à la volée, en passant un type de requête (ou une combinaison logique de types de requête) comme premier argument ; voir cette section pour la liste des constantes de types de requête.
Profileurs spécialisésUn profileur spécialisé est un objet qui hérite de Zend_Db_Profiler. Les profileurs spécialisés traitent les informations de profilage de manière spécifique. Profiler avec FirebugZend_Db_Profiler_Firebug envoie des informations de profilage vers la » console » Firebug. Toutes les données sont envoyées via le composant Zend_Wildfire_Channel_HttpHeaders qui utilise les en-têtes HTTP pour s'assurer que le contenu de la page n'est pas perturbé. Déboguer les requêtes AJAX qui requière du JSON "propre" ou un réponse XML est possible avec cette approche. Éléments requis :
Example #1 Profilage de base de données avec Zend_Controller_Front
Example #2 Profilage de base de données sans Zend_Controller_Front
|