- Explica las técnicas básicas de desarrollo web usando solo HTML, CSS y JavaScript
- Presenta cómo implementar sitios y aplicaciones únicamente con tecnologías web estándar, sin herramientas de build ni frameworks
- Aborda métodos de estructuración y estilizado aprovechando Web Components y funciones modernas de CSS
- Busca un entorno de desarrollo simple y beneficios a largo plazo, sin la complejidad ni la carga de mantenimiento de los frameworks
- Es un tutorial dirigido principalmente a desarrolladores que ya dominan las tecnologías estándar de la web
Resumen de Plain Vanilla Web
Es un resumen de las principales técnicas para crear sitios y aplicaciones en el desarrollo web usando solo tecnologías web estándar, sin herramientas de build ni frameworks
- Explica un entorno que utiliza únicamente editor, navegador y estándares web
- Presenta una estructura que permite el despliegue a producción sin configuración inicial ni lógica del lado del servidor
Temas tratados
1. Componentes (Components)
- Explica cómo combinar Web Components en elementos de alto nivel usando solo HTML, JavaScript y CSS
- Muestra una forma de reemplazar el enfoque de componentes de frameworks como React o Vue
2. Estilizado (Styling)
- Explica cómo aprovechar el poder de CSS moderno para sustituir la comodidad que ofrecen CSS Modules, PostCSS y SASS
- Presenta conceptos de estilos estructurados y modulares, dejando atrás el CSS clásico
3. Sitios (Sites)
- Explica cómo estructurar proyectos web con base en Web Components y desplegarlos sin herramientas de build ni servidor
- Presenta un flujo de despliegue práctico y simple
4. Aplicaciones (Applications)
- Explica cómo crear una aplicación web de una sola página usando únicamente técnicas vanilla
- Describe enfoques de ruteo y manejo de estado
Público recomendado
Está dirigido a desarrolladores que ya pueden manejar HTML, CSS y JavaScript hasta cierto punto
- Para quienes recién comienzan en el desarrollo web, recomienda rutas de aprendizaje básicas como Odin Project o MDN
¿Por qué el enfoque vanilla?
Los frameworks modernos permiten obtener rápidamente funciones potentes y bien estructuradas, pero vienen acompañados de una mayor complejidad en las herramientas y los frameworks, además de una carga constante de mantenimiento
- El enfoque Plain Vanilla sacrifica parte de la comodidad a corto plazo a cambio de beneficios a largo plazo como la simplicidad y un mantenimiento prácticamente nulo
- Los navegadores actuales hacen realmente posible este enfoque gracias a su excelente soporte de estándares web
1 comentarios
Opiniones en Hacker News
Ya me salí del debate de “¿vanilla o framework?” y ahora pienso más bien desde la perspectiva de: “¿de verdad esto necesita un sitio web?”
Cuando empiezas a dudar de si una app web, especialmente en el mundo B2B SaaS, realmente necesita ser web, descubres que puedes llevar bastante lejos un negocio sin tocar el navegador
La mayor parte del tiempo que dediqué a crear sitios y apps se fue en UI/UX de administración, es decir, en la parte donde el administrador cambia campos en la base de datos para que la aplicación se comporte según las expectativas del cliente
En muchos casos, darle al negocio una simple plantilla de configuración (un archivo de Excel, por ejemplo) e insertar o combinar directamente los resultados en tablas SQL es mucho más rápido, sencillo y evita trabajo inútil
La web solo ofrece una forma de UI/UX. El correo electrónico o los archivos de texto plano son incluso más flexibles
Sobre todo pasa con compradores como organismos gubernamentales, que muchas veces no entienden bien lo que compran y terminan pagando de más
Quienes hacen las compras necesitan más formación sobre lo que realmente hace falta
Una tienda física de urnas no tiene carrito, así que ¿por qué tendría que tenerlo la tienda virtual?
También al comprar herramientas especializadas de carpintería en línea, simplemente llené un formulario y recibí las piezas junto con la factura, y ni siquiera importaba si quería pagar de inmediato o no
Hay muchas formas de comercio tanto en línea como fuera de línea, y si observas a la gente que vive de maneras interesantes, puedes encontrarlas por todas partes
Si tienes aunque sea un poco de capacidad de mantenimiento, una plantilla de Excel + scripts personalizados simples resulta mucho más flexible.
Es muy efectivo si al final los usuarios son del tipo que de todos modos trabaja a nivel de datos crudos
Y todavía hoy el 99% de B2B sigue este modelo
No estoy en contra de los frameworks. Solo siento que en muchos casos no hacen falta
Siempre me pareció extraño tener que agregar 100 KB de JS antes siquiera de escribir una línea de código
Con mi equipo construimos https://restofworld.org sin ningún framework
Las encuestas, el outreach y el feedback por correo fueron muy positivos tanto en usabilidad como en experiencia de lectura
Más adelante podríamos usar un framework, pero hasta ahora vanilla JS nos ha funcionado muy bien
Por un lado están quienes construyen grandes webapps en equipos de más de 30 personas, y si oyen “sin framework” enseguida aparecen dudas sobre cómo resolver funciones esenciales a gran escala
Pero la respuesta es que esas funciones ni siquiera son necesarias, y como esto se usa para algo tipo blog, desde el inicio no hacía falta un framework
En cambio, quienes no tienen experiencia real con webapps enormes piensan “¿por qué la gente usa frameworks?”
La web es realmente un conjunto muy diverso de software.
Por eso, cuando se habla de frameworks, creo que hay que aclarar con precisión de qué tipo de software se está hablando
En este caso, esto es un blog de WordPress
Se está usando WordPress, que es un framework grande, solo que renderizado de forma estática
El TFA hablaba de no usar ninguna build tool y de apoyarse solo en estándares web modernos. Solo editor, navegador y estándares web
En las apps empresariales donde he trabajado, 100 KB no es algo que preocupe en absoluto
Casi siempre eran aplicaciones grandes hechas por varios equipos, usando React y similares.
En Lob/B2B a nadie le importa la carga inicial de la página
Los usuarios usan la app todos los días y, en la mayoría de los casos, cargan los assets estáticos directamente desde la caché del navegador
Si usas un framework inteligente como Next.js, el contenido se divide por rutas en chunks inmutables
El render inicial es HTML estático, así que desde la perspectiva del usuario la hidratación ni se nota
Pero cuando veo que estos ejemplos en la discusión vanilla vs framework siempre son sitios de noticias o artículos, pienso “yo de todos modos no habría usado un framework para eso”, porque no entran en la categoría de apps complejas
Al final, los ejemplos reales deberían ser apps más interactivas
Últimamente prefiero usar solo un framework y patrones consistentes, minimizando otras dependencias
En iPhone ya me había acostumbrado demasiado a que al volver atrás se recargara toda la página
Pero los desarrolladores se obsesionan por diversión con loading screens, componentes hidratados, animaciones excesivas y modales molestos
Además, el scroll infinito es fatal para la usabilidad porque dificulta seguir dónde estás usando la posición de la barra de desplazamiento
Mis felicitaciones por haber participado en su construcción
En el caso de Mithril, por ejemplo, toda la funcionalidad cabe en 10 KB gzipped
Si piensas en implementar tú mismo una tabla reactiva con búsqueda, o formularios con etiquetas, validación y errores bien hechos, ¿por qué hacerlo a mano si puedes usar una librería de UI para Svelte y 25 KB de overhead para tener algo bien construido y probado?
Y WordPress también es un framework
Usar frameworks no vuelve lento un sitio. Ni WordPress ni lo que sea
Es demasiado rápido
Por productividad del desarrollador (en teoría).
En la práctica, muchas veces no ayuda tanto
Me pregunto si este enfoque tuvo desventajas importantes
Estoy desarrollando un sistema para unos 2 mil usuarios, y a ellos no les importa en absoluto una UI reactiva
Lo mejor es hacer un monolito, no preocuparse por el refresh de página y concentrarse simplemente en hacer el trabajo
Y la motivación no fue tanto técnica, sino que distribuir apps nativas cuesta demasiado
La web ofrece barato un estándar para distribuir apps, pero la tecnología de UI sigue siendo floja
Antes hubo varios intentos a medio camino como X11, Java y Flash, y ojalá algún día aparezca una forma más cómoda de desarrollar webapps
@view-transitionya puedes lograr transiciones suaveshttps://developer.mozilla.org/en-US/docs/Web/CSS/@view-transition
La mayor parte del software es mucho más lento y menos responsivo que dispositivos mecánicos de hace 120 años
No hace falta traer paquetes de npm
El backend está en express/node, todo el código está junto, pero en desarrollo el servidor corre con el servidor por defecto de React y en producción corre distinto, así que al final necesitas una forma rara de build y operación que hace perder sentido a la comodidad del dev server, como el hot reload
Incluso las SPA de grandes empresas como Reddit o X (Twitter) eran demasiado inestables en móvil
Si no eres del tamaño de Twitter, o no eres una plataforma centrada en APIs, no creo que tenga sentido insistir con SPA
Si ni siquiera empresas de miles de millones lo han construido bien, es peligroso creer que yo sí podría hacerlo mejor
No hace falta rehacer todo en React
Las funciones avanzadas tipo SPA que menciona el autor original son opcionales
Me pregunto si también investigaste a quienes abandonaron
Quiero vivir en un mundo así
Vengo de la época anterior a los frameworks, y ese tiempo todavía era inmaduro, además era común encontrar gente que solo sabía jQuery
Ahora siento que, después de los query selectors, el costo-beneficio de los frameworks ya no es tan grande (los frameworks de testing son aparte y sí son muy buenos)
Estamos atrapados en una prisión de frameworks llamada React, y todos los fracasos son resultado de una complejidad spaghetti
Las state machines quedan enredadas a mano, y los resultados traducidos, comprimidos y transpilados son difíciles de reconocer
Los source maps son otra capa más de complejidad para mantenimiento
Entiendo por qué se crearon los frameworks, pero me cuesta imaginar que para un ingeniero nuevo sea más fácil seguir aprendiendo frameworks que vanilla JS
HTML no era más que markup hecho para facilitar un poco el render de texto, y lo mismo con HTTP
Antes la proporción texto/markup tenía que ser alta, pero ahora está completamente invertida
Aun así, creímos que el futuro era montar todo el desarrollo de apps encima de eso, y si ves por dentro React, son décadas de trucos y parches
Antes era como intentar hacer apps con Excel+VB o con PDF+PostScript, algo absurdo
Como hemos trabajado así, varios MB de JS o consumir megabytes de JS se siente excesivo
La parte en la que la UI responde de inmediato a cambios en los datos; si tengo que armar listeners manuales, hacer actualizaciones por diff y además liberar eventos, eso ya se siente casi como manejo manual de memoria
Así era en la era de jQuery, y había muchos errores
Cuando se pueda modularizar la vista de forma declarativa y basada en componentes con vanilla JS, entonces volveré; pero por ahora me parece totalmente inviable
Falta una pieza decisiva
React y Angular definitivamente tenían sentido antes de ES2015
Después de eso me cansé de los cambios en los frameworks frontend
Incluso dentro de React sigue cambiando la forma de trabajar con componentes y manejo de estado
Yo todavía no compro Web Components
Incluso con funciones recientes como
@scoped,import {type:css}y demás, me parece mucho más sensato renderizar elementos de forma estática y luego actualizarlos dinámicamente con JS modernoSoy escéptico frente a la mayoría de los enfoques con Web Components, y sigo creyendo que hay que innovar fuera de frameworks como React/Svelte
Nunca he sentido que Web Components sean útiles para varios de los sitios que mantengo
Con Shadow DOM lo mencionan decenas de veces por página, pero en realidad casi todo eso es resolver problemas que aparecen por haberlo introducido
Como son componentes exclusivos de mi app, tampoco tengo problemas de Shadow DOM
Me pregunto cómo se maneja eso en backend con Web Components
Puedes agregar métodos extra a tus propias etiquetas y encapsular la lógica de actualización dentro del componente
Necesitamos prácticas basadas en librerías ligeras o incluso escritas por uno mismo
HTMX tiene cosas buenas, pero sigue funcionando demasiado como una etiqueta script; bastaría con dejar claros en HTML solo la URL y el método, y cosas como
hx-targetpodrían ir en JS como atributosdata-No quiero incluir todas las funciones de HTMX que no uso
No creo que Web Components sea un reemplazo de lo que otros frameworks llaman componentes
No puedes meter valores compuestos (Object, Array, etc.) en atributos, hay demasiado boilerplate y no hay reactividad
Yo programo en un estilo vanilla JS usando signals[1]
No todos los estándares del W3C son la respuesta, y conviene aprender del fracaso de XHTML
[1] https://wrnrlr.github.io/prelude/
http://youmightnotneedjs.com
Este parece un enfoque que le va bien a quienes hacen páginas web como hobby
Los frameworks existen para estandarización, diseño con buenas prácticas incorporadas y para arrancar el desarrollo rápidamente
El sitio web en sí no tiene valor intrínseco; lo importante es cómo exponer su contenido de forma eficiente y desarrollarlo bien y a tiempo
En ese sentido, los frameworks reducen costos presentes y futuros
En grandes empresas reales, las decisiones suelen estar guiadas por modas, costumbres y una actitud defensiva hacia frameworks populares; no se rastrea la pérdida de productividad causada por más complejidad, y de hecho muchas veces las decisiones equivocadas se alinean con los incentivos personales o del equipo
Es decir, no se puede justificar la elección de un framework con la lógica de que “seguro fue una decisión racional”
Usar un framework no garantiza automáticamente buenas prácticas, y al contrario, puede terminar produciendo sistemas más inflados y lentos
Es un recurso realmente excelente
Creo que, si uno va a construir para la web, debería conocer sí o sí los principios de las tecnologías base y aprovechar al máximo la plataforma web
Encima de eso, usar o no un build system/framework debería ser una elección libre, siempre que se entiendan los trade-offs
En lo personal me gusta Remix (/React-router v7+) porque está alineado con una filosofía de estándares web
Es decir, te permite lograr más con menos desarrollo, por ejemplo modificar datos del servidor incluso solo con formularios HTML
Y también recomiendo https://every-layout.dev, donde se pueden aprender varias técnicas de layout de alto rendimiento, accesibilidad y flexibilidad usando solo CSS nativo del navegador
Yo mismo trabajo profesionalmente en desarrollo web desde 1998
La semana pasada hice un proyecto pequeño completamente vanilla y está funcionando muy bien
Es una herramienta web para escribir hilos largos en Mastodon
Mientras la hacía, pensaba todo el tiempo: “¿estaré haciendo algo mal por no usar un framework?”
Da la impresión de que los demás ya esperan framework por defecto
Splinter, splinter.almonit.club, por si a alguien le sirve de referencia