Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 02-10-2014 10:31:36

amelie
Membre
Lieu: Marseille
Date d'inscription: 05-02-2013
Messages: 113
Site web

Optimisation chargement de ZF2

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

 

#2 02-10-2014 11:33:04

tdutrion
Administrateur
Lieu: Dijon, Paris, Edinburgh
Date d'inscription: 23-12-2009
Messages: 614
Site web

Re: Optimisation chargement de ZF2

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

 

#3 02-10-2014 11:50:45

amelie
Membre
Lieu: Marseille
Date d'inscription: 05-02-2013
Messages: 113
Site web

Re: Optimisation chargement de ZF2

Pour mysql, je n'ai pas d'outil de debug particulier. J'ai voulu mettre FirePHP mais ça ralentit comme malade mon appli

Hors ligne

 

#4 02-10-2014 16:01:06

tdutrion
Administrateur
Lieu: Dijon, Paris, Edinburgh
Date d'inscription: 23-12-2009
Messages: 614
Site web

Re: Optimisation chargement de ZF2

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

 

#5 03-10-2014 09:05:35

amelie
Membre
Lieu: Marseille
Date d'inscription: 05-02-2013
Messages: 113
Site web

Re: Optimisation chargement de ZF2

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

 

#6 03-10-2014 11:41:15

Orkin
Administrateur
Lieu: Paris
Date d'inscription: 09-12-2011
Messages: 1261

Re: Optimisation chargement de ZF2

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

 

#7 05-10-2014 17:38:27

Bouks
Membre
Lieu: Paris
Date d'inscription: 31-08-2012
Messages: 241

Re: Optimisation chargement de ZF2

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.


22914720

Hors ligne

 

#8 06-10-2014 14:48:09

amelie
Membre
Lieu: Marseille
Date d'inscription: 05-02-2013
Messages: 113
Site web

Re: Optimisation chargement de ZF2

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é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.

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

 

#9 06-10-2014 16:59:10

Bouks
Membre
Lieu: Paris
Date d'inscription: 31-08-2012
Messages: 241

Re: Optimisation chargement de ZF2

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. smile

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.


22914720

Hors ligne

 

#10 15-10-2014 12:56:44

Splyf
Membre
Date d'inscription: 24-10-2013
Messages: 115

Re: Optimisation chargement de ZF2

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

 

#11 15-10-2014 14:53:41

Orkin
Administrateur
Lieu: Paris
Date d'inscription: 09-12-2011
Messages: 1261

Re: Optimisation chargement de ZF2

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 wink.

Tu peux aussi désactiver la vérification de version dans ZendDeveloperTools ça prend pas mal de temps.

Hors ligne

 

#12 15-10-2014 16:10:44

Splyf
Membre
Date d'inscription: 24-10-2013
Messages: 115

Re: Optimisation chargement de ZF2

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

 

#13 16-10-2014 10:18:11

Orkin
Administrateur
Lieu: Paris
Date d'inscription: 09-12-2011
Messages: 1261

Re: Optimisation chargement de ZF2

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 smile.

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

 

#14 16-10-2014 11:41:21

Splyf
Membre
Date d'inscription: 24-10-2013
Messages: 115

Re: Optimisation chargement de ZF2

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

 

#15 16-10-2014 19:07:18

Orkin
Administrateur
Lieu: Paris
Date d'inscription: 09-12-2011
Messages: 1261

Re: Optimisation chargement de ZF2

Ca dépend faut voir quelle version de PHP est utilisé ça peut jouer. Mais sinon non ^^.

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages