Changements YUI et Loader 3.4.0 pour les

1 juillet 2011 à 06:34 par Dav verre | En développement , performance | 10 commentaires

En 3.4.0, nous avons commencé le processus de déplacer une partie de la logique Loader autour, non seulement pour le rendre plus performant, mais pour le rendre plus robuste et plus facile à utiliser dans d'autres endroits (comme sur le serveur). Nous déploiera plus de changements dans les futures révisions, mais je voulais prendre un certain temps et expliquer ce qui a changé, pourquoi il a été changé et comment elle peut influer développeurs. Pour la majorité des cas d'utilisation, les développeurs remarquerez rien de différent, sauf que les choses sont un peu plus vite et de leurs téléchargements exigence sont un peu plus petit.

Fichier des semences

La première chose que je veux aborder est le fichier de semences YUI. Dans les versions précédentes de YUI, notre fichier de graines était minuscule et ne contient pas de chargeur ou un de ses méta-données. Nous avons constaté que dans le cas d'utilisation de 90% ce n'était pas aussi performant que nous l'espérions. L'utilisateur normal inclut le fichier semences demande ensuite de leurs modules, ce qui signifie que la graine doit d'abord chercher Loader, puis de calculer l'ensemble de ses dépendances, puis aller chercher eux tous. Nous avons maintenant le sentiment que cette demande supplémentaire http est la mauvaise chose à faire, alors le fichier de nouvelles semences standard contient Loader et ses méta-données. Oui, cela fera la demande initiale un peu plus grand, mais il fera le chargement des modules qui beaucoup plus rapide puisque l'ensemble de ses méta-données exigences sont maintenant déjà sur la page.

Si vous souhaitez utiliser l'ancienne méthode, vous pouvez simplement inclure le fichier semences de base au lieu-yui. Il contient tout ce qui est nécessaire pour faire fonctionner en YUI mode autonome, plus il contient de la capacité à aller chercher Loader sur demande. Si vous avez besoin des dépendances plus fines, même, nous avons créé un fichier semences yui-core qui est exactement ce que l'ancienne base de Yui-graine a été.

     / Construire / yui / yui-min.js / / semences YUI + Chargeur
     / Construire / yui-base / yui-base-min.js / / semences Vieux YUI avec chargeur chercher un soutien
     / Construire / yui-core / yui-core-min.js / / Vieux-yui base sans chercher le soutien Loader

Il convient de noter que ces URL sont différentes de la URL précédente. Toute personne qui a utilisé l' yui/yui-base.js fichiers ont besoin d'eux pour rejointoyer yui-core/yui-core.js . Si vous voulez l'ancien mode de chargement de la graine et aller chercher Loader, vous devez utiliser la yui-base/yui-base.js fichier semences.

Le raisonnement d'autres de ce changement est notre feuille de route pour faire fonctionner YUI dans autant d'endroits que possible. Le fichier de vieilles semences ainsi Loader dans une requête de serveur combo unique est bel et bon, si vous avez un serveur combo disponibles dans votre application. Mais qu'en est-il sur le serveur? Ou dans une application hors ligne sur un appareil mobile? Ces endroits ont besoin de minimiser l'accès aux fichiers tout en obtenant les informations dont ils ont besoin.

Rollups

La prochaine chose que nous avons changé cumuls a été de retirer du système et défaillants allowRollup à faux dans la config Loader. Qu'est-ce que cela signifie pour vous? Eh bien, j'espère rien du tout. Avant d'expliquer l'impact de ce changement, laissez-moi vous expliquer le raisonnement derrière elle. La raison principale est, encore une fois, la performance, avec la livraison de charge utile. Prenez cet exemple:

      Module A: nécessite événement A, B événementiel
      Module B: exige l'événement-c,-d évènement

Lorsque vous demandez à la fois, la logique de cumul avant 3.4.0 utilisés pour déterminer si vous devriez obtenir le correctif cumulatif événement. Qui en réalité signifie que vous receviez:

      event.a, event.b, event.c, event.d, event.e, event.f, event.g, event.h

Vous fini par avoir plus sur votre page que vous avez réellement besoin. En désactivant le support correctif cumulatif, YUI va maintenant demander seulement ce que vous avez réellement demandé et rien de plus. Dans la plupart des cas, vous ne verrez pas cela. Développeurs de modules, peut fonctionner dans une situation où les choses qui ont fonctionné dans le passé peut ne pas fonctionner aujourd'hui. La raison en est qu'ils ont effectivement travaillé par accident avant. Permettez-moi d'utiliser un exemple concret: Dial.

En 3.3.0, Dial nécessaires à ceci:

     exige: [
         «Widget»,
         'Dd-glisser »,
         «Substitut»,
         'Événement MouseEnter », 
         «Transition»,
         «Intl»
     ]

Pour la plupart, Dial a travaillé en 3.4.0, le support du clavier n'a toutefois pas de travail. Après avoir fait quelques recherches simples, il s'est avéré que le support était en fait la demande de cumul de l'ensemble de cumul de l'événement (ce qui inclut l'événement-déplacer et l'événement-clé). Sans la logique de cumul tirant dans tous les cas, Dial 3.4.0 n'avait plus toutes ses exigences. Rendre les normes de Dial plus précis et de définir l'ensemble de ses dépendances réelles fait correctement, il fonctionne comme prévu.

     exige: [
         «Widget»,
         'Dd-glisser »,
         «Substitut»,
         'Événement MouseEnter »,
         «Événement-déplacer ',
         «Événement-clé»,
         «Transition»,
         «Intl»
     ]

Pour les développeurs du module, il est recommandé de s'assurer que votre module nécessite exactement ce dont il a besoin pour fonctionner. Ne présumez pas que d'une exigence module amont est là. Il est toujours préférable de s'assurer que vous demandez ce que vous avez besoin.

Cela signifie également que les exigences du module sont plus bien définie. Par exemple, datatype-date a le soutien international construit po Dans les versions précédentes, vous auraient accès à l'Aéroport international comme ceci:

     Y.Intl.getAvailableLangs («type de données à jour ');

Mais puisque ce module n'a pas réellement une langue (le datatype-date-format module ne), ce sera l'échec. Il a besoin d'être plus précis et réellement demander des langues pour le module correct:

     Y.Intl.getAvailableLangs ('datatype-date-format');

Construire Explosion de fichiers et de suppression sous-module

Après avoir effectué ce changement, le changement suivant nous avons fait était exploser le répertoire de construction et de sous-modules retirer du système de base. La logique sous-module n'a pas été supprimée, que notre méta-données de structure a été modifiée. Cela fournira la compatibilité ascendante pour les installations actuelles.

Sous-modules dans le système de base causé quelques problèmes que nous devions résoudre. La première raison est la performance. Chaque chargeur temps nécessaire pour calculer les dépendances, dont il avait besoin de marcher la structure sous-module / plugin de chaque module. Faire des milliers de fois a été mal notre performance pendant le chargeur de calculer la routine. En supprimant le support des sous-modules dans le système de base nous avons sauvé des dizaines de milliers d'appels de fonction et des itérations.

Loader a été modifiée de sorte que si une use des biens dans un module de méta-données définies plusieurs modules, il va utiliser les modules au lieu d'essayer de charger le module d'origine. Donc, si vous avez demandé " dd "Loader serait inspecter" dd "l 'méta-données et de voir une propriété à usage qu'il ressemble à ceci:

     "Dd-DDM-base, dd-DDM, DD-DDM-goutte, dd-glisser, dd-proxy, dd-contraindre, dd-goutte, dd-scroll, dd-drop-plugin"

Dans le fichier de base de graines de YUI, nous sommes aussi, y compris ce que nous appelons des cumuls virtuel ou alias. Ces définitions de modules sont exactement les mêmes que les méta-données dans Loader. De cette façon, vous pouvez inclure tous les fichiers exportés à partir de notre dépendance Configurator et toujours utiliser ces cumuls, sans avoir présents Loader sur la page. Dans les versions futures, nous serons d'affiner cette approche encore plus.

Après ce changement, nous avons alors précédé d'exploser nos dossiers de construction. Dans les versions précédentes, les sous-modules déterminé le chemin du fichier de modules. Par exemple:

     "Dd": {
         "Sous-modules": {
             "Jj-glisser": 
             / / Module de données
         }
     }

En 3.3.0 quand vous avez construit "dd", la structure du fichier ressemble à ça:

     / Construire / dd / dd-drag.js
     / Construire / dd / dd-ddm.js
     / Construire / dd / dd-drop.js

Avec le système de construction a explosé en 3.4.0, "dd" l 'construire des fichiers maintenant ressembler à ceci:

     / Construire / jj-glisser / dd-drag.js
     / Construire / jj-DDM / dd-ddm.js
     / Construire / jj-goutte / jj-drop.js

Cela nous a permis d'enlever le «chemin» de tous les biens de notre module de méta-données, ainsi, économiser et de réduire la taille du fichier de la logique nécessaire pour assembler les chemins des modules url.

Si vous incluez une URL combo pré-configurés, vous devez recalculer votre URL lorsque vous mettez à niveau.

L'inconvénient de ce changement est que si vous incluez un URL combo de modules pour "prep" de votre page, vous pouvez non seulement changer le numéro de version et mise à niveau. Vous aurez besoin de revenir sur la dépendance Configurator et générer une nouvelle URL avec la structure nouveau module.

L'avenir

Je continuerai à affiner, refactoriser et optimiser chaque aspect de notre stratégie de Loader et des semences. Ces premières étapes ont été nécessaires pour l'aide dans les changements futurs qui doivent être faites non seulement pour notre côté client de stratégie, mais aussi notre serveur, en ligne de commande et les stratégies de périphériques mobiles.

Partager et prolonger: Conservez ce lien avec del.icio.us | Digg it! | reddit!

10 Commentaires »

Flux RSS pour les commentaires sur ce post. TrackBack URI

  1. Je ne comprends pas bien ce passage:

    "Loader a été modifiée de sorte que si une propriété utiliser dans un module de méta-données définies plusieurs modules, il va utiliser les modules au lieu d'essayer de charger le module d'origine. Donc, si vous avez demandé "dd" Loader allait inspecter "dd" l 'méta-données et de voir une propriété à usage qu'il ressemble à ceci:

    "Dd-DDM-base, dd-DDM, DD-DDM-goutte, dd-glisser, dd-proxy, dd-contraindre, dd-goutte, dd-scroll, dd-drop-plugin"
    "
    Pouvez-vous expliquer ce disant en revanche ce qui se passe dans la version actuelle?

    Thx
    / Paolo

    Commentaire par Paolo Nesti - Juillet 4, 2011 #

  2. @ Paolo

    Dans les versions antérieures à 3.4.0 PR2, nous avons créé des fichiers de cumul statique. Donc dans le cas de DD, il y avait un fichier appelé:

    / Construire / jj / dd.js

    Et que contenait l'ensemble des modules liés JJ.

    Commentaire par Dav Verre - Juillet 4, 2011 #

  3. Je suis content que vous les gars font cela. J'ai toujours évité ups rouler comme la peste. Cependant, puisque certaines des classes de base semblent être retiré maintenant, par exemple, noeud-noeud de base devient-core, ce serait une bonne chose pour obtenir une liste de toutes les classes qui ont été dépréciées de cette façon.

    Commentaire par Marc - Juillet 5, 2011 #

  4. @ Marc

    Lorsque 3.4.0 est sorti, il devrait y avoir beaucoup de documentation sur les modules modifiés.

    Commentaire par Dav Verre - Juillet 5, 2011 #

  5. Ce commentaire n'est pas à ce poste en particulier, mais je trouve encore la philosophie de YUI contre ma croyance en la bonne conception, "les choses simples doivent être simples, les choses complexes devrait être possible".

    Pour que je me suis trouvé encore et encore la lecture de la documentation sur les modules les plus fondamentales comme noeud & événement, après des mois d'YUI3.

    Le nouvel App / MVC modules semblent parfait pour mon application au début, puis j'ai commencé à écrire la logique beaucoup personnalisée pour contourner le comportement par défaut à cause de surcharge de mémoire énorme. Lorsque je jette Module & View complètement, je me suis retrouvé avec une logique beaucoup plus courte et compacte, mais plus rapidement!

    Un autre cas est le menu contextuel, ce que je n'ai pas trouvé dans YUI3. Certains experts suggèrent YUI créant une nouvelle catégorie repose sur Overlay puis ajouter diverses propriétés personnalisées et des méthodes de rendu ... J'ai juste besoin d'un menu contextuel et finalement je me suis fait avec moins de 10 lignes de premières JS + CSS.

    Je ne doute jamais YUI3 peut supporter des situations complexes, mais que dire des cas très simples, comme une application Bonjour tout le monde? Avec C, vous appelez printf ("Bonjour le monde!") Dans le main (). Pour Java, vous devez d'abord définir une classe HelloWorld, puis une méthode public static void main (), et enfin, appeler System.out.println ("Bonjour tout le monde!") ... OMG, quiconque se rend compte des connaissances préalables combien il faut d'écrire quelque chose d'aussi simple que cela? C'est exactement ce que je ressens au sujet de YUI!

    Que ce soit, je ne pense pas YUI3 deviendra jamais simple, mais j'espère toujours que vous les gars, il peut être aussi simple que possible.

    Commentaire par Wayne - Juillet 16, 2011 #

  6. @ Wayne: Vous n'avez pas besoin YUI d'écrire une application Bonjour tout le monde. Il semble que vous n'a pas non plus besoin de YUI pour construire l'application que vous avez essayé de construire l'aide du modèle et des composants View.

    Ce n'est pas grave!

    YUI ne va pas être l'outil parfait pour chaque tâche. Si vous pouvez écrire dix lignes de JavaScript et accomplir ce que vous devez faire, puis par tous les moyens, le faire au lieu d'utiliser un widget qui fait beaucoup plus que vous avez besoin.

    Cela ne signifie pas que le widget est inutile ou inutilement complexes. Cela signifie qu'il n'était pas le bon outil pour le travail que tu voulais faire.

    Nous voulons absolument faire YUI aussi simple que pratique, mais il ya un équilibre à atteindre entre la simplicité et l'utilité. Le code le plus simple n'est pas de code du tout, mais si nous sommes allés aussi loin, nous avons également n'apporterait pas de valeur. Nous avons donc viser à un équilibre: nous essayons de faire des choses complexes simples, mais sans les simplifier au point où nos abstractions ne sont pas utiles.

    Je suis d'accord avec votre philosophie que les choses simples doivent être les choses simples et complexes devraient être possibles. Et je crois que c'est exactement ce que YUI ne: elle rend les choses complexes possible sans faire les choses simples pas moins simple. La beauté de l'architecture modulaire de YUI est que si vous trouvez qu'il est plus simple de rouler votre propre code au lieu d'utiliser un widget en particulier, vous n'êtes pas obligé de charger ce code du widget. Et les changements à venir dans le Loader 3.4.0 rendre le tout encore plus simple.

    Commentaire par Ryan Grove - 20 Juillet 2011 #

  7. [...] Loader a eu une mise à jour importante pour les 3.4.0. Si vous faites spécifications de charge manuelle via l'utilisation ("*") ou utiliser des configurations sous-module, nous serions très reconnaissants que vous essayez votre code avec le nouveau chargeur pour être sûr que nous sommes bien traiter tous les cas d'utilisation. Pour plus d'informations sur les changements Loader dans ce communiqué, veuillez consulter le blog décrivant les changements 3.4.0 Loader. [...]

    Pingback par Communiqué de YUI 3.4.0 Aperçu 3 est maintenant disponible sur CDN »Blog interface utilisateur Yahoo! (YUIBlog) - Juillet 28, 2011 #

  8. @ Ryan,

    Je viens de voir votre commentaire. J'ai été le maintien d'un vieux projet écrit sur YUI 3.1 avec 1000s des lignes de code, et je voulais juste ajouter un menu contextuel. Mais je n'ai pas réussi à trouver un module réalisables / méthode pour le faire rapidement et facilement. Prévoyant cette fonction pourrait exiger de minuscules 100s de lignes de code orienté YUI, j'ai utilisé JS premières place.

    BTW: il ya eu quelques problèmes lors du passage à 3,2, mais l'ensemble du système a cessé de fonctionner lors de la commutation à 3,3. Donc je ne pense pas qu'il est nécessaire d'essayer de 3,4 pour ce projet.

    Commentaire par Wayne - 18 août 2011 #

  9. [...] Le nombre d'itérations exécutées par le chargeur dans le calcul des dépendances. Vous pouvez consulter le blog sur les changements Loader 3.4.0 pour plus de [...]

    Pingback par annonçant YUI 3.4.0 et la nouvelle YUILibrary.com »Blog interface utilisateur Yahoo! (YUIBlog) - 18 août 2011 #

  10. Tous ces changements pour le chargeur semble très prometteur et l'élimination des sous-modules calculs est grande. Ce fut probablement la raison pour laquelle nous avons été voir des tonnes de fonction appelle être faite dans IE lorsque vous faites les calculs de dépendance et IE serait sorta s'étouffer pendant quelques secondes.

    Avec les modifications apportées à la chargeuse et les méta-données - comment est le chargeur yui côté serveur affecté. Est-ce que mis à jour pour une prise en compte de cette évolution. Parce que c'est ce que nous avons fini par utiliser.

    Commentaire par Ali D - 19 août 2011 #

Laisser un commentaire

Note: Les commentaires sont modérés pour les débutants. Spam supprimé.

XHTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Hébergé par Yahoo!

Copyright © 2006-2011 Yahoo! Tous droits réservés. Politique de confidentialité - Conditions d'utilisation

Propulsé par WordPress sur Yahoo! Web Hosting .