Question

Que puis-je faire pour augmenter les performances/vitesse de mes scripts PHP sans installer de logiciel sur mes serveurs ?

Était-ce utile?

La solution

Profil.Profil.Profil.Je ne sais pas s'il existe quelque chose pour PHP, mais il devrait être simple d'écrire un petit outil pour insérer des informations de profilage dans votre code.Vous souhaiterez profiler les temps de fonction et les temps de requête SQL.

Alors où vous avez une fonction :

function foo($stuff) {
    ...
    return ...;
}

Je le changerais en :

function foo($stuff) {
    trace_push_fn('foo');
    ...
    trace_pop_fn('foo');
    return ...;
}

(C'est l'un de ces cas où plusieurs retours dans une fonction deviennent un obstacle.)

Et SQL :

function bar($stuff) {
    trace_push_fn('bar');

    $query = ...;
    trace_push_sql($query);
    mysql_query($query);
    trace_pop_sql($query);

    trace_pop_fn('bar');
    return ...;
}

Au final, vous pouvez générer une trace complète de l’exécution du programme et utiliser toutes sortes de techniques pour identifier vos goulots d’étranglement.

Autres conseils

Une technique raisonnable qui peut facilement être retirée du marché est la mise en cache.Une grande quantité de temps a tendance à être consacrée à la génération de ressources pour les clients qui sont communes entre les demandes (et même entre les clients) ;l'élimination de ce travail d'exécution peut entraîner des augmentations spectaculaires de la vitesse.Vous pouvez transférer la ressource générée (ou le fragment de ressource) dans un fichier en dehors de l'arborescence Web, puis la relire si nécessaire.De toute évidence, un certain profilage sera nécessaire pour garantir que cela soit réellement plus rapide que la régénération - forcer le serveur Web à revenir régulièrement sur le disque peut être préjudiciable, de sorte que la ressource doit vraiment être fortement réutilisée.

Vous pourriez également être surpris du temps passé à traiter des requêtes de base de données mal écrites ;temps les requêtes générées communes et voir si elles peuvent être réécrites.Le temps passé à exécuter du code PHP réel est généralement assez limité, sauf si vous utilisez des algorithmes sous-optimaux.

Aucun de ces éléments n'est limité à PHP, bien que certaines des approches/fonctions « magiques » de PHP puissent surprotéger quelqu'un en pensant à ces préoccupations.Par exemple, j'ai récemment mis à jour un script qui utilisait array_search pour utiliser une recherche binaire sur un tableau trié et j'ai obtenu l'accélération exponentielle attendue.

Pensez vraiment à utiliser le profileur XDebug :cela aide à vérifier dans quelle mesure une certaine fonction est exécutée par rapport à ce à quoi vous vous attendriez.

J'essaie de diminuer les instructions tout en améliorant la lisibilité du code en remplaçant la logique par des recherches dans des tableaux, le cas échéant.C'est ce qu'a écrit Jeff Atwood dans [Le meilleur code est sans code du tout] [1].

  • Évitez également les boucles à l'intérieur d'une autre boucle et les instructions IF / ELSE imbriquées.
  • Fonctions courtes.Parfois, beaucoup de code n'ont pas besoin d'être exécutés lorsque la valeur du résultat est déjà connue.
  • Tests inutiles :

    if (count($array) === 0) return;

    peut également s'écrire :

    si (!$tableau) return ;

    Un autre appel de fonction éliminé !

    [1]: http://www.codinghorror.com/blog/archives/000878.html"Le meilleur code, c'est l'absence de code du tout"

Vous pouvez optimiser le code avec deux éléments de base :

Optimisation de la bibliothèque et du serveur associés à PHP

Traverser https://www.digitalocean.com/community/articles/how-to-optimize-apache-web-server-performance Ou

Vous pouvez utiliser un outil de profilage comme xhprof pour voir quelle partie de votre code peut être optimisée et voici le lien à suivre : http://michaelsanford.com/compiling-xhprof-for-php-5-4/

Optimiser votre code à l'aide du profileur de code et de l'analyseur de code

Vous devez installer Netbeans pour utiliser ce plugin.Voici les étapes à suivre :

1) Ouvrez NetBeans puis sélectionnez l'option dans la barre de menu Outils > Plugin.Recherchez ensuite le nom du plug-in "phpcsmd" dans l'onglet du plug-in disponible et installez-le à partir de là.

2) Maintenant, ouvrez le terminal et soyez là en tant que super utilisateur en tapant la commande "sudo su".

3) Installez la bibliothèque PEAR (si elle n'est pas installée) sur votre système en exécutant les commandes suivantes dans votre terminal

a) wget http://pear.php.net/go-pear.phar
b) php go-pear.phar

Comme nous en avons besoin pour l’installation d’autres modules complémentaires.

4) Ensuite, exécutez la commande

"pear config-set auto_discover 1"

Ceci sera utilisé pour définir la découverte automatique du chemin sur "true" pour les plug-ins requis.Ils sont donc automatiquement installés à l’emplacement souhaité.

5) Exécutez ensuite la commande ci-dessous pour installer le renifleur de code PHP.

"pear install --alldeps pear/PHP_CodeSniffer"

6) Maintenant, installez PHP Mess Detector en exécutant la commande suivante

"pear install --alldeps phpmd/PHP_PMD"

Si vous obtenez une erreur du type "nom de package/fichier de package non valide "phpmd/PHP_PMD"" lors de l'installation de ce module.Vous devez utiliser cette commande "pear channel-discover pear.phpmd.org" pour vous débarrasser de cette erreur.Après cette commande, vous pouvez réexécuter la commande ci-dessus pour installer le détecteur de désordre.

7) Maintenant, installez PHP Depend en exécutant la commande suivante

"pear install --alldeps pdepend/PHP_Depend"

8) Installez maintenant le détecteur PHP Copy Paste en exécutant la commande suivante

"pear install --alldeps phpunit/phpcpd"

9) Ensuite, exécutez la commande

"pear config-set auto_discover 0"

Ceci sera utilisé pour définir le chemin de découverte automatique sur "false".

10) Ensuite ouvrez les net beans et suivez le chemin Outils>Options>PHP>PHPCSMD

Il n’y a pas de solution magique et tenter de proposer des solutions génériques pourrait bien s’avérer une perte de temps.

Où sont vos goulots d’étranglement ?Par exemple, vos scripts sont-ils gourmands en processeur/base de données/mémoire ?

Avez-vous effectué un profilage ?

l'inclusion de fichiers est lente, et leur exigence est encore plus lente.Si vous utilisez __autoload pour inclure chaque classe, cela s'additionnera.Par exemple.

Je me méfie toujours un peu d'essayer d'être trop intelligent en termes d'optimisation du code, si cela sacrifie la clarté du code.Si vous avez besoin de rendre le code obscur pour le rendre rapide, ne serait-il pas moins coûteux de mettre à niveau le matériel au lieu de perdre votre temps à essayer de modifier le code ?Après tout, les cycles de processeur sont moins chers que les cycles de programmeur.

Ceux auxquels je peux penser...

  • Invariants de boucle sont toujours un bon à surveiller.

  • Écrivez le code conforme E_Strict et E_NOTICE, en particulier si vous enregistrez les erreurs.

  • Évitez l'opérateur @.

  • Chemins absolus pour les exigences et les incluses.

  • Utilisez strpos, str_replace etc.au lieu d'expressions régulières autant que possible.

Ensuite, il existe de nombreuses autres méthodes qui pourraient fonctionner, mais qui ne vous apporteront probablement pas beaucoup d'avantages.

Chaque fois que j'examine les problèmes de performances, je pense que la meilleure chose à faire est de chronométrer le temps d'exécution de vos pages, puis d'examiner les plus lentes.Lorsque vous obtenez ces mesures réelles, vous pouvez souvent améliorer les performances des plus lentes de plusieurs ordres de grandeur, soit en corrigeant une requête SQL lente, soit en resserrant un peu le code.

Cela ne nécessite bien sûr aucun nouveau matériel ou logiciel spécial, juste un œil critique sur le code existant.

Cela dit, cela ne fonctionnera que pendant un certain temps...si vous obtenez vraiment suffisamment de trafic pour atteindre les limites de votre matériel et/ou si du code est intrinsèquement lent et vraiment nécessaire, vous devrez envisager d'autres possibilités.

Je suis responsable d'un vaste système de reporting et nous suivons les rapports les plus lents comme ça.Je déclenche une clé unique dans la base de données lorsque le rapport démarre, puis lorsqu'il se termine, je peux déterminer combien de temps cela a pris.J'utilise la base de données car de cette façon, je peux détecter le délai d'expiration des pages (ce qui arrive beaucoup plus que je ne le souhaiterais)

Suivez d'abord certains des autres conseils, comme le profilage et la prise de bonnes décisions en matière d'allocation des ressources, par ex.mise en cache.

Tenez également compte des performances des ressources externes comme votre base de données.Dans MySQL, vous pouvez vérifier le journal des requêtes lent Par exemple.De plus, assurez-vous de ne pas avoir conçu votre base de données et de l'oublier.Optimiser vos requêtes (encore une fois pour MySQL) contre des données réelles peut rapporter gros.

Rasmus Lerdorf a donné quelques bons conseils dans sa récente présentation "Simple est difficile" au FrOSCon '08.Si vous utilisez un cache de bytecode (et vous devriez vraiment en utiliser un), les erreurs d'inclusion de chemin font très mal, alors optimisez votre require/require_once.

Vous pouvez utiliser un outil de profilage comme xhprof pour voir quelle partie de votre code peut être optimisée !

1) Utilisez la dernière version de PHP

L'équipe principale travaille dur pour améliorer les performances de PHP dans chaque version.

2) Utilisez un cache de bytecode

Depuis PHP 5.5, un cache de bytecode a été ajouté à PHP nommé OPcache.En utilisant OPcache peut faire une énorme différence surtout depuis PHP 7.Il reçoit des améliorations dans chaque version de PHP et pourrait même bénéficier d'un Implémentation JIT à l'avenir.

3) Profilage

Le développement du profilage vous donne un bon aperçu de ce qui se passe exactement.Cela aide beaucoup à trouver les goulots d'étranglement dans votre code.

L'un des outils les plus utilisés est XHProf mais n'est plus officiellement pris en charge et a des problèmes avec PHP >= 7.Une alternative lorsque vous souhaitez profiler PHP >= 7 est Tideways qui est une fourchette de XHProf.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top