- Incluso al optimizar Nextcloud en un servidor personal, la causa de la lentitud en la respuesta es una estructura de carga excesiva de JavaScript
- En la carga inicial de la página se descargan 15~20 MB de JavaScript y, aun comprimido, sigue siendo una carga pesada de 4~5 MB
- El tamaño de los scripts por app es muy grande, como
core-common.js (4.71MB), NotificationsApp.chunk.mjs (1.06MB), la app de Calendar con 5.94MB, la app de Files con 18.8MB y la app de Notes con 20.91MB
- Debido a esta estructura, incluso en un iPhone 13 mini la app Tasks tarda entre 5 y 10 segundos en abrir
- Algunas funciones se reemplazaron con Vikunja (1.5MB de JS) e Immich, pero por la integración de Nextcloud es difícil sustituirlo por completo
Causa de la degradación de rendimiento en Nextcloud
- Nextcloud integra varias funciones como archivos, calendario, contactos, notas, tareas y fotos, pero la velocidad percibida por el usuario es baja
- Incluso en entornos con hardware suficientemente potente, la respuesta sigue siendo lenta
- Según el análisis con herramientas de desarrollo, la causa principal de la demora es la cantidad excesiva de JavaScript
- En la carga inicial de la página se descargan 15~20 MB de JavaScript
- Incluso tras la compresión, sigue en 4~5 MB, muy por encima de lo habitual en una web app común (1 MB)
- Aunque exista caché del navegador, en cada visita es necesario ejecutar una gran cantidad de código, lo que provoca retrasos en la carga
Tamaño de los principales bundles de JavaScript
core-common.js: 4.71MB, ofrece funciones comunes para varias apps
NotificationsApp.chunk.mjs: 1.06MB
- App de Calendar: requiere 5.94MB incluso solo para la vista básica del calendario
- En redes lentas, puede generar demoras de más de 30 segundos
- App de Files: incluye múltiples scripts como
EditorOutline (1.77MB), previewUtils (1.17MB), index (1.09MB) y emoji-picker (0.9MB)
- El total llega a 18.8MB y, en entornos reales, puede requerir más de 1 minuto de espera para cargar
- App de Notes: solo
notes-main.js pesa 4.36MB, y el total ronda los 20.91MB
Impacto en la experiencia del usuario
- Incluso al abrir la app Tasks hay una demora de 5~10 segundos
- Ejemplo: al abrir una lista de compras en una tienda, no aparece de inmediato
- La proporción entre funcionalidad y tamaño del bundle es anormalmente alta, lo que genera un desequilibrio entre funciones y rendimiento
- Por la propia estructura de Nextcloud, con muchas bibliotecas y herramientas compartidas, la experiencia integrada tiene como costo una caída en el rendimiento
Uso de servicios alternativos
- Algunas funciones se operan por separado con Vikunja (gestión de tareas, 1.5MB de JS) e Immich (gestión de fotos)
- Vikunja no es perfecto, pero como su tamaño de JS es pequeño, la velocidad percibida es mejor
- Aun así, gracias a la integración y comodidad de Nextcloud, es difícil reemplazarlo por completo
Conclusión y cambio de percepción
- La estructura actual de Nextcloud puede tener limitaciones reales, como razones válidas o falta de personal
- Aun así, el deterioro de la experiencia de usuario y de la accesibilidad se señala claramente como un problema
- A través de textos del especialista en rendimiento web Alex Russell, se tomó conciencia de la importancia del rendimiento web y del problema de la falta de cuidado del equipo de desarrollo en la gestión del rendimiento y la accesibilidad
- Al desarrollar web apps, hay que considerar el problema de la desigualdad de rendimiento (performance inequality)
3 comentarios
Simplemente es lento. No solo el cliente es lento, el servidor también.
En una máquina 8745HS, crear miniaturas de varios cientos de PDF tarda horas y ni siquiera termina.
Es mejor usar cualquier otro servidor de archivos. Si el cliente es Windows, SMB; para lo demás, me resultó mejor usar un servidor WebDAV con
rcloneodufs.copyparty está bastante bueno
Opiniones en Hacker News
Quiero que me guste Nextcloud. Me parece impresionante que exista
Pero aunque por fuera parece funcionar bien, a veces se rompe por completo con errores irrecuperables
Intenté usar la app de iOS/Android para respaldar automáticamente las fotos familiares, pero la app de iOS a veces da el error de “locked webdav” o simplemente deja de sincronizar
Al final terminé teniendo que volver a subir 80 GB de fotos desde cero
Es demasiado inestable para que lo use la familia, así que necesito una alternativa confiable. En la práctica no hay alternativa fuera de iCloud
Pegué archivos usando la integración con la app Files, pero no se sincronizaron y los datos desaparecieron sin ninguna advertencia
copyparty GitHub — tiene solo lo necesario y nada de peso innecesario
Pero como reemplazo de Dropbox, todavía no hay nada realmente convincente
La app oficial tiene muchos bugs, pero del lado del servidor es estable
Nextcloud es lento porque hace demasiadas llamadas de JavaScript
Al recargar la página del calendario se generan 124 llamadas de red, y 31 de ellas ni siquiera se almacenan en caché
Cada calendario tarda más de 30 ms, así que mientras más calendarios hay, más se acumula la latencia
Incluso en red local tarda 1 segundo, y en 4G más de 33 segundos. El diseño en sí es ineficiente
Este tipo de estructura basada en REST inevitablemente se vuelve lenta en redes móviles por la latencia de ida y vuelta
Creo que ya es momento de usar WebSocket en lugar de REST
Agregar o editar eventos se volvió incómodo y la UI se siente infantil. No hay un calendario web open source realmente usable
Un enfoque como Electric SQL se ve interesante
Y mejoras de JS como TC39 import proposal también podrían ayudar
Antes mantuve un soft fork de Nextcloud, y la estructura base es demasiado compleja
Con solo aplicar unos cuantos parches de rendimiento, la velocidad de renderizado del administrador de archivos mejoró varias veces
Pero el codebase tiene una estructura de capas sobre capas, así que cuesta confiar en él
Al final abandoné el proyecto. Creo que esta complejidad es parte de lo que mantiene vivo el ecosistema de proveedores de hosting
Cada función empezó como un plugin independiente y no hay integración real
Ahora se convirtió en un monstruo, y casi que es mejor conectar varias herramientas con SSO
Y en la práctica, operar Nextcloud tampoco es tan difícil. Una vez configurado, el mantenimiento es sencillo
Creo que más que el tamaño del JS que menciona el artículo, la causa de la lentitud es la lógica ineficiente
El problema son demasiadas llamadas a la API y actualizaciones de UI
Antes revisábamos optimización si pasaba de 200 KB, y Nextcloud llega a 15 MB
Llevo 7 años usando Nextcloud para respaldar fotos familiares
Protege bien la privacidad y es estable, pero jamás lo recomendaría como reemplazo de Google Docs
Las subidas grandes y la carga de miniaturas son inestables y lentas
Aun así, no hay sustituto, y no quiero dejar mis datos en manos de la IA de las grandes tecnológicas
Ojalá mi familia lo usara más activamente
He probado varios administradores de archivos self-hosted
Pasé por Ajaxplorer → Pydio → Nextcloud → FileRun, y FileRun fue el que más me satisfizo
Es rápido, estable y funciona bien incluso en el navegador móvil
Ahora es de pago, pero vale la pena
copyparty también es ligero y rápido, pero no es muy amigable para usuarios comunes
Extraño la función de “solicitud de archivos” de FileRun
filebrowser GitHub
filebrowser-docker
Enlace de demo
Quiero probarlo junto con Syncthing, pero me preocupa la carga de CPU
Nextcloud es lento y pesado, pero estable
Lo usamos desde hace años en una empresa de 8 personas sin problemas
Casi no usamos la webapp porque es lenta, y nos apoyamos sobre todo en el cliente de sincronización de escritorio
El plugin de autenticación IMAP es muy útil y facilita la administración de usuarios
Se puede personalizar libremente con uBlock, userstyle, userscript, etc.
Antes descubrí y reporté una vulnerabilidad en el visor PDF de Nextcloud
El problema era que incluían un visor PDF viejo basado en JS, y a los 16 años me pagaron $100
Mi post del blog
Mucha gente se queja de los proyectos open source, pero muy pocos intentan mejorarlos directamente
Yo amo Nextcloud. Será lento, pero mis datos me pertenecen y además el código es AGPL, así que puedo modificarlo
Se puede usar gratis y puedes ir agregando extensiones “como si compraras” funciones
Llevo más de 6 años usándolo sin grandes problemas, y esa libertad me parece increíble
No es perfecto, pero agradezco que exista
La gran ventaja de Nextcloud es que permite manejar todo el conjunto de herramientas de colaboración en una sola plataforma
Ofrece una experiencia integrada con archivos, calendario, notas, oficina, fotos, Talk y más
El paquete AIO resolvió muchos problemas de actualizaciones y estabilidad
Aun así, al estar basado en PHP, el rendimiento cae, y ojalá la UI estuviera tan pulida como Synology DSM
El problema es la estructura de I/O ineficiente y la enorme cantidad de llamadas XHR
PHP tiene la ventaja de ser accesible para contribuir desde la comunidad
Documentación oficial — aunque depende bastante de Docker y tiene bastantes limitaciones de entorno