Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour,
J'ai un problème sur mes appel de java scripts : j'ai deux secondes de latence sur certaine page.
J'ai remarquer que ce temps change en fonction de la position des appel de script dans le layout.
Est que vous avez des conseils pour résoudre ce soucis ?
Est il possible de faire certain appel directement sur la page concerné ?
$this ->headScript() ->appendFile( $this ->basePath() . '/js/jquery-1.11.2.min.js' ) ->appendFile( $this ->basePath() . '/js/jquery.easing.min.js' ) ->appendFile( $this ->basePath() . '/plugins/bootstrap/js/bootstrap.min.js' ) ->appendFile( $this ->basePath() . '/plugins/pace/pace.min.js' ) ->appendFile( $this ->basePath() . '/plugins/perfect-scrollbar/perfect-scrollbar.min.js' ) ->appendFile( $this ->basePath() . '/plugins/viewport/viewportchecker.js' ) //Dashboard ->appendFile( $this ->basePath() . '/plugins/count-to/countto.js' ) //page C et D ->appendFile( $this ->basePath() . '/plugins/datatables/js/jquery.dataTables.js' ) ->appendFile( $this ->basePath() . '/plugins/datatables/extensions/TableTools/js/dataTables.tableTools.js' ) ->appendFile( $this ->basePath() . '/plugins/datatables/extensions/Responsive/js/dataTables.responsive.min.js' ) ->appendFile( $this ->basePath() . '/plugins/datatables/extensions/Responsive/bootstrap/3/dataTables.bootstrap.js' ) ->appendFile( $this ->basePath() . '/js/epc.js' ) ->appendFile( $this ->basePath() . '/js/admin.js' ) ; if ( $language == 'fr' ){ $this ->headScript() ->appendFile( $this ->basePath() . '/plugins/datepicker/js/datepicker-FR.js' ) ->appendFile( $this ->basePath() . '/plugins/select2/select2.min.js' ) ->appendFile( $this ->basePath() . '/js/scripts-FR.js' ); } else { $this ->headScript() ->appendFile( $this ->basePath() . '/plugins/datepicker/js/datepicker.js' ) ->appendFile( $this ->basePath() . '/plugins/select2/select2.min.js' ) ->appendFile( $this ->basePath() . '/js/scripts.js' ); } $this ->headScript() ->appendFile( $this ->basePath() . '/plugins/sparkline-chart/jquery.sparkline.min.js' ) //Dashboard ->appendFile( $this ->basePath() . '/js/chart-sparkline.js' ) //Dashboard ->appendFile( $this ->basePath() . '/js/jquery.print.js' ); |
Merci d'avance de vos avis et conseil.
Dernière modification par epcgroupe (12-08-2016 17:06:38)
Hors ligne
Bonjour, personnellement j'utilise assetic qui permet de faire ce que tu as demandé, et de configurer les appels javascript, par module, de les optimiser, minifier etc..
https://github.com/widmogrod/zf2-assetic-module
Hors ligne
ok, est-ce simple a mettre en place et à utiliser ?
Hors ligne
Simple ? Non, oui dépends de tes compétences, moi j'ai galéré un petit moment a comprendre certains trucs;
Mais maintenant il est clair que je ne pourrai pas m'en passer vue l'utilité que j'en ai tiré.
Hors ligne
Bonjour,
Je vois que tu utilises exclusivement headscript, mais il y a aussi un placeholder inlineScript que tu peux utiliser en bas de ton layout, le chargement asynchrone (async) des javascript non bloquants, la minification et concaténation préalable...
Tu peux d'ailleurs ajouter certains JS que dans les views où ils sont requis.
Hors ligne
Bonjour Théocrite,
Peux-tu me présenter un exemple simple pour les deux cas.
Merci
Hors ligne
En gros il s'agit d'utiliser des placeholder spécialisés. Dans tes vues, tu peux utiliser des choses comme ça :
<?= $this ->headScript()->prependFile( $this ->basePath() . '/app.min.js' ); ?> |
Bien entendu on a les headscript, inlineScript, headStyle, en prepend ou append (pour ordonner l'ordre d'affichage).
Pour la minification, concatenation et autre, je passe personnellement par des outils en JS (gulp, grunt ou autre), ou un task runner en php (robo). Une autre solution consiste à laisser ton serveur (apache, nginx) faire la minification/concatenation à l'aide de Google Mod Pagespeed par exemple (plus consommateur).
Je ne sais pas trop quel exemples donner, ce sont juste des aides de vue, lis la doc de head|inline-script|style, mais aussi de l'aide de vue placeholder (dont ceux ci dérivent), et tiens nous au courant si on peut aider.
Hors ligne
Perso je n'utilise plus headscript, en faveur de inlineScript. C'est d'ailleurs recommandé par Google de mettre ses scripts en bas de page.
Pour des scripts ne concernant qu'une seule ou quelques pages, il faut parfois mieux les inclure à partir de la vue plutôt que du layout.
Penser aussi à utiliser des distributions par CDN (les fichiers peuvent du coup être déjà en cache dans le navigateur du client). Dans les différents CDN, il y a jsDelivr, moins utilisé que ceux de google ou cdnjs par exemple, jsDelivr a cependant un certain atout par rapport aux autres c'est qu'il permet de faire un appel à plusieurs scripts en même temps et il les minimise et concatène automatiquement avant d'envoyer un seul fichier.
Hors ligne