La branche 3.x du framework Ruby on Rails vient d'avoir une mise à jour majeure, centrée sur l'amélioration globale des performances et une meilleure écriture et organisation du code au sein des applications Web.
Les nouveautés les plus notables de ce cadre logiciel de développement Web ont été passées en revue sur l'annonce de la Release Candidate (lire ci-devant), mais en voici le rappel des plus importantes.
Côté architectural, Rails3.1 est essentiellement marqué par l'introduction du Assets Pipeline.
Ce middleware d'ActionPack hisse le JavaScript et CSS au même rang que le code Ruby côté serveur, en plaçant ces fichiers au coeur de l'application où ils peuvent être codés avec des alternatives jugées plus évoluées : CoffeeScript et SCSS, les nouvelles dépendances du framework.
Grâce à Sprockets 2.0 et Uglifier, les applications délivrent un seul fichier de script et un seul fichier CSS compressés, minifiés et obfusqués, dont le téléchargement peut débuter avant même la fin de la génération de la page dynamique, grâce au support de l'HTTP Streaming.
jQuery est naturellement le nouveau framework par défaut. Il n'est toutefois plus inclus par défaut, mais récupéré dans sa dernière version grâce à une librairie (ruby gem) indépendante.
Depuis l'annonce de la Release Candidate, l'équipe du framework, à qui ça arrive de suivre les tendances en plus de vouloir en créer, décide que le JSON en plein essor sera désormais le format alternatif pour toutes les requêtes (sur les scaffolds notamment), en remplacement du XML en perte de vitesse.
Ruby on Rails est utilisé notamment par Diaspora*, le réseau social libre.
Pour installer Rails 3.1 via Ruby Gems et RVM :
Code : | Sélectionner tout |
1 2 3 4 | rvm @rails31_project_name --create --rvmrc gem install rails rails new project_name |
Pour la liste complète des nouveautés, consulter les Release Notes
Source : Blog officiel
Et vous ?
Maintenant que cette version est sortie en version finale, avez-vous passé, ou envisagez-vous d'y passer vos applications en production ?
Que pensez-vous de ces nouveautés et de la direction dans laquelle s'engage le framework ?
Lancement de Rails 3.1 en Release Candidate
Durant la RailsConf 2011, Asset Pipeline et HTTP Streaming en action
Mise à jour du 23/05/2011 par Idelways
La version 3.1 de Ruby on Rails est disponible en Release Candidate, une mouture riche en nouveautés, présentées en détail par plusieurs intervenants lors de la conférence annuelle RailsConf dédiée au framework, organisée cette année à Baltimore du 16 au 19 mai.
Cette version élève notamment la partie « front-end » JavaScript et CSS des applications (jusque-là cantonné au dossier public) au même rang que le code Ruby des contrôleurs, vues, modèles et assistants en plaçant ces sources dans le sous-dossier Assets du répertoire « app ».
Le nouveau module Asset Pipeline (propulsé par la bibliothèque Sprockets 2.0) prône une meilleure organisation et répartition des sources JavaScript et CSS, tout en délivrant au navigateur un fichier unique permettant d’économiser le nombre de requêtes serveur et le temps de latence qui en résulte.
Uglifier, une autre dépendance par défaut du Framework permet de compresser, minifier et obfusquer ce fichier en production.
Sprockets fonctionne aussi bien en JavaScript/CSS traditionnels qu'en CoffeeScript/SCSS, introduits dans cette version comme la « nouvelle mode » de coder en JavaScript et CSS par les développeurs Rails (pour plus de détails, lire ci-devant)
Une surcouche eRB peut être rajoutée. Il est donc tout à fait possible de créer un fichier clients.css.scss.erb, permettant d'exécuter du code Ruby dynamique dans un fichier SCSS qui sera à son tour converti en CSS et combiné aux autres fichiers avant d’être mis en cache. Le tout d'une manière transparente pour le développeur.
Il reste toutefois possible de combiner au sein d'une même application des fichiers JavaScript et CoffeeScript. Il est donc inutile par exemple de convertir jQuery (par ailleurs framework JS par défaut de Rails depuis cette version) en CoffeeScript.
L'autre nouveauté phare de Rails 3.1 est l'arrivée du Streaming HTTP, une fonctionnalité destinée à accélérer le chargement des pages en délivrant progressivement le contenu d'une réponse HTTP au fur et à mesure que son contenu dynamique est généré.
Cette fonctionnalité peut être activée par contrôleur et limitée à une ou plusieurs actions.
Son activation implique toutefois l'inversement de l'ordre d'évaluation des templates. Le Layout des pages est exécuté en premier pour permettre au navigateur de commencer dès que possible le chargement des dépendances statiques appelés habituellement dans le head.
Par conséquent, les contenus ajoutés au Layout à partir des vues via des appels à Content_for ne sont pas évalués à temps.
Pour y pallier, « Provide », une méthode alternative à content_for au fonctionnement identique, permet de forcer l'exécution des vues jusqu'au dernier appel à Provide, avant de passer à l'évaluation du Layout.
De nombreuses autres améliorations font leur apparition dans toutes les parties du framework, parmi elles :
Du côté d'ActiveRecord, has_secure_password permet de hacher ses mots de passe (avec grain de sel) très facilement avec l'algorithme robuste et antiforcebrute BCrypt.
Ruby on Rails 3.1 introduit par ailleurs Identity Map, une nouveauté encore instable, qui réutilise le même objet alloué en mémoire à la création d'un enregistrement, lorsque le même enregistrement est sollicité ailleurs dans le code, économisant mémoire et requêtes SQL.
Les migrations intelligentes réversibles (sans la partie Down) font aussi leur apparition, en compagnie d'une gestion plus optimisée (collective) des modifications sur le schéma des tables et l'ajout par défaut d'index aux clés étrangères simples ou polymorphiques.
Plus de détails sur cette version sur la Keynote de David Heinemeier Hansson durant la Rails Conf 2011.
[ame="http://www.youtube.com/watch?v=cGdCI2HhfAU"]RaisConf 2011[/ame]
Rails 3.1 RC peut être installée via RubyGems avec la commande : gem install rails --pre.
La liste complète et très détaillée des nouveautés de cette version est maintenue par Ryan Bates (de Railscasts) sur cette page
Source : site officiel de Rails
Et vous ?
Que pensez-vous des nouveautés de cette version ?
Ruby on Rails 3.1 adopte jQuery, SaSS et le compilateur JavaScript CoffeeScript
Comme dépendance par défaut, le streaming HTTP arrive sur le framework
Après quelques mois d'accalmie depuis la sortie de la version 3.0 du framework de développement Web Ruby on Rails, la fièvre des nouvelles versions (et des polémiques) regagne la communauté à la suite de l'annonce de nouveaux détails sur la prochaine version et l’intégration par défaut de nouvelles dépendances.
Si l'adoption du framework jQuery en remplacement du couple Prototype/Script.aculo.us fait (presque) l'unanimité parmi les développeurs qui suivent l'évolution du Framework, on ne peut en dire autant de la décision d'intégrer par défaut le compilateur JavaScript CoffeeScript et à un degré moindre l'adoption du compilateur CSS SaSS.
CoffeeScript, dévoilé en début 2010, se positionne comme une nouvelle syntaxe pour JavaScript, destinée à ressortir les qualités du langage en cachant au développeur ses défauts avec une syntaxe plus épurée et plus logique, proche de celle de Ruby.
Au départ, CoffeeScript était écrit en Ruby et disponible uniquement en tant que bibliothèque du langage (ruby gem), mais depuis, ce compilateur, de plus en plus populaire, a gagné en maturité, a été réécrit en Node.js et porté sur un grand nombre de plates-formes de développement.
SaSS est pour CSS ce qu'est CoffeeScript pour JavaScript et sera lui aussi une dépendance par défaut de Rails 3.1.
Ce compilateur n'altère toutefois pas pour beaucoup la logique du langage de mise en forme et se contente de lui ajouter les fonctionnalités jugées manquantes, pour faciliter l'intégration et la maintenance des feuilles de style.
Il introduit entre autres, les variables, les mixins, l'imbrication et l'héritage entre sélecteurs et même des options avancées comme les conditions, boucles et importation de fichiers externes.
Depuis la sortie de la version 3.0 de Sass, sa nouvelle syntaxe par défaut SCSS (pour « Sassy CSS ») se rapproche de celle de CSS3 en rétablissant notamment les accolades et les points-virgules à la fin des règles CSS.
Un fichier CSS 3 classique est donc tout à fait compatible avec SCSS, ce qui rend l’adoption de cette technologie beaucoup plus naturelle.
SaSS a aussi été porté sur d'autres langages.
Ruby on Rails 3.1 intègrera par ailleurs le support du Streaming HTTP, une nouveauté initialement annoncée en marge de la sortie de la bêta de Rails 3.0.
Cette fonctionnalité, destinée à améliorer la vitesse de chargement des pages permet au navigateur de charger les dépendances statiques de la page (JavaScript, CSS, images...) avant même que la requête ne soit entièrement traitée par le serveur et le contenu dynamique de la réponse généré.
La taille de la réponse aux requêtes n'est donc pas fixée et envoyée au navigateur dans l'entête (Header HTTP) et les différents morceaux de la requête (avec leur taille) sont ajoutés au fur et à mesure de leur génération.
Ces morceaux sont donc intégrés par le serveur à la réponse dès qu'ils sont prêts, permettant à l'ensemble de la page de se charger plus rapidement, réduisant ainsi le temps de latence.
Cette fonctionnalité repose sur le mécanisme « Chunked transfer encoding » supporté par la version 1.1 du protocole HTTP.
Par ailleurs, tous les mécanismes d’ActionView en relation avec RJS (Ruby to JavaScript) ont été retiré de la version 3.1 et placés dans un gem appelé prototype-rails.
La date de sortie de la version 3.1 définitive n'est pas encore connue, mais il est possible de la tester dès maintenant en l'installant à partir de GitHub.
Code : | Sélectionner tout |
1 2 3 | mkdir ~/rails-3.1/ ; cd ~/rails-3.1/ git clone git://github.com/rails/rails.git ~/rails-3.1/rails/bin/rails new application_de_test --edge |
Et vous ?
Que pensez-vous des nouveautés de cette version ?
L'avez-vous essayé ? Qu'en pensez-vous ?