- Mesmo ao otimizar o Nextcloud em um servidor pessoal, a causa da lentidão percebida é a estrutura de carregamento excessivo de JavaScript
- No carregamento inicial da página, são baixados 15–20 MB de JavaScript e, mesmo após compressão, ainda ficam em torno de 4–5 MB, o que continua sendo pesado
- O tamanho dos scripts de cada app é muito grande, como
core-common.js (4.71 MB), NotificationsApp.chunk.mjs (1.06 MB), o app de Calendário com 5.94 MB, o app de Arquivos com 18.8 MB e o app de Notas com 20.91 MB
- Por causa dessa estrutura, até em um iPhone 13 mini há um atraso de 5–10 segundos para abrir o app Tasks
- Algumas funções foram substituídas por Vikunja (1.5 MB de JS) e Immich, mas é difícil substituir totalmente o Nextcloud por causa de seus recursos integrados
Causa da queda de desempenho do Nextcloud
- O Nextcloud integra vários recursos, como arquivos, calendário, contatos, notas, tarefas e fotos, mas a velocidade percebida de uso é lenta
- Mesmo em ambientes com hardware suficientemente potente, a resposta continua lenta
- Segundo a análise com as ferramentas de desenvolvedor, a principal causa da demora é a quantidade excessiva de JavaScript
- No carregamento inicial da página, são baixados 15–20 MB de JavaScript
- Mesmo com transmissão comprimida, o volume ainda fica em 4–5 MB, muito acima do padrão de apps web em geral (1 MB)
- Mesmo com cache no navegador, ainda é preciso executar uma grande quantidade de código a cada visita, o que causa atraso no carregamento
Principais tamanhos dos bundles JavaScript
core-common.js: 4.71 MB, fornecendo funções compartilhadas entre vários apps
NotificationsApp.chunk.mjs: 1.06 MB
- App de Calendário: precisa de 5.94 MB só para a visualização básica do calendário
- Em redes lentas, o carregamento pode demorar mais de 30 segundos
- App de Arquivos: inclui vários scripts como
EditorOutline (1.77 MB), previewUtils (1.17 MB), index (1.09 MB) e emoji-picker (0.9 MB)
- O total chega a 18.8 MB e, em ambiente real, a espera pelo carregamento pode passar de 1 minuto
- App de Notas: só o
notes-main.js já tem 4.36 MB, e o total fica em torno de 20.91 MB
Impacto na experiência do usuário
- Até ao abrir o app Tasks, ocorre um atraso de 5–10 segundos
- Ex.: ao abrir uma lista de compras na loja, ela não aparece imediatamente
- A proporção entre funcionalidade e tamanho dos bundles é anormalmente alta, gerando um desequilíbrio entre recursos e desempenho
- Pela própria estrutura do Nextcloud, há muitas bibliotecas e ferramentas compartilhadas, então a experiência integrada vem ao custo de perda de desempenho
Uso de serviços alternativos
- Algumas funções foram separadas para Vikunja (gerenciamento de tarefas, 1.5 MB de JS) e Immich (gerenciamento de fotos)
- O Vikunja não é perfeito, mas como o volume de JS é pequeno, a sensação de velocidade é melhor
- Ainda assim, é difícil substituir totalmente o Nextcloud por causa de sua integração e praticidade
Conclusão e mudança de percepção
- A estrutura atual do Nextcloud pode ter limitações reais, como motivos justificáveis ou falta de pessoal
- Mesmo assim, a piora na experiência do usuário e na acessibilidade é apontada como um problema claro
- Por meio dos textos do especialista em performance web Alex Russell, fica evidente a importância da performance web e o problema da falta de cuidado da equipe de desenvolvimento com desempenho e acessibilidade
- No desenvolvimento de apps web, é preciso considerar o problema da desigualdade de performance (performance inequality)
3 comentários
É simplesmente lento. Não é só o cliente que é lento; o servidor também é.
Mesmo em uma máquina com 8745HS, leva horas para gerar miniaturas de algumas centenas de PDFs e ainda não termina.
É melhor usar qualquer outro servidor de arquivos. Se o cliente for Windows, SMB; para o resto, achei melhor usar um servidor WebDAV com
rcloneoudufs.O copyparty é bem legal.
Comentários do Hacker News
Eu queria gostar do Nextcloud. Acho impressionante que ele exista
Mas, embora por fora pareça funcionar bem, às vezes acontecem erros irrecuperáveis e tudo quebra de vez
Tentei fazer backup automático das fotos da família com os apps de iOS/Android, mas o app de iOS às vezes dá erro de “locked webdav” ou simplesmente para de sincronizar
No fim, acabei tendo que reenviar 80 GB de fotos do zero
É instável demais para a família usar, então preciso de uma alternativa confiável. Na prática, não existe alternativa fora o iCloud
Colei arquivos pela integração com o app Files, mas eles não sincronizaram e os dados sumiram sem qualquer aviso
copyparty GitHub — tem só o necessário, sem peso desnecessário
Mas, como substituto do Dropbox, ainda não há nada realmente à altura
O app oficial tem muitos bugs, mas o lado do servidor é estável
O Nextcloud é lento porque faz chamadas JavaScript demais
Ao recarregar a página do calendário, são feitas 124 chamadas de rede, e 31 delas nem sequer são armazenadas em cache
Cada calendário leva mais de 30 ms, então, quanto mais calendários houver, mais o atraso se acumula
Mesmo na rede local leva 1 segundo; em 4G, mais de 33 segundos. O próprio design é ineficiente
Esse tipo de estrutura baseada em REST inevitavelmente fica lenta em rede móvel por causa da latência de ida e volta
Acho que já passou da hora de usar WebSocket em vez de REST
Adicionar ou editar eventos ficou incômodo, e a UI também ficou infantil. Não existe um calendário web open source realmente bom
Abordagens como a do Electric SQL são interessantes
E melhorias em JS como a TC39 import proposal também podem ajudar
Eu já mantive um soft fork do Nextcloud, e a estrutura básica é complexa demais
Só de aplicar alguns patches de desempenho, a velocidade de renderização do gerenciador de arquivos melhorou várias vezes
Mas a base de código é uma estrutura de camadas em cima de camadas, então é difícil confiar nela
No fim, abandonei o projeto. Parece que essa complexidade é um dos fatores que sustentam o ecossistema de provedores de hospedagem
Cada recurso começou como um plugin independente e acabou sem integração real
Agora virou um monstro, e acho que seria melhor conectar várias ferramentas com SSO
E, na prática, operar o Nextcloud nem é tão difícil assim. Depois de configurar uma vez, a manutenção é simples
Acho que a causa da lentidão não é tanto o tamanho do JS citado no artigo, mas sim a lógica ineficiente
O problema são chamadas de API demais e atualizações de UI demais
Antigamente, se passava de 200 KB, já fazíamos revisão de otimização; o Nextcloud tem 15 MB
Uso o Nextcloud há 7 anos para backup de fotos da família
Ele protege bem a privacidade e é estável, mas eu jamais recomendaria como substituto do Google Docs
Uploads grandes e carregamento de miniaturas são instáveis e lentos
Mesmo assim, não há substituto, e não quero entregar meus dados para a IA das big techs
Queria que minha família usasse mais ativamente
Já usei vários gerenciadores de arquivos self-hosted
Usei Ajaxplorer → Pydio → Nextcloud → FileRun, e o FileRun foi o que mais me satisfez
É rápido, estável e funciona bem até no navegador do celular
Hoje é pago, mas vale o preço
O copyparty também é leve e rápido, mas não é amigável para usuários comuns
Sinto falta do recurso de “solicitação de arquivos” do FileRun
filebrowser GitHub
filebrowser-docker
link de demonstração
Estou pensando em combiná-lo com o Syncthing, mas me preocupo com a carga de CPU
O Nextcloud é lento e pesado, mas estável
Estamos usando há anos em uma empresa de 8 pessoas sem problemas
O webapp é lento, então quase não usamos; dependemos mais do cliente de sincronização para desktop
O plugin de autenticação IMAP é muito útil e facilita a gestão de usuários
Dá para personalizar livremente com uBlock, userstyle, userscript e afins
No passado, descobri e reportei uma vulnerabilidade no visualizador de PDF do Nextcloud
O problema era incluir um visualizador de PDF antigo baseado em JS, e recebi US$ 100 por isso aos 16 anos
Post no meu blog
Muita gente reclama de projetos open source, mas pouca gente tenta melhorá-los por conta própria
Eu amo o Nextcloud. Ele é lento, mas meus dados continuam sendo meus, e como o código é AGPL, eu também posso modificá-lo
Dá para usar de graça e adicionar extensões como se estivesse “fazendo compras”
Uso há mais de 6 anos sem grandes problemas, e essa liberdade é realmente incrível
Não é perfeito, mas sou grato por esse projeto existir
A vantagem do Nextcloud é reunir toda a suíte de colaboração em uma única plataforma
Arquivos, calendário, notas, office, fotos, Talk e mais, tudo numa experiência integrada
O pacote AIO resolveu muitos problemas de atualização e estabilidade
Mas, por ser baseado em PHP, o desempenho fica aquém, e seria bom se a UI fosse mais refinada, como a do Synology DSM
O problema são a estrutura de I/O ineficiente e a enorme quantidade de chamadas XHR
PHP tem boa acessibilidade, o que favorece contribuições da comunidade
documentação oficial — mas depende bastante de Docker e tem muitas restrições de ambiente