Maison > développement back-end > tutoriel php > Optimisation des performances de niveau PHP avec feu noir

Optimisation des performances de niveau PHP avec feu noir

Joseph Gordon-Levitt
Libérer: 2025-02-08 08:59:10
original
827 Les gens l'ont consulté

Blackfire: Pinpoint et fixant les goulets d'étranglement des performances dans vos applications améliorées de propriété

PHP-level Performance Optimization with Blackfire

Informations clés:

  • Blackfire est un outil puissant pour identifier et résoudre les goulots d'étranglement des performances dans les applications, en particulier ceux construits avec Homestead améliorés.
  • Comprendre les graphiques de Blackfire (profil de référence, temps exclusif, temps inclusif, chemins chauds) est crucial pour identifier les drains de performances - que ce soit une utilisation excessive de la mémoire, un temps de processeur ou une activité globale.
  • Cet article présente l'application de BlackFire dans l'optimisation d'un blog de galerie multi-images. Il met en évidence l'identification des goulots d'étranglement (par exemple, PDOEXECUTE) et la mise en œuvre de solutions (par exemple, la pagination) pour augmenter les performances.
  • Les tests de performances continus avec des feu noirs sont essentiels tout au long du cycle de vie de l'application. L'intégration de ces tests dans votre pipeline CI / CD (une fonctionnalité proposée par le plan premium de BlackFire) améliore considérablement l'efficacité.

(Cet article fait partie d'une série sur la création d'un exemple d'application de blog de galerie multi-images pour l'analyse comparative et l'optimisation. Accédez au référentiel ici.)

Ce message s'appuie sur les introductions précédentes à Blackfire, démontrant son application pratique dans l'identification et la résolution des problèmes de performance. Nous l'utiliserons pour analyser notre projet d'échantillon, ciblant les zones pour une amélioration immédiate. Si vous utilisez Homestead amélioré (ce qui est recommandé), Blackfire doit déjà être configuré. Aucune connaissance préalable de feu noir n'est nécessaire.

Comprendre les métriques de feu noir:

Avant de commencer, définissons les termes clés utilisés dans les graphiques de performances de BlackFire:

  • Profil de référence: La ligne de base des performances initiale de votre application. Les profils ultérieurs sont comparés à cette ligne de base pour mesurer les améliorations.
  • Temps exclusif: Le temps passé uniquement dans une fonction / méthode spécifique, à l'exclusion du temps passé dans ses fonctions appelées.
  • Temps inclusif: Le temps total passé à exécuter une fonction, y compris le temps passé dans toutes ses fonctions appelées.
  • chemins chauds: Les parties les plus actives de votre application pendant le profilage, indiquant souvent des zones de consommation de ressources élevées (mémoire ou processeur).

Configuration de Blackfire:

  1. Créez un compte de feu noir. Votre page de compte fournit les jetons et les ID nécessaires pour configurer Homestead.yaml. Le fichier contient des espaces réservés en bas:
# blackfire:
#     - id: foo
#       token: bar
#       client-id: foo
#       client-token: bar
Copier après la connexion
Copier après la connexion

Décomminent ces lignes et remplacez les valeurs d'espace réservé par les détails de votre compte.

  1. Installez l'extension Chrome de feu noir. Cette extension est principalement utilisée pour le profilage manuel, ce qui est courant dans la plupart des scénarios. D'autres intégrations sont disponibles (voir la liste complète ici).

Optimisation avec des feuilles noires: une étude de cas

Nous allons comparer la page d'accueil - une page critique pour tout site Web. Les temps de chargement lents ici ont un impact direct sur l'expérience utilisateur et les taux de rebond. Alors que d'autres pages (par exemple, le téléchargement d'image) pourraient être testées, les performances de lecture sont généralement priorisées sur les performances de l'écriture.

Notre application initiale charge et trie toutes les galeries par âge. Pour profil, ouvrez la page d'accueil, cliquez sur le bouton d'extension de feu noir et sélectionnez "Profil!".

Résultats du profil initial:

Le graphique révèle que PDOExecute consomme 100% du temps inclusif (section rose foncé), indiquant que c'est le principal goulot d'étranglement. Bien que d'autres méthodes puissent montrer des barres roses clair plus grandes (temps inclusif), ceux-ci représentent le temps cumulé de leurs fonctions dépendantes. Les sections roses foncées représentent les fonctions nécessitant une attention immédiate.

Le passage en mode RAM montre que le rendu de brindilles consomme la majorité (environ 40 Mo) de la RAM. Ceci est attendu étant donné la grande quantité de données rendues.

PHP-level Performance Optimization with Blackfire

Les chemins chauds (bordures épaisses) mettent clairement en évidence les goulots d'étranglement. Les nœuds intensifs (nœuds avec un temps élevé passé) peuvent également indiquer des problèmes, même s'ils ne faisaient pas directement une partie du chemin chaud.

L'analyse

révèle que PDOExecute et unserialize (utilisation élevée de la RAM) sont causées par le chargement de toutes les galeries sur la page d'accueil. La solution: implémentez la pagination.

Implémentation de la pagination:

  1. Ajouter une constante PER_PAGE à HomeController, en le définissant à une valeur comme 12.

  2. Modifiez la procédure de récupération de la galerie pour utiliser la pagination:

# blackfire:
#     - id: foo
#       token: bar
#       client-id: foo
#       client-token: bar
Copier après la connexion
Copier après la connexion
  1. Ajouter JavaScript à la vue de la maison pour le chargement paresseux:
$galleries = $this->em->getRepository(Gallery::class)->findBy([], ['createdAt' => 'DESC'], self::PER_PAGE);
Copier après la connexion
  1. Ajoutez une nouvelle méthode à HomeController pour les galeries de chargement paresseuses:
{% block javascripts %}
    {{ parent() }}

    <🎜>
{% endblock %}
Copier après la connexion

Comparaison des performances:

La réévaluation du profileur après la mise en œuvre de la pagination donne des améliorations significatives:

L'utilisation de la mémoire est décuplée et le chargement est presque instantané. Le nouveau goulot d'étranglement est DebugClass, une conséquence de l'environnement de développement. Le passage au mode de production améliore encore les performances:

Conclusion:

Les performances de l'application sont considérablement améliorées, avec des temps de chargement de page à 58 ms. D'autres optimisations sont minimes. Les tests de performances réguliers avec BlackFire sont cruciaux et l'intégrer dans votre pipeline CI / CD (disponible avec le plan premium de BlackFire) est fortement recommandé.

Questions fréquemment posées (FAQ) sur l'optimisation des performances PHP:

La section FAQ fournie reste largement inchangée, car elle offre des informations précieuses pertinentes pour l'optimisation des performances PHP en général. Il couvre avec précision des sujets tels que les outils de surveillance, les problèmes courants, les techniques d'optimisation, l'évolutivité et les meilleures pratiques.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal