> Manuales > Manual de Polymer 2

Qué es Polymer 2.0 y por qué representa una revolución, junto con los Web Components V1, en el mundo del desarrollo web frontend.

En DesarrolloWeb.com nos hemos subido al tren de los Web Components porque creemos que el desarrollo basado en estándares abiertos es la mejor garantía para el futuro. Desde hace casi dos años venimos ofreciendo manuales para lanzarse a este mundo y en ese sentido ya hemos publicado un Manual de Web Components y el Manual de Polymer. Sin embargo, en esta ocasión tenemos que empezar de nuevo porque la tecnología ha tenido importantes mejoras que nos obligan a actualizarnos.

Para introducirnos en esta ocasión en el mundo de los Web Components vamos a usar la librería Polymer 2, cuyo lanzamiento ha sido realizado hace poco. Es una tecnología que aprovecha todas las ventajas de los Web Components y nos hace más fácil el desarrollo de componentes web encapsulados y reutilizables.

En este artículo pretendemos ofrecer una introducción a Polymer 2 y los Web Components V1, para ir abordando una materia que sin duda está revolucionando el desarrollo frontend. En los próximos artículos nos pondremos manos a la obra, ya con código, con el que poder experimentar todas estas novedades.

Web Components V1

Los Web Components son un estándar abierto que ha sido impulsado principalmente por Google y su navegador Chrome. Sin embargo, su adopción en el total del abanico de navegadores ha sido más lenta de lo esperado inicialmente, ya que involucra a muchas empresas que tienen maneras diferentes de entender el desarrollo para la web.

La primera especificación de Web Components se nombró como V0 (Versión cero) y resultó un gran avance, pero no llegó a estar incorporada de manera generalizada. Es la que en su día explicamos en el Manual de Web Components. Básicamente el concepto sigue siendo el mismo, por lo que si no sabes qué son los componentes es interesante la lectura al menos de los primeros artículos en los que se repasan los conceptos principales y las especificaciones relacionadas con la tecnología.

Nota: Por si alguien no lo sabe todavía y para resumir rápidamente de manera simplificada, los Web Components nos permiten crear nuevos elementos, como etiquetas HTML, que extienden el comportamiento de los navegadores. Podemos tener elementos para hacer cualquier cosa, como interfaces de usuario no disponibles en el HTML estándar o componentes que ofrecen funcionalidad de una aplicación completa. Los componentes tienen la gracia de poder reutilizarse y compartirse fácilmente, con lo que los desarrolladores pueden extender la web y llevarla a los límites de la imaginación de cada uno. Web Components nos ofrece una manera estándar de extender las funcionalidades de los navegadores, de manera que un desarrollo de una persona puede servir para toda la comunidad y ser compatible en cualquier navegador, de escritorio o móvil. Para quien venga del desarrollo con otros frameworks y librerías, como React, Angular, VueJS, etc., Web Components hace de manera estándar las cosas que todos estos frameworks realizan por cuenta propia, con implementaciones propietarias, creadas por ellos mismos.

Después del empuje inicial de Google a esta tecnología y con los acercamientos y sugerencias del resto de fabricantes de navegadores, se ha llegado a una nueva versión del estándar que cubre las necesidades y expectativas de todos. Hoy podemos decir que Web Components V1 ha sido aceptado por todos los fabricantes de navegadores, lo que ya mismo es una realidad, no solo en Google Chrome, sino en Safari, y pronto en Firefox, Edge, etc.

Web Components V1 en el momento de escribir este artículo está totalmente implementado, y de manera estable, en Chrome y Opera. El navegador Safari dispone de las partes más críticas de Web Components ya implementadas y Firefox junto con Edge van un poco más retrasados pero han dado el visto bueno también a la tecnología. De todos modos, independientemente del soporte de los navegadores la tecnología es perfectamente usable en este momento, pues donde todavía no llega el soporte nativo existen los "Polyfills" (Librerías de Javascript para implementar soporte a navegadores todavía no compatibles con una tecnología) que nos permiten ampliar la compatibilidad a todos navegadores del mercado. En la siguiente imagen puedes ver el soporte actual (agosto de 2017) en navegadores.

Nota: Esta imagen actualizada la puedes ver en la "Home" de la tecnología Web Components. Allí encontrarás mucha información del estándar y un catálogo de componentes que puedes usar ya mismo en cualquier proyecto.

Hoy más que nunca, "UseThePlatform"

"UseThePlatform" se ha usado como el slogan de Polymer y los Web Components. Nos trata de indicar que usemos en la medida de lo posible lo que el navegador nos ofrece. Todo aquello que el navegador ya dispone en sus APIs de Javascript es más ligero de ejecutar que cualquier librería que pongamos por encima para hacer las mismas cosas.

Tenemos que pensar que la web fue ideada para el trabajo con documentos, donde el texto y las imágenes eran los protagonistas. Sin embargo, con el tiempo la web fue adaptándose a las necesidades de los usuarios y empresas, volviéndose una plataforma de ejecución de aplicaciones. Frente a esa necesidad nacieron los frameworks y librerías, que nos ofrecían una base de código útil para realizar todas aquellas cosas que los estándares no aportaban en el pasado.

En los últimos años desarrollo basado en componentes se ha consolidado como la mejor de las alternativas y prueba de ello es la adopción del paradigma por todas las librerías y frameworks más usados. Éstos crearon sus propios mecanismos para que los desarrolladores fueran capaces de construir elementos encapsulados, con los que resolver las necesidades más diversas. Las aplicaciones más complejas se pueden implementar en base a componentes, donde unos elementos que se apoyan en otros. El problema es que toda la base de código que nos aporta un framework tiene un coste elevado, pues ralentiza no solo el tiempo de carga de las aplicaciones web, sino que además implica mucho esfuerzo en tiempo de procesamiento, ya que deben procesar mucha cantidad de código al interpretar aplicaciones complejas.

Web Components ha conseguido crear unos estándares abiertos para la construcción de los elementos personalizados, con código nativo que el navegador puede ejecutar sin esfuerzo. Usar los estándares abiertos disponibles para la web, aparte de ofrecer un mejor rendimiento, nos asegura un ciclo de vida de las aplicaciones más dilatado en el tiempo. Cualquier navegador o cliente web en general, presente o futuro, que soporte los estándares será capaz de ejecutar las aplicaciones creadas en base Web Components. Paralelamente, cada vez que los fabricantes de navegadores sean capaces de mejorar la plataforma, las aplicaciones creadas en base a estándares se verán más directamente beneficiadas.

Polymer es una librería basada en Web Components, por lo que consigue exprimir todos los comportamientos nativos que nos ofrecen los navegadores para hacer las cosas, de manera más ligera que otras librerías o frameworks.

Por qué el soporte nativo es crítico, frente a los polyfill

Como hemos dicho, donde no llegan los navegadores existe la posibilidad de cargar Polyfills que ofrecen un soporte no nativo, tanto a Web Components como a muchas otras tecnologías HTML5. Gracias a los polyfill conseguimos algo muy importante: cualquier web que use Web Components será compatible en todos los browsers.

Los Polyfills son por tanto un actor importante en la actualidad, ya que el soporte nativo está siendo desarrollado por algunos fabricantes todavía. Pero lo cierto es que no son la mejor solución, ya que recargan el navegador con código Javascript y por tanto lo hacen más lento al procesar páginas basadas en Web Components.

Al contar con soporte nativo, los navegadores son más rápidos y lo que es tan importante, las webs son más ligeras de carga, ya que la mayoría del Javascript no se tiene que descargar.

Hoy, las especificaciones más críticas de Web Components están completamente implementadas en Chrome, Safari y Opera, por lo que no solo ordenadores de escritorio, sino la mayoría de los móviles, son compatibles de manera nativa con Web Components, lo que resulta un excelente motivo para confiar en esta tecnología.

Nota: Al tener soporte nativo Web Components lo hace tan rápido como el mismo Javascript "Vanilla", ya que Web Components es simplemente Javascript.

Sin embargo, para un navegador que dependa de Polyfills, usar Web Components no representaría una ventaja particular. Dicho de otra forma, una aplicación Angular, React, VueJS, etc., sería similar, a usar Web Components con Polyfills, pues todos dependerían de Javascript no nativo para implementar cosas parecidas. Por este motivo, todos los mejores frameworks han anunciado que en un futuro cambiarán su manera de trabajar, para basarse en el estándar Web Components y apoyarse directamente en el Javascript nativo, algo que hoy ya tenemos con Polymer 2.

Novedades en Polymer 2.0

Polymer 2.0 es capaz de ir un sensiblemente más lejos de su predecesor, aunque la mayoría de las novedades más significativas se derivan directamente de las propias novedades del estándar de los Web Components y su creciente soporte nativo en los navegadores.

Hay una charla del Google IO 2017 muy interesante sobre las novedades de Polymer 2.0 y los Web Components en general, en la que ofrecen un dato que me parece importante mencionar sobre los avances de Polymer 2.0, con respecto al peso en Bytes y la separación del código de los polyfill: "Future, Faster: Unlock the Power of Web Components with Polymer".

En ella podremos encontrar esta diapositiva, en la que vemos el peso de Polymer junto con los Polyfill en cada familia de navegadores en la actualidad.

Como se puede ver, en Chrome, que ofrece soporte completamente nativo, el peso de Polymer 2.0 más los polyfill es de 11KB, en Safari actualmente subiríamos a 14KB, Firefox y Edge 33KB y los antiguos Internet Explorer 37KB.

Ante esta reducida cantidad de código queda todavía más clara la idoneidad de usar Polymer 2.0 junto con otros frameworks como podrían ser Angular o React, además de ser posible la interoperabilidad por defecto de manera nativa por medio del estándar Web Components.

Nota: Hay un matiz que es justo mencionar y es que Polymer 2 no es solo el propio núcleo, sino que también hay muchas otras cosas que se ofrecen por medio de una biblioteca de componentes ya listos para usar en las aplicaciones. Cuando decimos que Polymer 2.0 pesa 11KB no se están incluyendo muchos elementos que sin duda acabarás usando en las aplicaciones, como el sistema de routing, el sistema de almacenamiento local, los elementos para construir layouts avanzados, elementos de interfaz gráfica con aspecto material design, etc.

Conclusión

Éstas y muchas otras novedades permiten ilusionarse con la nueva versión de la librería Polymer para desarrollo basado en el estándar abierto de los Web Components. Iremos abordando en el futuro, con nuevos artículos muchas de las novedades interesantes, no solo de la propia librería, sino también del universo de los custom elements que tenemos a nuestra disposición hoy para el desarrollo basado en Polymer.

Estamos seguros que estarás ansioso con ver algo de código, así que en la siguiente entrega nos pondremos manos a la obra con algo más práctico, que nos permita ver cómo construir fácilmente componentes en Polymer 2.

Puedes ver el siguiente vídeo, con un resumen de las ventajas de Polymer y Web Components V1, además de un adelanto del próximo artículo de este manual.

Miguel Angel Alvarez

Fundador de DesarrolloWeb.com y la plataforma de formación online EscuelaIT. Com...

Manual