Maison >développement back-end >tutoriel php >Optimisation des performances de niveau PHP avec feu noir
Blackfire: Pinpoint et fixant les goulets d'étranglement des performances dans vos applications améliorées de propriété
Informations clés:
(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:
Configuration de Blackfire:
Homestead.yaml
. Le fichier contient des espaces réservés en bas: <code class="language-yaml"># blackfire: # - id: foo # token: bar # client-id: foo # client-token: bar</code>
Décomminent ces lignes et remplacez les valeurs d'espace réservé par les détails de votre compte.
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.
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:
Ajouter une constante PER_PAGE
à HomeController
, en le définissant à une valeur comme 12.
Modifiez la procédure de récupération de la galerie pour utiliser la pagination:
<code class="language-yaml"># blackfire: # - id: foo # token: bar # client-id: foo # client-token: bar</code>
<code class="language-php">$galleries = $this->em->getRepository(Gallery::class)->findBy([], ['createdAt' => 'DESC'], self::PER_PAGE);</code>
HomeController
pour les galeries de chargement paresseuses: <code class="language-html+php">{% block javascripts %} {{ parent() }} {% endblock %}</code>
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!