Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour à tous,
Je dois développer une application plutôt simple en PHP. Pour cela, j'ai opté pour ZF2 car sa modularité me plait bien. Je gère du javascript avec Angular pour les appels Ajax notamment.
Niveau config, pas top, je suis sur un EasyPHP 5.4.6 ... et j'ai pas d'autre choix, contrainte imposée pour l'outil.
Niveau CPU, Celeron 1.8Gz
Ram : 4Go
Je fais tourner cette appli sous Chrome 31.0.1650.63 pas la dernière version, contrainte imposée également.
Là ou le bat blesse c'est qu'une video doit tourner en boucle dans cette appli, et 4 requêtes Ajax simultanées qui font des selects tournent également, toutes les 2000ms. Sur mon pc de dev, elles prennent en moyenne 300-400ms pour s’exécuter.
Ce qui fait que le proc devient vite chargé.
Je cherche des solutions, j'ai essayé d'installer APC mais c'est le bordel et ça a ralenti mon appli, en plus ça touche à la config de base :s ...
Avez-vous des solutions pour optimiser le chargement de mon appli ?
Merci d'avance
Amélie
Hors ligne
Bonjour,
Je vais recommander uniquement des liens du même site pour des raisons de temps, mais l'un des articles est un review d'un autre talk que je t'invite à consulter :
http://www.masterzendframework.com/serv … figuration
http://www.masterzendframework.com/perf … autoloader
http://www.masterzendframework.com/tuto … -migration
http://www.masterzendframework.com/revi … ce-phpuk14
http://www.masterzendframework.com/zend … erformance
Utilises-tu une barre de debug ? Ou un debugger en arrière plan pour tracer et optimiser tes requetes ?
Hors ligne
Pour XDebug tu peux essayer ca : http://affinitybridge.com/blog/code-opt … cachegrind
L'idee est de logger tous les appels dans un fichier cachegrind, puis d'analyser le fichier visuellement pour trouver quelle fonction prends le plus de temps, la verifier, puis passer a la suivante.
Pour le SQL, utilises-tu doctrine ou Zend Db (ou autre) ? Utilises-tu une barre de debug type Zend Developer Toolbar : https://github.com/zendframework/ZendDeveloperTools
As-tu vu Zend Ray dans le dernier Zend Server ? Meme si tu n'as pas le droit de l'utiliser pour la dev/prod, tu peux installer la version d'essai dans une VM juste pour faire ton optimisation...
Hors ligne
Merci Théocrite pour ces infos, je vais voir ce que ça donnera de ce fait sur une VM ... par contre j'ai déjà utilisé zendDevelopperTools sur un projet mais j'avais été déçue ...
Pour la base j'utilise zend db ...
Hors ligne
Salut, ZendDevelopperTools te permet de voir pas mal d'infos notamment sur tes configs, les requêtes qui sont faites etc ... C'est pas fait pour faire du monitoring ou de la perf mais parfois ça te permet de te rendre compte que tu fais trop de requêtes SQL (que t'aurais pu optimiser en faisant une jointure par exemple etc ...)
Hors ligne
Salut Mélanie.
Effectivement ta machine n'est pas puissante et a très peu de ram. En plus si tu es dans une VM (dans un OS host) ce ne sera qu'encore plus lent.
Donc de ce côté là tu ne peux rien faire en l'état. Et surtout tu n'auras jamais les performances d'une vraie machine. Personnellement je bosse aussi sur des VMs, c'est bien plus lent que sur une machine physique mais voilà j'ai un core i7 alors ça va.
Essaie de rajouter de la RAM. Personnellement j'ai 16 Go de RAM et je pleure régulièrement (quand j'utilise photoshop en même temps). Et malheureusement je ne peux pas augmenter la quantité de RAM, merci windows 7 (home premium)... J'attribue 2Go à mes VMs. 1 Go ça peut passer. En général je leur attribue aussi 2 coeurs.
Ensuite travaille dans une VM Linux ! Si tu es dans une VM windows avec EasyPHP, c'est carrément du masochisme.
Si tu y es obligée, et avec le matériel dont tu disposes, ne travaille pas dans une VM.
Les outils de debug et de monitoring j'évite autant que possible parce que ça consomme pas mal en général. A la limite les activer que si nécessaire. Pour le cache, n'oublie pas que APC utilise la mémoire vive pour le stocker, et vu que tu n'en disposes pas énormément, tu risques de taper sur le disque dur et là tu auras effectivement une chute de performance.
amelie a écrit:
Bonjour à tous,
Là ou le bat blesse c'est qu'une video doit tourner en boucle dans cette appli, et 4 requêtes Ajax simultanées qui font des selects tournent également, toutes les 2000ms. Sur mon pc de dev, elles prennent en moyenne 300-400ms pour s’exécuter.
Amélie
Qu'une vidéo tourne en boucle ce n'est pas un souci.
Pour tes requêtes ajax, essaie de combiner les 4 en une seule. Si tu as besoin de "realtime", envisage node qui peut être moins gourmand. Et notamment si tu fais des requêtes toutes les 2 seconde sans changement "réel toutes les 2 secondes" sur le résultat de tes SELECT mais juste pour s'en assurer et changer des infos au cas où.
Pareil que orkin, voir si tu peux combiner les SELECT avec des JOIN voire des UNION. Éventuellement créer une table spécifique pour ces requêtes. Il y a bien d'autres solutions mais ça dépend de ton environnement de prod.
Hors ligne
Bouks a écrit:
Salut Mélanie.
Effectivement ta machine n'est pas puissante et a très peu de ram. En plus si tu es dans une VM (dans un OS host) ce ne sera qu'encore plus lent.
Donc de ce côté là tu ne peux rien faire en l'état. Et surtout tu n'auras jamais les performances d'une vraie machine. Personnellement je bosse aussi sur des VMs, c'est bien plus lent que sur une machine physique mais voilà j'ai un core i7 alors ça va.
Essaie de rajouter de la RAM. Personnellement j'ai 16 Go de RAM et je pleure régulièrement (quand j'utilise photoshop en même temps). Et malheureusement je ne peux pas augmenter la quantité de RAM, merci windows 7 (home premium)... J'attribue 2Go à mes VMs. 1 Go ça peut passer. En général je leur attribue aussi 2 coeurs.
Ensuite travaille dans une VM Linux ! Si tu es dans une VM windows avec EasyPHP, c'est carrément du masochisme.
Si tu y es obligée, et avec le matériel dont tu disposes, ne travaille pas dans une VM.
Les outils de debug et de monitoring j'évite autant que possible parce que ça consomme pas mal en général. A la limite les activer que si nécessaire. Pour le cache, n'oublie pas que APC utilise la mémoire vive pour le stocker, et vu que tu n'en disposes pas énormément, tu risques de taper sur le disque dur et là tu auras effectivement une chute de performance.
Heu moi c'est Amélie ^^ ...
Pour la RAM c'est impossible.
Tu ne m'as pas vraiment compris pour le moment je ne travaille pas en VM, c'est direct avec Easy PHP, est-ce que ce ne sera pas au final pire de lancer mon appli en VM, même Linux ?
Bouks a écrit:
amelie a écrit:
Bonjour à tous,
Là ou le bat blesse c'est qu'une video doit tourner en boucle dans cette appli, et 4 requêtes Ajax simultanées qui font des selects tournent également, toutes les 2000ms. Sur mon pc de dev, elles prennent en moyenne 300-400ms pour s’exécuter.
AmélieQu'une vidéo tourne en boucle ce n'est pas un souci.
Pour tes requêtes ajax, essaie de combiner les 4 en une seule. Si tu as besoin de "realtime", envisage node qui peut être moins gourmand. Et notamment si tu fais des requêtes toutes les 2 seconde sans changement "réel toutes les 2 secondes" sur le résultat de tes SELECT mais juste pour s'en assurer et changer des infos au cas où.
Pareil que orkin, voir si tu peux combiner les SELECT avec des JOIN voire des UNION. Éventuellement créer une table spécifique pour ces requêtes. Il y a bien d'autres solutions mais ça dépend de ton environnement de prod.
Pour les requêtes c'est déjà fait, toutes sont optimisées.
Pour les Ajax, le souci c'est que chaque Ajax que j'appelle a un role bien précis. Donc je ne peux pas les combiner. Ou alors ça ferait un code vraiment cra cra à mes yeux.
Dernière modification par amelie (06-10-2014 14:51:05)
Hors ligne
amelie a écrit:
Heu moi c'est Amélie ^^ ...
Pour la RAM c'est impossible.
Tu ne m'as pas vraiment compris pour le moment je ne travaille pas en VM, c'est direct avec Easy PHP, est-ce que ce ne sera pas au final pire de lancer mon appli en VM, même Linux ?
Je n'ai pas bu, promis, Mélamélie.
Oui ce sera pire, sans aucun doute.
Sinon tu peux te la jouer dual-boot...
amelie a écrit:
Pour les requêtes c'est déjà fait, toutes sont optimisées.
Pour les Ajax, le souci c'est que chaque Ajax que j'appelle a un role bien précis. Donc je ne peux pas les combiner. Ou alors ça ferait un code vraiment cra cra à mes yeux.
J'aime aussi le code propre, ça dépend comment c'est fait.
Même s'il faut autant que possible séparer les responsabilités, diminuer le nombre de requêtes http c'est toujours une bonne chose.
Hors ligne
Bonjour,
je déterre le sujet car je rencontre aussi de gros problème de perf.
Sur un serveur 1.9ghz dual core et avec 2go de ram ( Lamp sous debian ), j'ai un site qui prend entre 1 et 1.5 s a charger, d''après le zendDeveloperTools.
Si je désactive tout les module, sauf le module Application de départ, sa prend quand même dans les 350ms...je trouve sa énorme pour ce simple petit module, qui prend 150ms en local.
En local, la page s’exécute en 300ms, avec tout les modules.
Cela peut il venir de la configuration du serveur?
Voila les plus gros temps d'execution donné par ZendDev :
1. route 595.49 ms
File: Mvc/Application.php - Line: 296
Target: Zend\Mvc\Application
4. dispatch 294.39 ms
File: Controller/AbstractController.php - Line: 117
Target: CmSnyf\Controller\Front\FrontContentController
5. render 123.10 ms
File: Mvc/Application.php - Line: 352
Target: Zend\Mvc\Application
10. isAllowed 176.08 ms
File: Navigation/AbstractHelper.php - Line: 349
Target: Foundation\Navigation\View\Helper\Menu
Si je comprend bien le calcule de la route prend 600ms...j'ai pourtant viré toute les config de router et garder que l'index, sa ne change rien.
et c'est quoi cette evenement dispatcher qui me prend 300ms?
Merci d'avance pour les éventuel piste que vous pourriez m'apporter...
Hors ligne
Salut, peux-tu mettre ton fichier de config des routes ?
L'évènement dispatcher c'est ce qui va créer le contrôleur qui va gérer la requête. Donc tu peux aussi mettre ton contrôleur histoire de voir ce qu'il y a dedans .
Tu peux aussi désactiver la vérification de version dans ZendDeveloperTools ça prend pas mal de temps.
Hors ligne
Donc sa peut pas venir du serveur?
Tu veut vraiment toute la config du router générer? par ce quel je suis dépendant de plusieurs module tel que zfcrbac, zfcuser, zfcuseradmin et sa fait énorme x)
de toute facons j'ai essayer de désactivé toute ma configuration sur les routes, sa ne change rien.
de plus,
4. dispatch 294.39 ms
File: Controller/AbstractController.php - Line: 117
Target: CmSnyf\Controller\Front\FrontContentController
vient de la fonction dispatch de la classe mere abstactController, pas de la mienne - j’obtiens d’ailleurs le même résultat en aillant désactivé mes routes et donc sans passé par ce controller - yé suis perdu.
Mais vous ne trouvez pas sa énorme que le module Application seul mette déjà 300ms voir plus?
Donc je te met Toute la config du router générer? par exemple celle qu'on trouve en cache?
Hors ligne
Non juste ton fichier de conf avec tes routes à toi, les modules de github en général ils sont bien optimisés.
Et ton contrôleur met peut être du temps parce que tu as beaucoup de dépendances par exemple.
ZfcRbac ne contient pas de routes normalement .
C'est long c'est sûr, ça peut venir du serveur mais j'ai fait tourné une appli ZF2 sur un vieux serveur moins puissant que le tient et ça allait beaucoup plus vite. Tu peux mettre apc pour améliorer les perfs aussi.
Hors ligne
non pas zfcrbac mais zfcUserAdmin oui ^^ (je compte l'abandonné plus tard mais pour le moment sa dépanne bien)
Il me faut passé a autre chose pour aujourd'hui donc je te collerai sa se soir ou demain.
Mais dans tout les cas j'ai quand même un pb coté serveur, même si je peut quand même optimisé mon le code:
En local ,on projet passe a 170ms en moyenne, une foi xdebug désactivé.
Sur le serveur, avec le zfSkeletonApp de base fourni par Zend eux même sa met 350ms sur le serveur, contre 60ms en local oO
Avec tout les module tel que ceux de doctrine ou ceux de zf2-common, simplement en les ajoutant et sans les utilisé, il passe 450ms , contre une 100aine a peine en local... et c'est toujours la route qui prend le plus de temps.
C'est pas normal quand même si?
Hors ligne
Ca dépend faut voir quelle version de PHP est utilisé ça peut jouer. Mais sinon non ^^.
Hors ligne