PWA


¿Qué es una PWA?

Una PWA (Progressive Web App) es una aplicación web que usa un conjunto de tecnologías modernas para comportarse como una aplicación nativa de móvil o escritorio. Es accesible desde el navegador como cualquier web, pero puede instalarse en el dispositivo, funcionar sin conexión y recibir notificaciones push.

¿Para qué se utiliza?

Las PWA se usan para:

  • Ofrecer experiencia de app sin pasar por las tiendas de aplicaciones (App Store, Google Play).
  • Permitir que la aplicación funcione sin conexión o con conexión intermitente.
  • Enviar notificaciones push a los usuarios, igual que una app nativa.
  • Reducir costes frente a desarrollar apps nativas para iOS y Android por separado.
  • Mejorar el rendimiento con estrategias de caché avanzadas mediante Service Workers.

¿Cómo funciona?

Imagina una PWA como un camaleón entre web y app. Vista desde fuera parece una página web, pero por dentro tiene las habilidades de una app: se instala en la pantalla de inicio, carga sin internet y se actualiza en segundo plano. La magia la hacen tres piezas: el manifest (identidad), el Service Worker (cerebro en segundo plano) y HTTPS (seguridad obligatoria).

Ejemplo: Web App Manifest

// public/manifest.json
{
  "name": "Mi App",
  "short_name": "MiApp",
  "description": "Una PWA de ejemplo",
  "start_url": "/",
  "display": "standalone",
  "background_color": "#ffffff",
  "theme_color": "#282828",
  "icons": [
    {
      "src": "/icons/icon-192.png",
      "sizes": "192x192",
      "type": "image/png"
    },
    {
      "src": "/icons/icon-512.png",
      "sizes": "512x512",
      "type": "image/png"
    }
  ]
}

Ejemplo: Service Worker básico con caché offline

// service-worker.js
const CACHE_NAME = 'mi-app-v1';
const RECURSOS = ['/', '/styles/global.css', '/scripts/app.js'];

// Instalación: guarda los recursos en caché
self.addEventListener('install', (event) => {
  event.waitUntil(
    caches.open(CACHE_NAME).then((cache) => cache.addAll(RECURSOS))
  );
});

// Fetch: sirve desde caché si no hay red
self.addEventListener('fetch', (event) => {
  event.respondWith(
    caches.match(event.request).then((respuestaCacheada) => {
      return respuestaCacheada || fetch(event.request);
    })
  );
});

Las PWA han reducido la brecha entre web y apps nativas. Empresas como Twitter, Starbucks o Spotify usan PWA para ofrecer experiencias rápidas e instalables con una sola base de código.