27/11/2015

Web Components: una nueva forma de construir documentos HTML

Web Components: una nueva forma de construir documentos HTML

En los últimos años, las aplicaciones web fueron quitándoles lugar a los programas de escritorio. Herramientas con un alto nivel de complejidad, como procesadores de texto o editores de imagen, hoy pueden ejecutarse desde un browser común. Esto ocurre no solo gracias al incremento en las velocidades de conexión a Internet, sino también —y principalmente— al desarrollo de tecnologías para el procesamiento de información del lado cliente. Tradicionalmente, en las aplicaciones web, el front-end se limitaba a una simple interfaz visual, mientras que el back-end se encargaba de todas las funciones de procesamiento. Hoy, en cambio, muchas de esas funciones pueden implementarse en el front-end, sin tener que solicitarlas al servidor. Como parte de este proceso, HTML se complejizó, pasando de ser un simple lenguaje de marcas a poder interactuar con complejas API desarrolladas en JavaScript.

Otra novedad son los Web Components: widgets encapsulados, reutilizables y componibles para la plataforma web. Son elementos de interfaz de usuario que se crean a través de tecnologías web abiertas. Algunos vienen incorporados en el browser, por lo cual no tenemos que tomarnos el trabajo de codificarlos por nuestra cuenta, ni necesitamos de bibliotecas externas (como jQuery) para hacerlos funcionar. El concepto abarca cuatro tecnologías:

Custom Elements

Nos permite crear nuestros propios elementos y etiquetas HTML. Cada elemento puede tener su propia estructura interna, comportamiento y estilo visual predeterminados. Por ejemplo, si necesitamos un menú de navegación personalizado, podemos crear la etiqueta <mi-menu>, con las características que deseemos.

HTML Templates

Permite crear «plantillas» cuyo contenido será cargado de manera dinámica, y no en el momento en que se carga la página. Por ejemplo, podemos ofrecerle al usuario un botón para añadir o quitarle filas a una tabla. Normalmente, las opciones son dos:

  1. Crear o eliminar el elemento fila en el momento en que se acciona el botón, modificando el código fuente mediante JavaScript.
  2. Incluir de antemano una cantidad de filas en el markup, pero mostrarlas u ocultarlas a través de CSS.

La primera opción trae problemas de seguridad, mientras que la segunda nos obliga a incluir en nuestro código HTML elementos que quizás ni vayan a utilizarse, incrementando innecesariamente el peso de la página.

Con la etiqueta <template> podemos predefinir un fragmento de HTML que solo se incluirá cuando sea necesario, sin los problemas de la inyección de código por JavaScript ni tener que cargar elementos invisibles apenas se abre la página.

Shadow DOM

Permite insertar en nuestra página estructuras HTML que funcionarán de manera independiente con respecto al código que los contiene. Estos fragmentos no se verán afectados por el CSS y el JavaScript del resto de la página.

Por ejemplo, para incluir un video en nuestra página podemos usar el elemento video de HTML5, usando apenas una línea de código:

<video src="./foo.webm" controls></video>

Pero, al mostrarse en el browser, este elemento contendrá un botón de play, un controlador de volumen, un indicador de duración, etc. Estos componentes internos son «insertados» por el propio browser a través de un fragmento de código oculto: el Shadow DOM, que tendrá su propio JavaScript y CSS.

Un elemento <video> con su Shadow DOM insertado por Chrome. Fuente: CSS-Tricks

HTML Imports

Nos permite incluir en nuestra página documentos HTML externos, scripts de JavaScript y hojas de estilo.

Comentarios finales

Si revisamos la definición de Web Components que ofrecimos en el segundo párrafo, notaremos que HTML Templates aporta la característica de reusabilidad, mientras que Shadow DOM brinda encapsulamiento. Las cuatro tecnologías son componibles porque pueden utilizarse de forma combinada.

Actualmente, Web Components es un estándar del W3C que todavía se encuentra en desarrollo, impulsado por Google. Aún no es plenamente soportado por todos los browsers, pero existen polyfills para salvar esta falencia.

0

angularjs Aplicaciones en Facebook aplicaciones mobile behavioral targeting Botones Call-to-action breadcrumbs breadcrumbs web búsqueda de personal búsqueda facetada Call-to-action buttons Client-side cliente-destacado cms a medida coding comercio electrónico content marketing CSS3 PIE cuanto debe pesar un sitio data-driven web design Datos estructurados Defacement Denegación de servicio Desarrollar una aplicación web desventajas de PhoneGap diseñar newsletters diseño web diseño web argentina diseño web esqueuomórfico Diseño web responsive Diseño web responsivo diseño web santa fe diseño web Smart TV diseño web televisores DOM desde PHP enlaces rotos filtros de búsqueda flash flat web design formularios sitio web fragmentos enriquecidos función de autocompletar futuro de la realidad aumentada html HTML5 html5shiv inbound marketing Initializr interfaces Web para televisores javascript jobs jQuery Mobile Mapbox maquetado html/css maquetador web masonry layout menú de navegación menú desplegable Metodologías ágiles Modernizr MVC Navegación por teclado oferta laboral OpenStreetMap paginas de Facebook Paper js Paper js framework personas Phishing plan de QA Polyfills polymer portfolio-destacados portfolio-inicio programacion de CMS Programadores WordPress página de contacto página de error 404 que es Backbone.js Realidad aumentada Resultados instantáneos server-side skeuomorphic design sliders y usabilidad soporte Internet Explorer Storytelling Underscores usabilidad usabilidad buscadores user-centered design ux velocidad de carga web Vendor prefixes ventajas jQuery Mobile Ventanas integradas versiones antiguas de Internet Explorer WAI-ARIA web components web imprimible Web Semántica WordPress para ecommerce