OPCIÓN C + A1: Consolidación técnica + orjson

C1: Materialized view part_vehicle_preview (creación en progreso)
- Migración v3.3_materialized_view.sql
- catalog_service.py y dashboard/server.py ahora usan la MV
- Script refresh_part_vehicle_preview.py + warm_vehicle_cache.py actualizado

C2: Fix cache warming script (autónomo)
- Auto-re-ejecuta con sudo -u postgres si peer auth falla
- Args CLI: --dsn, --batch-size, --ttl, --dry-run

C3: CSS dinámico residual extraído
- sidebar.js → sidebar.css (nuevo)
- pos-utils.js → common.css (nuevo)
- Links agregados a 14 templates POS

C4: Script de load testing básico
- scripts/load_test.py: métricas p50/p95/p99, throughput, errores

C5: Documentación actualizada
- FASES_IMPLEMENTADAS.md: test count real, FASE 7 completa
- performance_audit_2026.md: anexo post-FASE 7, métricas actualizadas

A1: Serialización orjson
- pos/json_provider.py: DefaultJSONProvider con orjson.dumps/loads
- Aplicado a POS app y Dashboard server
- Fix indentation error en pos_bp.py

Tests: 73/73 pasando
This commit is contained in:
2026-04-27 09:36:03 +00:00
parent f893391916
commit 042acd6207
33 changed files with 998 additions and 281 deletions

View File

@@ -1,7 +1,7 @@
# Nexus Autoparts — Auditoría de Performance y Optimización
**Fecha:** 2026-04-26
**Versión del sistema:** FASE 6 completa + Opción C
**Versión del sistema:** FASE 6 completa + Opción C + FASE 7 performance
**Auditor realizado por:** Análisis automatizado de codebase + métricas del sistema
---
@@ -30,6 +30,8 @@ El sistema presenta **cuellos de botella severos** concentrados en tres áreas:
| Connection pooling | **Ninguno** | Sí (min 2, max 1020) |
| Compresión HTTP (gzip/brotli) | **Deshabilitada** | Sí |
> **Nota (2026-04-27):** FASE 7 implementada. Los valores anteriores reflejan el estado pre-optimización. Ver Anexo FASE 7 para estado actual.
---
## 2. Base de Datos — Análisis Detallado
@@ -568,4 +570,56 @@ Después de implementar Fase 1 + Fase 2, el sistema debería alcanzar:
---
---
## Anexo: Implementación FASE 7 (2026-04-27)
Todas las fases 13 del roadmap de optimización fueron implementadas en commits `175dda6` a `f893391`.
### Checklist de fixes aplicados
| # | Tarea | Estado | Commit |
|---|-------|--------|--------|
| 1.1 | gzip en nginx | ✅ | `175dda6` |
| 1.2 | `defer` en scripts | ✅ | `175dda6` |
| 1.3 | `innerHTML +=` → `map`+`join` | ✅ | `175dda6` |
| 1.4 | Event delegation en cart | ✅ | `175dda6` |
| 1.5 | AbortController en API calls | ✅ | `175dda6` |
| 1.6 | Índice parcial `warehouse_inventory` | ✅ | `e3c85fd` |
| 1.7 | sessionStorage cache | ✅ | `175dda6` |
| 2.1 | Connection pooling | ✅ | `e3c85fd` |
| 2.2 | `inventory_stock_summary` + triggers | ✅ | `e3c85fd` |
| 2.4 | N+1 fix en `process_sale` | ✅ | `e3c85fd` |
| 2.6 | Índices faltantes críticos | ✅ | `e3c85fd` |
| 3.1 | `_classify_cache` → Redis | ✅ | `e21722a` |
| 3.2 | Vehicle info cache en Redis | ✅ | `e21722a` |
| 3.3 | Gunicorn `gthread` | ✅ | `e21722a` |
| 3.4 | `loading="lazy"` en imágenes | ✅ | `21959f1` |
| 3.5 | Extraer CSS inline | ✅ | `f893391` |
| 3.6 | Minificar JS/CSS | ✅ | `21959f1` + `f893391` |
### Items residuales NO abordados en FASE 7
| Item | Ubicación | Riesgo |
|------|-----------|--------|
| Breadcrumb aún usa listeners por elemento (no event delegation) | `catalog.js:275285` | 🟡 Memory leak residual |
| Cache-busting `?t=Date.now()` en imágenes de inventario | `inventory.js:552` | 🟡 Anula cache browser |
| Polling sin `document.hidden` (WhatsApp, clock, auto-print) | Múltiples JS | 🟡 CPU innecesario en tabs ocultos |
| CTE `stock_per_oem` full scan | `catalog_service.py:986991` | 🟠 Seq scan warehouse_inventory |
| Materialized view `part_vehicle_preview` | — | 🟠 Reemplazada por Redis cache; MV creada en Opción C |
### Métricas estimadas post-FASE 7
| Métrica | Antes | Después FASE 7 |
|---------|-------|----------------|
| Latencia catálogo Local (p95) | 500ms3s | ~150400ms |
| Transferencia JS por página | 526 KB | ~180 KB (gzip + minify) |
| Transferencia CSS por página | ~247 KB inline | ~25 KB cached (external) |
| Conexiones DB por request | 12 nuevas | 0 (pool) |
| Redis hit rate | < 1% | ~80%+ |
| Stock lookup | O(n) operaciones | O(1) summary table |
---
*Documento generado automáticamente a partir del análisis de codebase, métricas de sistema y mejores prácticas de performance.*
*Actualizado 2026-04-27 para reflejar implementación FASE 7.*