IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Symfony PHP Discussion :

Optimisation du temps de chargement


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de pmithrandir
    Homme Profil pro
    Responsable d'équipe développement
    Inscrit en
    Mai 2004
    Messages
    2 419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Responsable d'équipe développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 419
    Par défaut Optimisation du temps de chargement
    Bonjour,

    Je voulais savoir si vous aviez des trucs pour optimiser les temps de chergement de symfony.
    Sur mon site, en signature, la page d'accueil met entre 2 et 5 secondes a se charger.
    Majoritairement, c'est twig qui prend une plombe, alors que je ne pense pas faire quoi que ce soit d'exceptionnel.

    La requete SQL prend 350ms, autant dire pas non plus trop de temps.

    Vous avez une idée de comment optimiser tout ca ?

    Merci,
    Pierre

  2. #2
    Membre extrêmement actif
    Avatar de dukoid
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2012
    Messages
    2 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2 100
    Par défaut
    tout regrouper dans un seul fichier CSS et un seul fichier javascript.

    optimiser les éventuelles images.(il existe même un compresseur de .png) comme optipng

  3. #3
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Juillet 2010
    Messages
    96
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 96
    Par défaut
    Sais-tu si c'est causer en backend ou frontend?

  4. #4
    Membre émérite
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    725
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juin 2011
    Messages : 725
    Par défaut
    Bonjour,

    350ms pour une requete SQL me parait beaucoup déjà, je suppose qu'il s'agit de l'ensemble du traitement (transformation DQL en SQL + execution requete SQL + transformation des résultats en Entité php) c'est à dire les informations du profiler section timeline, regarde également dans la section doctrine pour la durée effective des requetes SQL et voir si cela est optimisable.
    Même si c'est l'ensemble du traitement Doctrine, ça parait beaucoup, regarde ci-dessous dans la section apc pour vérifier ta config.


    Config

    debug à false et environnement de production evidemment


    Apc

    Il existe un script pour analyser la gestion du cache apc.
    ligne de commande pour le rendre public via un navigateur dans un répertoire "monitor"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ln -s /usr/share/doc/php-apc/apc.php /var/www/monitor
    la valeur Cache full count doit être la plus basse possible (c'est le nombre de fois oû le cache de code apc a été vidé et vu le nombre de classe à charger avec Symfony2, il peut se remplir et se vider rapidement, auxquel cas il n'y a plus de valeur ajouté)
    les paramètres sont à modifier dans /etc/php5/mods-available/apc.ini notamment le paramètre apc.shm_size
    http://www.lecentre.net/blog/archives/1311

    Un gros plus en performance c'est de configurer doctrine pour qu'il utilise le cache apc
    (transformer une requete DQL en SQL c'est un traitement lourd)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    # app/config/config.yml
    # ....
    orm:
            entity_managers:
                some_em:
                    query_cache_driver:    apc
                    metadata_cache_driver: apc

    Composer

    pour accélérer la localisation des classes PHP par l'autoloader,
    générer un tableau associatif des classes et de la localisation de leur fichier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    composer dump-autoload --optimize
    (le fichier généré se trouvera dans vendor/composer/autoload_classmap.php)



    Twig

    il existe une extension C pour optimiser le rendu des valeurs dans twig
    http://twig.sensiolabs.org/doc/insta...he-c-extension


    Apache Router

    Ne pas s'attarder, cette fonctionalité sera bientôt abandonner pour manque de performance voire contre-performance


    Cache HTTP

    http://symfony.com/fr/doc/current/book/http_cache.html
    Avec le modele d'Expiration, ça peut se faire juste avec quelques anotations sur les controller
    Avec le modele de validation par contre, cela demande un certain nombre de modif au niveau du code pour être efficace
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    public function indexAction(Request $request){
        //on récupère la date de dernière modification (en SQL, ce qui évite de charger Doctrine)
        $sql='SELECT MAX(updated_at) FROM news';
        $dateLastModification=$this->get('doctrine_default_connection')->fetchColumn();
        //création d'un objet Response
        $response = new \Symfony\Component\HttpFoundation\Response();
        $response->setLastModified(new \DateTime($dateLastModification));
        //comparaison avec la date connu par la requete envoyé par l'utilisateur, si aucune modif on renvoit simplement un code 304 not modified
        if ($response->isNotModified($request)) {
            return $response;
        }
        //si des articles ont été modifié depuis, traite la requete normalement (recupération DB + templating) et on fait :
    	$response->setContent($html);
    	return $response;	
    }
    Evidemment ça se complique lorsque l'on a des données propre à l'utilisateur en cours, dans ce cas, un chargement via Ajax des données perso reste le plus simple (voir le render avec hinclude http://symfony.com/fr/doc/current/bo...ec-hinclude-js )


    Assets

    comme dis plus haut compresser et minimiser les ressources css et js qui peuvent l'être (ça n'a pas de lien avec ton problème de lenteur sur la requete Symfony initiale, mais Symfony as tous les outils pour faire cela facilement)

  5. #5
    Membre extrêmement actif
    Avatar de dukoid
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2012
    Messages
    2 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2 100
    Par défaut
    merci arno99 pour toutes ces informations intéressantes

    une fois généré, peux tu me dire qu'est ce qu'on fait après avec le fichier : autoload_classmap.php ?

  6. #6
    Membre émérite
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    725
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juin 2011
    Messages : 725
    Par défaut
    Il n'y a rien de particulier à faire,une fois généré ce fichier sera automatiquement chargé par l'autoloader.

Discussions similaires

  1. Réponses: 1
    Dernier message: 01/11/2012, 12h27
  2. Réponses: 6
    Dernier message: 22/09/2010, 15h10
  3. Optimisation des temps de chargement
    Par Chacha35 dans le forum Windows Forms
    Réponses: 15
    Dernier message: 23/09/2009, 17h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo