ZF2 Optimiser pour le trafic élevé
Mon ZF2 application semble être extrêmement lente lorsque plus de 3 utilisateurs l'utilisent en même temps.
J'ai le profil de mon code avec xdebug et webgrind et non de mes fonctions semble être lent
donc, il doit être une optimalisation question au sein de la zf2, c'est l'auto.
Pour le cache, j'utilise la EdpSuperluminal module par EvanDotPro, ce qui semble augmenter les performances de l'application.
Nous utilisons le reverse proxy nginx, mais n'ont pas de sens en tant que bien.
J'ai besoin de quelques bons conseils pour augmenter la réponse pour le trafic élevé. Je parle
30+ de l'utilisateur connecté en même temps.
- 3 utilisateurs simultanés, est loin de fort trafic. Et vous devez optimiser déjà. Elle est mauvaise.
Vous devez vous connecter pour publier un commentaire.
Il y a quelques étapes très simples pour parvenir à une application plus rapide. Il y a trois choses qui peuvent toujours être considérés.
ZF2 Performance QuickTipp #1 - Viewmodel
Toujours attribuer manuellement le complet le script à rendre. Cela permettra d'accroître la performance un peu. C'est fait comme ceci:
ZF2 Performance QuickTipp #2 - Classmap Chargement automatique
C'est probablement une des parties les plus importantes de la vitesse de votre application. Personnellement, j'ai vu une augmentation de LoadingTimes jusqu'à 40%. La mise en œuvre est assez simple:
La
autoload_classmap.php
est alors un simple tableau de'FQ-CLASSNAME' => 'FQ-FILEPATH'
. Cela peut être automatted assez facilement à l'aide de la classmap_generator-utilitaire de ZF2ZF2 Performance QuickTipp #3 - Garder Module.php de la lumière!
Malheureusement, c'est un post que je n'ai pas à écrire encore. Le
Module.php
est un fichier qui est chargé à chaque requête. Beaucoup de gens l'oublient et d'écrire beaucoup, beaucoup d'usines à l'intérieur d'eux. À un moment donné, ZfcUser-Module.php était un exemple de ce que ne pas le faire. Les fermetures ou les fonctions anonymes sont exécutées sur chaque demande. C'est tout à fait un peu de travail à faire s'il y a trop d'entre eux sur l'ensemble du projet. Une meilleure approche serait de simplement écrire Usine Classes. ZfcUser plus tard mise à jour Module.php d'utiliser cette stratégie.Et c'est à peu près toutes les choses faciles, on peut le faire (que je connais, je ne sais pas beaucoup! :D). Cependant, ce qui semble intéressant, c'est que de commencer à utiliser 3 les utilisateurs de votre application s'exécute lentement. De mon expérience, cela n'a rien à voir avec les scripts de lui-même, mais est plutôt un problème de serveur. Est-ce à partir d'une mise en scène de la Machine ou localement?
__construct
- de sorte que la connexion db. Un pageload de longueur a un grand saut dans le temps de chargement entre certaines d'ur fonctions. Si la mouture EST de révéler quelque chose, mais je ne suis pas expérimenté débogueur moi-même, désoléSi vous utilisez la Doctrine, n'oubliez pas d'ajouter un cache pour les annotations. Cette améliorer considérablement la performance (quand j'active le cache de diviser presque par deux le temps de chargement). Si vous utilisez DoctrineORMModule:
Cependant, c'est assez gênant, tout en développant parce que vous devez vider le cache à chaque fois que votre cartographie des changements.
le ZF2 classmap générateur va vous donner un coup de pouce si vous avez un grand projet:
http://framework.zend.com/manual/2.0/en/modules/zend.loader.classmap-generator.html
Alternativement, si vous êtes en utilisant compositeur (vous devriez le faire), alors vous pouvez utiliser composer pour générer le classmap pour tous vos modules et dependdencies trop ce qui est encore mieux:
Tous les ci-dessus et à l'aide de une sorte de cache d'opcode comme APC /Opcache il permettra d'accélérer les choses.
Mais oui ZF 2 semble être très lent, malheureusement, encore plus lent, puis ZF 1 🙁
Aussi le module de config cache accélère les choses, vous ne pouvez pas avoir toutes les fermetures que de faire ce travail 😉
http://hounddog.github.io/blog/performance-in-zend-framework-2/
Tout d'abord à l'accélération de votre zf2 application, vous devez utiliser ZendOptimizerPlus. La grande partie du temps d'exécution utilisé pour lire et précompiler code php. Typique ZF2 application a beaucoup de fichiers, alors il faut beaucoup de temps pour les traiter.
ZendOp+ enregistre bytecode de votre application php dans la mémoire partagée, de sorte que le serveur n'a pas lu beaucoup de fichiers et de ne pas analyser chaque demande. ZendOp+ sera à php5.5 par défaut, de sorte qu'il est utile de les connaître et à les utiliser.
Repères donne 9x augmentation de la performance pour de simples applications de cadre (symfony2 tests - http://www.ricardclau.com/2013/03/apc-vs-zend-optimizer-benchmarks-with-symfony2/ ).
Je l'utilise pour mon zf2 + doctrine2 + zfcUser application. Memcached est utilisé pour doctrine2, il ne donne qu'environ 5% d'augmentation des performances.
Donc, avec ZendOp+ j'ai eu 6x augmentation (0.2 -> 0,03 s) pour des pages simples et 3x augmentation (de 0,2 0,06) pour les complexes pages avec beaucoup de formes, des entités, des points de vue. Si j'utilise classmap générateur, je vais mettre à jour la réponse.
Un autre problème est d'utiliser nginx + php-fpm plutôt que apache2+module. Il économise les ressources du serveur.