miércoles, 22 de diciembre de 2021

Ruby On Rails 7: fin a la dependencia de Node por defecto, y más novedades

Ruby On Rails (también conocido por sus siglas RoR), es un framework de código abierto destinado al desarrollo de aplicaciones web. Está basado en el cada vez más popular lenguaje de programación Ruby, del mismo modo que Django está basado en Python, por ejemplo.

El pasado 15 de diciembre salió a la luz la versión 7.0 de Ruby On Rails, de gran importancia debido a las novedades que presenta. En especial, la nueva característica que pone fin a la dependencia ante Node que antes se mostraba por defecto (no-Node default).

Ruby On Rails 7 se hace realidad

El concepto principal de esta nueva versión de RoR llevaba ya varios años en desarrollo. No ha sido hasta que ciertas tecnologías necesarias para su desarrollo han mostrado el soporte necesario, que esta versión ha podido hacerse realidad. Este avance es, entonces, en gran parte gracias a tres principales mejoras.

Compatibilidad de los navegadores con ES6/ESM


Figura1. Estándar ES6 JavaScript

ES6 es la sexta versión del estándar que sigue JavaScript, es decir, la especificación del lenguaje que los fabricantes deben respetar al crear intérpretes para JS. ESM (ES Modules) es uno de los gestores de módulos más importantes de JavaScript, que por supuesto define el estándar de módulos de JS.

Adopción generalizada del protocolo HTTP/2 

Todos conocemos el protocolo HTTP, la versión que estaremos acostumbrados a escuchar será probablemente la HTTP/1.1. HTTP/2 no es más que una mejora respecto de su predecesor, lo cual ha venido de perlas al equipo de Ruby On Rails para materializar su desarrollo en esta séptima versión.

Podéis ver una breve demostración del impacto a la hora de descargar imágenes de HTTP/1.1 frente a HTTP/2 en https://http2.akamai.com/demo

Nueva librería importmap-rails de RoR

Una nueva librería publicada por David Heinemeier Hansson (creador de RoR) que marca un antes y un después en el desarrollo de aplicaciones basadas en JavaScript.

David menciona en su publicación:

" But imagine if you had 50 files that all had an opening import like "import { Controller } from './javascript/stimulus-a6d26cef87d241eba5fa.js'"? That would suck. You'd have to update each of those files every time you bumped your Stimulus dependency, and all of those files would individually expire when you did!

The answer to this problem is called import maps, and it's a feature already shipping in Chrome and Edge. Firefox has indicated they're looking into it. Safari hasn't said a pip about it. But no matter, there's a perfectly workable shim available, which implements import map support for all browsers that support ESM (which all the ones with ES6 support do).

With import maps, you define the mapping of imports. So instead of "./javascript/stimulus-a6d26cef87d241eba5fa.js", it's just "stimulus", and then the import map says "stimulus": "/javascript/stimulus-a6d26cef87d241eba5fa.js". If you bump Stimulus, you just change the map, not the references. Voila! "

Para ver los detalles de implementación de la librería: https://github.com/rails/importmap-rails

Principales novedades de Ruby On Rails 7

Como ya comentábamos antes, desde esta séptima versión de RoR, las aplicaciones desarrolladas en este framework ya no tendrán que depender de Node por defecto, con todas las mejoras que ello conlleva en cuanto a optimización. Aquellas aplicaciones que sigan dependiendo de Node por razones varias, no quedarán de lado, también contarán con mejoras en Rails 7.

La principal mejora para estos últimos es la de ser capaz de usar cualquier bundler de JavaScript, el que se desee, y no únicamente Webpacker. Esto es gracias al nuevo sistema jsbundling-rails que integra esta nueva versión.

" Whether you like esbuild (and who doesn’t these days!) or rollup.js or even Webpack, you’ll be able to use any of them through the new jsbundling-rails integration that can be pre-configured for new apps with --javascript esbuild. "

El mismo enfoque se aplica a los bundlers de CSS que tengan dependencia en Node. Con Ruby On Rails 7, se integrarán perfectamente a partir de un archivo application.css compilado.

De cara a las herramientas para optimizar la producción de experiencias de usuario, Turbolinks and Rails UJU han sido sustituidas por pecar de ser "opciones limitadas". Ahora, las herramientas por defecto pasan a ser el tridente Hotwire/Turbo/Stimulus, que permiten un desarrollo mucho menos complejo.

En cuanto al back-end, también se encuentran algunas mejoras. Se han añadido ciertos atributos de cifrado en el Active Record de Rails (la interfaz que comunica una aplicación escrita en Rails con la base de datos), resultando en una mejor cobertura de cifrado aplicación <--> base de datos.

Para información más detallada: RubyOnRails

No hay comentarios:

Publicar un comentario