Comment savoir si un thème utilise Jquery.
J'ai des scripts complémentaires à mettre en œuvre.
Pour les thèmes qui n'utilisent pas Jquery (Dark....), je pense livrer une solution maison limitée mais légère < 10K.
Sans avoir besoin des 120K de Jquery.
Pour les thèmes qui utilisent déjà jquery les 120K sont déjà descendu, je souhaite ne livrer que la partie
complémentaire qui gèrent mes animations.
Mon besoins c'est de savoir qui utilise ou pas Jquery.
Hors ligne
Cette réponse est pas mal et plus complète que la moyenne :
http://www.codeproject.com/Tips/263426/ … d-vs-ready
Hors ligne
120ko ? jquery c'est 31ko minifié et gzippé.
il y aurait une solution pour améliorer encore: utiliser les cdn google/ms/... pour charger jquery
http://docs.jquery.com/Downloading_jQue … ted_jQuery
L'intérêt c'est si un client a en cache le jquery de http://ajax.googleapis.com/ajax/libs/jq … ery.min.js et tu utilises ce même jquery, il n'est pas retéléchargé. Malheureusement je ne crois pas que ca fonctionne avec combine_script ...
Hors ligne
Si ! Je viens de tester sur ma galerie et ça marche nickel.
Par contre pas avec ton adresse, faut un fichier js je pense.
Voilà le code utilisé :
class machin {
function test_jQuery()
{
global $template;
$template->func_combine_script( array(
'id'=> 'jquery',
'load'=> 'header',
//'path'=> 'themes/default/js/jquery.min.js',
'path'=> 'http://code.jquery.com/jquery-latest.min.js',
), $smarty);
}
}
add_event_handler('loc_begin_page_header', array(machin, 'test_jQuery'),1,2);
Une autre fonction dans le même esprit avec inclusion du test sus-cité et ouala.
Et je confirme : 32ko, Gzipped et cached
Dernière modification par websigns (2012-03-20 23:29:15)
Hors ligne
120K j'ai un peu exagéré.
Mais sans Gzip on reste à 93K.
Avec mon hébergeur c'est galère pour faire du Gzip.
Mon besoin est juste de savoir si un thème à déjà chargé Jquery.
La fonction combine pourrait peut-être fournir un tableau des JS/CSS chargés.
Hors ligne
Pour le Gzip je ne suis pas sûr du comment mais une chose est sûr mon hébergeur ne gère pas le MOD_deflat, donc si je ne me trompe si mon jQuery est Gzippé c'est depuis le site distant où il se trouve.
Quoi qu'il en soit utilise la fonction que je t'ai donné comme ça :
class machin {
function test_jQuery()
{
...
}
function ta_fonction()
{
global $template;
$template->func_combine_script( array(
'id'=> 'jquery',
'load'=> 'header',
'path'=> 'chemin/vers/ton/fichier.js',
), $smarty);
}
}
add_event_handler('loc_begin_page_header', array(machin, 'test_jQuery'),1,2);
add_event_handler('loc_begin_page_header', array(machin, 'ta_fonction'),41,2);
Cette partie "1,2)" permet de charger en premier et la fonction func_combine_script ne charge que si ce n'est pas déjà le cas.
Pour moi ça marche en tout cas, je charge un petit plugin perso comme ça.
Dernière modification par websigns (2012-03-21 20:33:43)
Hors ligne
gbo a écrit:
Mais sans Gzip on reste à 93K.
Avec mon hébergeur c'est galère pour faire du Gzip.
du coup ce serait encore plus intéressant d'utiliser un CDN.
Hors ligne
websigns a écrit:
Si ! Je viens de tester sur ma galerie et ça marche nickel.
Par contre pas avec ton adresse, faut un fichier js je pense.
Voilà le code utilisé :
class machin {
function test_jQuery()
{
global $template;
$template->func_combine_script( array(
'id'=> 'jquery',
'load'=> 'header',
//'path'=> 'themes/default/js/jquery.min.js',
'path'=> 'http://code.jquery.com/jquery-latest.min.js',
), $smarty);
}
}
add_event_handler('loc_begin_page_header', array(machin, 'test_jQuery'),1,2);
Une autre fonction dans le même esprit avec inclusion du test sus-cité et ouala.
Et je confirme : 32ko, Gzipped et cached
je ne suis pas sur de comprendre ce que fait ce code: il récupére jquery depuis une adresse distante pour l'inclure dans le script combiné de piwigo ? dans ce cas on perd l'intérêt du CDN.
En fait il faudrait pouvoir inclure jquery avec une balise script classique et pouvoir dire à combine_script que jquery est chargé pour qu'il ne le charge pas une 2ème fois.
Hors ligne
Que nenni il y a erreur :[/url]http://docs.jquery.com/Downloading_jQuery[/url]
L'adresse que j'utilise est un hébergement CDN.
Et un hébergement CDN sert à améliorer le chargement d'un fichier. Une fois fait on le manipule bien comme on veut.
L’intérêt de le combiner avec d'autres scripts va se situer plutôt au niveau du rechargement via le cache smartie et/ou celui du navigateur. Enfin si j'ai bien compris ^^
Quant à combine_script, cette fonction sert également à vérifier si jQuery est déjà chargé.
Hors ligne
websigns a écrit:
Que nenni il y a erreur :[/url]http://docs.jquery.com/Downloading_jQuery[/url]
L'adresse que j'utilise est un hébergement CDN.
oui, il y a le choix:
http://code.jquery.com/jquery-latest.min.js
http://ajax.googleapis.com/ajax/libs/jq … ery.min.js
http://ajax.aspnetcdn.com/ajax/jQuery/j … 7.1.min.js
mais ce n'est pas le problème
websigns a écrit:
Et un hébergement CDN sert à améliorer le chargement d'un fichier. Une fois fait on le manipule bien comme on veut.
L’intérêt de le combiner avec d'autres scripts va se situer plutôt au niveau du rechargement via le cache smartie et/ou celui du navigateur. Enfin si j'ai bien compris ^^
non, le problème c'est que là c'est ton serveur qui récupère jquery depuis le cdn, pour le combiner avec la méthode piwigo et le renvoyer au client. Donc avec cette méthode, du point de vue du client ca ne change rien.
Pour y gagner quelque chose il faut que ce soit le client qui fasse la requête au cdn, directement.
websigns a écrit:
Quant à combine_script, cette fonction sert également à vérifier si jQuery est déjà chargé.
comment ? si je charge jquery dans une balise script, combine_script va le détecter ? il faudrait essayer ...
Hors ligne
Okkk.
Je viens de mieux comprendre se que tu veux dire, je n'avais pas poussé la réflexion jusqu’au bout. Effectivement on a tout les avantages sauf celui du CDN par ce système.
On peut se demander si ce n'est pas aussi bien en terme de résultat qu'un CDN ceci dit.
Mais néanmoins c'est très bien vu et j'ai peut être une solution :
en remplaçant
$template->func_combine_script( array( ... );
par
$template->append('head_elements', ' <script type="text/javascript"> if (typeof jQuery == "undefined"){ var script = document.createElement("script"); script.type = "text/javascript"; script.src = "http://code.jquery.com/jquery-latest.min.js"; document.getElementsByTagName("head")[0].appendChild(script); }; </script>
Mais le top serait de le faire en PHP. En extrayant de func_combine_script() la partie d'analyse peut être.
A suivre ...
Hors ligne
ha oui c'est vrais tiens. J'avais juste vérifié sa présence. Au temps pour moi.
Ce qui clôt la question à priori.
Hors ligne
rvelices a écrit:
si on appele combine_script avec une path commencant par http:// , ce js ne sera pas combiné avec les autres ...
ca ne fonctionne pas:
Warning: filemtime(): stat failed for ./http//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js in /galerie/include/template.class.php on line 1240 Warning: file_get_contents(./http//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js): failed to open stream: No such file or directory in /galerie/include/template.class.php on line 1288
Hors ligne
saimon a écrit:
ca ne fonctionne pas:
Warning: filemtime(): stat failed for ./http//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js in /galerie/include/template.class.php on line 1240 Warning: file_get_contents(./http//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js): failed to open stream: No such file or directory in /galerie/include/template.class.php on line 1288
si tu mets l'url correctement ca fonctionne (il te manque : apres http)
Hors ligne