|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
![]() ![]() Daniel HagnoulÉtudiant perpétuel Inscription : février 2009 Messages : 3 221 ![]() |
jQuery 1.5 disponible en version finale
Le framework JavaScript révolutionne ses méthodes asynchrones Introduction de Idelways L'équipe de développement de JQuery vient d'annoncer la disponibilité en version finale de la version 1.5. Il s'agit d'une version majeure qui apporte son lot de nouveautés, qui améliore les performances et qui, par l'introduction de la nouvelle l'API Deferred, révolutionne les méthodes asynchrones du populaire framework JavaScript. Le module Ajax a également subi une réécriture complète. Un grand nombre de lacunes du module ont été corrigées et la cohérence entre les méthodes de l'API améliorée. Autre nouveauté notable, l'introduction de $.sub() qui crée une nouvelle copie de jQuery dont les propriétés et méthodes peuvent être modifiées sans affecter l'objet jQuery original. Pour comprendre le fonctionnement et l'utilisation des nouveautés de cette version, lire ci-après, l'étude réalisée en collaboration entre danielhagnoul et gwinyam de la rubrique Développement Web de Développez.com. Pour tester cette version, il suffit d'inclure un appel au jQuery Code Server dans votre page web :Code :
<script charset="utf-8" src="http://code.jquery.com/jquery-1.5.min.js"></script> @danielhagnoul : Sur une page web, seul l'utilisateur doit décider de l'enchaînement des actions, c'est pourquoi la qualité du code asynchrone d'une bibliothèque JavaScript est primordiale pour offrir au développeur un maximum de possibilités et de performances. En provenance du vocabulaire de la programmation concurrente, nous parlerons désormais de promesses (Promises) et d'objets différés (Deferred Objets). L'API Deferred de jQuery est basée sur le concept de promesses qui fournissent une interface générique pour la réalisation d'une action asynchrone. Les promesses permettent :
@gwinyam : Au passage, l’équipe de développement en a profité pour améliorer sérieusement les performances sur les méthodes .children(), .prev() et .next(). Deferred @gwinyam : jQuery.Deferred est un objet chaînable qui permet d’enregistrer de nombreuses fonctions de type callback, les appeler et transmettre l’information de réussite ou d’échec de toute fonction, qu’elle soit synchrone ou asynchrone. Un objet Deferred est initialisé dans l’état “non-résolu”. Tout callback ajouté par .then(), .done() ou .fail() sera exécuté ultérieurement. Appeler la fonction .resolve() ou .resolveWith() passe l’objet Deferred à l’état “résolu” et exécute immédiatement les callbacks définis. L’appel à la fonction .reject() ou à .rejectWith() passe l’objet à l’état “rejeté” et exécute les callbacks correspondants. Une fois entré dans un de ces deux états, il y reste. Des fonctions de callbacks peuvent être ajoutées qui seront alors immédiatement exécutées selon si elles sont ajoutées avec .then(), .done() ou .fail(). Appeler une seconde fois les fonctions .resolve(), .resoleWith(), .reject() ou .rejectWith() n’aura aucun effet et ne provoquera donc pas une seconde exécution des fonctions callbacks liées. Dans les nombreux cas où l’API de jQuery retourne un objet Deferred, tels que $.ajax() ou $.when, vous n’aurez à utiliser que les fonctions .then(), .done() et .fail() pour ajouter des callbacks à la file du Deferred. L’API interne de jQuery se chargera elle-même d’appeler les fonctions .resolve() et .reject(), exécutant par la même les callbacks appropriés. L’objet Deferred dispose également de deux autres méthodes permettant le contrôle de son statut et qui renvoient un booléen : .isResolved() et .isRejected(). La première permet de savoir si l’objet est dans l’état “résolu”, la seconde dans l’état “rejeté”. AJAX @danielhagnoul : Le module AJAX a subi une réécriture complète, elle permet de corriger un grand nombre de lacunes qui existaient dans l'ancien système Ajax avec un niveau plus élevé de cohérence des méthodes de l'API. Le premier changement que vous verrez dans le composant AJAX est sans doute la nouvelle signature: $.ajax ([url], [options]). Cette écriture permet de récupérer une URL avec les options par défaut plus facilement. Bien sûr, ce n'est que la pointe de l'iceberg, car $.ajax() a été réécrit entièrement pour fournir de nouvelles fonctionnalités. $.ajax (ou $.get, $.post, etc) retourne maintenant un objet jXHR qui assure la cohérence de l'objet XMLHttpRequest sur toutes les plateformes et vous permet d'effectuer des tâches précédemment impossibles comme l'abandon de demandes JSONP. Les objets XHR originaux sont cachés à l'utilisateur au profit d'un nouvel objet spécifiquement jQuery. Cet objet (jXHR) fournit les propriétés et les méthodes pour définir et obtenir des en-têtes, les demandes d'annulation, l'état de la transaction, les réponses au format XML et texte. Mais contrairement à l'objet XHR original, il agit également comme une "promesse" (Promises). Une "promesse" (promises) permet d'ajouter des fonctions de rappels (callback) pour gérer le succès et l'erreur d'une transaction même après son exécution. Ajax est maintenant beaucoup plus extensible — ce qui vous permet d'attacher toutes sortes de gestionnaires de données, de filtres et de transports. $.ajax() dispose de trois moyens d'étendre ses fonctionnalités pour l'envoi, la réception et la gestion des requêtes AJAX: Prefilters : Généralisé les fonctions de rappels (callback) du type beforeSend pour gérer des options personnalisées ou modifier celles qui existent déjà. Converters : Généralisé les fonctions de rappels (callback) du type dataFilter que l'on appelle en réponse à un type de données particulier en cours de réception qui diffère de ce qui était attendu. Transports : Nouveau dans 1.5, ils sont utilisées en interne pour émettre des requêtes par $.ajax() Ces changements devraient conduire à la création de nouveaux plugins. $.sub() @danielhagnoul : $.sub() crée une nouvelle copie de jQuery dont les propriétés et méthodes peuvent être modifiées sans affecter l'objet jQuery original. Divers @danielhagnoul : Pour la compression du code, l'équipe a choisi d'abandonner “Google Closure Compiler” au profit de “UglifyJS”. Cette version corrige 83 bugs et ferme 460 tickets. Liste des navigateurs compatible avec la suite de tests, 4437 tests, de jQuery 1.5, :
Feuille de route (roadmap) :
Bibliographie
__________________
FAQ jQuery Mon cahier d’exercices sur jQuery & CoSi un message vous a aidé ou vous semble pertinent, votez pour lui ! ![]() |
|
70
|
|
|
#2 |
|
Expert Confirmé
![]() Olivier Développeur Web Inscription : août 2003 Messages : 1 837 ![]() |
Les Deferred object on l'air vraiment sympa notamment associé à when(). Ca va sacrément simplifier le code.
Au niveau de la réecriture du module Ajax , le problème de fuite mémoire à t'il été résolu ? |
|
00
|
|
|
#3 |
|
Membre Expert
![]() ![]() Mathieu ROBINDéveloppeur Web Inscription : mai 2006 Messages : 1 116 ![]() |
Les rédacteurs de la doc officielle ne sont pas trop en accord avec toi, ça ne va pas alléger le code, par contre, pour la gestion des appels/retours, il est clair et net que ça sera beaucoup plus propre et clair.
Pour ce qui est de la fuite mémoire, t'as un numéro de ticket sous la main? Je me souviens vaguement d'une histoire dans ce genre mais j'ai vu passer tellement d'infos, de bugs corrigés ces derniers temps que je suis dans le flou.
__________________
Mon blog techno et son billet hebdomadaire sur l'actualité jQuery. Et mon blog cuisine pour une personne. Le bouton ne masse pas les pieds, mais ça aide la communauté.
|
|
00
|
|
|
#4 | ||
|
Expert Confirmé
![]() Olivier Développeur Web Inscription : août 2003 Messages : 1 837 ![]() |
Citation:
Citation:
Il précise que le code n'existe plus donc que forcément le bug non plus. Reste à voir à l'usage si c'est bien le cas. |
||
|
00
|
|
|
#5 |
|
Membre Expert
![]() ![]() Mathieu ROBINDéveloppeur Web Inscription : mai 2006 Messages : 1 116 ![]() |
De toute façon, il y aura bien un autre bug un jour ou l'autre. On est bien placés pour savoir qu'il y aura toujours un nouveau bug quelque part.
Pour info, j'ai publié un tuto sur mon site à propos de .sub() : http://www.mathieurobin.com/2011/02/...te-jquery-1-5/ Je le mettrai sur Developpez ce weekend.
__________________
Mon blog techno et son billet hebdomadaire sur l'actualité jQuery. Et mon blog cuisine pour une personne. Le bouton ne masse pas les pieds, mais ça aide la communauté.
|
|
00
|
|
|
#6 |
![]() ![]() Daniel HagnoulÉtudiant perpétuel Inscription : février 2009 Messages : 3 221 ![]() |
Bonsoir
AJAX, exemple d'utilisation : http://www.developpez.net/forums/d10...s/#post5756167 Cet exemple contient une remarque importante sur les problèmes causés par : Cross-Origin Resource Sharing
__________________
FAQ jQuery Mon cahier d’exercices sur jQuery & CoSi un message vous a aidé ou vous semble pertinent, votez pour lui ! ![]() |
|
00
|
|
|
#7 |
|
Membre Expert
![]() ![]() Mathieu ROBINDéveloppeur Web Inscription : mai 2006 Messages : 1 116 ![]() |
Bonjour à tous,
J'ai publié ce matin sur mon blog un tuto à propos de Deferred : http://www.mathieurobin.com/2011/02/...te-jquery-1-5/ J'essaierai au possible de le mettre sur Developpez ce weekend en même temps que celui sur .sub().
__________________
Mon blog techno et son billet hebdomadaire sur l'actualité jQuery. Et mon blog cuisine pour une personne. Le bouton ne masse pas les pieds, mais ça aide la communauté.
|
|
00
|
|
|
#8 |
![]() ![]() Daniel HagnoulÉtudiant perpétuel Inscription : février 2009 Messages : 3 221 ![]() |
$.sub()
Crée une copie de l'objet jQuery. Les propriétés et les méthodes de la copie peuvent être modifiées sans affecter l'original. Notez bien que toutes les méthodes de la copie pointent toujours vers l'objet original. La gestion des événements se fait toujours à travers l'original, de même pour la gestion des données (data). Les requêtes Ajax et les événements se dérouleront toujours par l'intermédiaire de l'objet jQuery original. Il y a deux cas d'utilisation spécifiques pour lesquels $.sub() a été créé :
On travaille à l'intérieur d'une clôture jQuery.sub(). Voir : Clôturez jQuery ! Exemples d'utilisation de jQuery.sub()
__________________
FAQ jQuery Mon cahier d’exercices sur jQuery & CoSi un message vous a aidé ou vous semble pertinent, votez pour lui ! ![]() |
|
00
|
|
|
#9 |
|
Futur Membre du Club
![]() Nicolas Bonnici Inscription : janvier 2011 Messages : 59 ![]() |
Pour la partie sur la méthode ajax(), pensez vous que mon problème pour poster un array soit lié?
Voir ici: http://www.developpez.net/forums/d10...eys-variables/ Nico |
|
|
00
|
|
|
#10 |
|
Membre éprouvé
![]() Aurélien GéritsDéveloppeur Web Inscription : mai 2006 Messages : 1 045 ![]() |
sa à l'air vraiment bien mais les anciens scripts (surtout JSON) de la version 1.4.4 ne tourne plus chez moi.
En plus pas moyen de savoir pourquoi, y a-t-il des changements à faire lors d'une simple requête json sous cette version ? Je vais ouvrir un thread pour l'occasion ![]() Une fois le problème résolu j'adapterai alors avec les nouvelles fonctionnalités
__________________
Au petit déjeuner, je prend du PHP et au souper du jQuery.AFUP 2009 : Bien optimiser son code pour le référencement Mon projet open source de librairie PHP 5: magix cjquery |
|
00
|
|
|
#11 |
|
Membre Expert
![]() ![]() Mathieu ROBINDéveloppeur Web Inscription : mai 2006 Messages : 1 116 ![]() |
Une requête JSON? Du genre getJson? Comme dit précédemment, tout le module Ajax a été revu pour amélioration de performances, amélioration de la gestion des retours etc...
__________________
Mon blog techno et son billet hebdomadaire sur l'actualité jQuery. Et mon blog cuisine pour une personne. Le bouton ne masse pas les pieds, mais ça aide la communauté.
|
|
00
|
|
|
#12 |
|
Membre éprouvé
![]() Aurélien GéritsDéveloppeur Web Inscription : mai 2006 Messages : 1 045 ![]() |
L'erreur étais simple, jvalidate provoquais le plantage de mes requêtes mais heureusement que j'ai trouvé cette info sur le site de jQuery sinon je chercherai encore
Bon maintenant va falloir joué avec l'API ![]() Des tutos sur l'extension de la partie ajax ? concernant crossDomain, statusCode,et surtout when et then
__________________
Au petit déjeuner, je prend du PHP et au souper du jQuery.AFUP 2009 : Bien optimiser son code pour le référencement Mon projet open source de librairie PHP 5: magix cjquery |
|
00
|
|
|
#13 |
|
Membre Expert
![]() ![]() Mathieu ROBINDéveloppeur Web Inscription : mai 2006 Messages : 1 116 ![]() |
Je sais que t'as eu ta solution, c'est moi qui t'ait répondu sur ton sujet dédié
Pas de tuto sur la partie Ajax en tout cas de mon côté. Regarde du côté de la FAQ jQuery, danielHagnoul a mis une QR des plus intéressantes à ce sujet, ici : http://www.developpez.net/forums/d89...y/#post5761066
__________________
Mon blog techno et son billet hebdomadaire sur l'actualité jQuery. Et mon blog cuisine pour une personne. Le bouton ne masse pas les pieds, mais ça aide la communauté.
|
|
00
|
|
|
#14 | |||||||
|
Membre éprouvé
![]() Aurélien GéritsDéveloppeur Web Inscription : mai 2006 Messages : 1 045 ![]() |
Juste pour bien comprendre :
jqXHR c'est quoi comme paramètre exactement ? On voit sur l'exemple de danielhagnoul: Code :
![]() Pour revenir à l'exemple, l'utilisation de getJSON avec jquery 1.4 équivaut à: Code :
Code :
.Ce qui serai intéressant c'est de palier à ce problème : Citation:
__________________
Au petit déjeuner, je prend du PHP et au souper du jQuery.AFUP 2009 : Bien optimiser son code pour le référencement Mon projet open source de librairie PHP 5: magix cjquery |
|||||||
|
00
|
|
|
#15 |
![]() ![]() Daniel HagnoulÉtudiant perpétuel Inscription : février 2009 Messages : 3 221 ![]() |
__________________
FAQ jQuery Mon cahier d’exercices sur jQuery & CoSi un message vous a aidé ou vous semble pertinent, votez pour lui ! ![]() |
|
00
|
Copyright © 2000-2012 - www.developpez.com