ADR-0002 · AJAX lote × lote en vez de SSE

ADR-0002 · AJAX lote × lote en vez de SSE

  • Status: ✅ Accepted
  • Fecha: 2026-03-15
  • Tags: venta · sync · hosting

Contexto

La sincronización de ventas desde ChessERP puede traer 8.000–22.000 filas por mes, divididas en 3–15 lotes de 200–2000 filas cada uno. El sync completo toma 25–40 segundos.

Hostinger shared hosting mata HTTP largas a los ~4 minutos aunque PHP tenga set_time_limit(0). Esto rompía syncs grandes que excedían el límite.

Opciones consideradas

Opción A · Server-Sent Events (SSE)

  • ✅ Streaming continuo
  • ❌ Hostinger igual mata la conexión a los ~4 min
  • ❌ Reconexión compleja
  • ❌ No transaccional por lote

Opción B · WebSockets

  • ❌ Hostinger shared no soporta WS persistentes
  • ❌ Overkill para el caso de uso

Opción C · AJAX lote × lote (★ elegida)

  • ✅ Cada POST dura 2–15 segundos (muy por debajo del límite)
  • ✅ El navegador orquesta la secuencia
  • ✅ Si falla un lote, retomable
  • ✅ Progress bar nativo
  • ✅ Funciona con cualquier hosting

Decisión

JS orquesta el sync con un loop de POSTs a sync_api_process.php:

POST action=init     → INSERT sincronizaciones, devuelve sync_id
LOOP:
  POST action=lote   → fetch + INSERT lote (2-15s)
  Until {finalizado: true}
POST action=finalizar → UPDATE estado='completado'

Consecuencias

✅ Funciona perfecto con Hostinger. ✅ Permite resume mode (saltea lotes completados). ✅ UI muestra progreso real. ⚠️ Si el browser cierra a mitad, sync queda en procesando (se retoma con ?resume=1).

Referencias