ReboFilesDocs
Empezar3
Qué es ReboFiles
Primeros pasos
Demos para ejecutar
Ponlo en tu app6
Componente de React
Headless: tu propia interfaz
Sin framework
Estilos y temas
Teclado y accesibilidad
Idiomas
Archivos9
Subidas
Vistas previas y el visor
Búsqueda
Cambios en vivo y carpetas grandes
Comentarios
Destacados y campos
Versiones, papelera y espacio
Descargar como .zip
Documentos de Word
El servidor14
La ruta
Frameworks e inicio de sesión
Quién puede hacer qué
Almacenamiento: S3, GCS, Azure y disco
Revisar las subidas
Metadatos: SQLite y Postgres
Esquema de la base de datos
Compartir y enlaces
Actividad y notificaciones
Ganchos, registros y límites
Retención, bloqueos y exportación
Escritorio y otros orígenes
Sincronizar una carpeta
Ir a producción
En equipo1
Asistentes de IA (MCP)
Referencia5
Paquetes
Componentes y hooks
API del cliente
Rutas HTTP
Estado y hoja de ruta
↑↓ para moverte↵ para abrirEsc para cerrar38 páginas

Archivos Cambios en vivo y carpetas grandes

Cambios en vivo y carpetas grandes

Dos personas con la misma carpeta abierta ven los cambios de la otra en un momento: una carpeta creada, un archivo renombrado, movido o a la papelera. Y una carpeta de miles de archivos se desplaza como una de diez.
Eventos

En el momento

La página escucha GET /events, un flujo de server-sent events, leído con fetch para que lleve tus headers. Cada cambio se le cuenta a cada quien solo hasta donde puede verlo: las carpetas donde pasó que puede listar, y las entradas que puede leer. No se envían nombres; la página pide lo que muestra, como siempre.

<FileDrive>, mountDrive y cada hook bajo un DriveProvider vuelven a pedir un cuarto de segundo después de un cambio, una vez para los cambios que llegan juntos. Tras un corte se conecta de nuevo, un poco más tarde cada vez. live={false} lo apaga.

una pantalla propia
const stop = client.watch((event) => {
  // { by: 'bea', at: '…', folders: ['<id>'], entries: ['<id>'] }
  if (event.folders.includes(current)) reload();
});
Servidores

Más de un proceso

Un cambio hecho por este proceso se avisa al instante. Uno hecho por otro proceso sobre el mismo store se ve por su revisión, que guardan SQLite y Postgres, mirada cada dos segundos mientras alguien escucha (live: { poll }). Un store sin revisión solo avisa los cambios de este proceso.

Producción

Detrás de un proxy

  • Cada 25 segundos va una línea vacía, para que un proxy no cierre el flujo por estar callado. Deja que una petición dure más que eso: proxy_read_timeout 1h en nginx.
  • La respuesta dice x-accel-buffering: no y cache-control: no-transform, para que nginx y la compresión no la retengan.
  • En una plataforma que corta una petición a los pocos segundos (funciones serverless), la página se reconecta al cortarse, y lo que cambie entretanto se ve en la siguiente. O apágalo con live: false.
Velocidad

Carpetas grandes

Desde 200 entradas, la lista y la cuadrícula ponen en la página solo lo que se ve y unas filas alrededor, con el espacio del resto guardado arriba y abajo, así que la barra de desplazamiento mide lo que mide todo. Las filas se miden al mostrarse, y las columnas de la cuadrícula siguen su ancho.

El teclado las recorre todas como antes: una flecha, Inicio o Fin traen primero a la vista la que toca, porque a un lector de pantalla se le dice la actual. Cada una dice dónde está entre todas (aria-posinset, aria-setsize). Ctrl+A selecciona todas, no solo las de la página, y las direcciones de las imágenes se piden solo para las que se muestran.