- Même lorsqu’on optimise Nextcloud sur un serveur personnel, la cause de sa lenteur perçue est une architecture de chargement JavaScript excessif
- Au chargement initial de la page, 15 à 20 Mo de JavaScript sont téléchargés ; même après compression, cela reste une charge importante d’environ 4 à 5 Mo
- La taille des scripts de chaque application est très élevée, avec notamment
core-common.js (4,71 Mo), NotificationsApp.chunk.mjs (1,06 Mo), l’application Calendar (5,94 Mo), l’application Files (18,8 Mo) et l’application Notes (20,91 Mo)
- Cette structure entraîne 5 à 10 secondes de délai pour lancer l’application Tasks, même sur un iPhone 13 mini
- Certaines fonctions ont été remplacées par Vikunja (1,5 Mo de JS), Immich, etc., mais il reste difficile de remplacer totalement Nextcloud en raison de ses fonctions intégrées
Causes de la dégradation des performances de Nextcloud
- Nextcloud intègre de nombreuses fonctions comme les fichiers, le calendrier, les contacts, les notes, les tâches et les photos, mais la vitesse perçue à l’usage est lente
- Même dans un environnement où les performances matérielles sont suffisantes, la réactivité reste faible
- L’analyse via les outils de développement montre que la principale cause des ralentissements est la quantité excessive de JavaScript
- Au chargement initial de la page, 15 à 20 Mo de JavaScript sont téléchargés
- Même après transfert compressé, on reste autour de 4 à 5 Mo, ce qui est très élevé par rapport à une web app standard (1 Mo)
- Même avec le cache du navigateur, une grande quantité de code doit être exécutée à chaque visite, ce qui provoque des délais de chargement
Taille des principaux bundles JavaScript
core-common.js : 4,71 Mo, fournit des fonctions communes à plusieurs applications
NotificationsApp.chunk.mjs : 1,06 Mo
- Application Calendar : 5,94 Mo nécessaires pour la seule vue calendrier de base
- Sur un réseau lent, cela peut entraîner plus de 30 secondes de chargement
- Application Files : inclut de nombreux scripts comme
EditorOutline (1,77 Mo), previewUtils (1,17 Mo), index (1,09 Mo), emoji-picker (0,9 Mo), etc.
- Le total atteint 18,8 Mo, avec dans la pratique plus d’une minute d’attente avant chargement
- Application Notes :
notes-main.js pèse à lui seul 4,36 Mo, pour un total d’environ 20,91 Mo
Impact sur l’expérience utilisateur
- Le lancement de l’application Tasks entraîne lui aussi un délai de 5 à 10 secondes
- Exemple : lorsqu’on ouvre une liste de courses en magasin, elle ne s’affiche pas immédiatement
- Le rapport entre la taille des bundles et les fonctionnalités est anormalement élevé, ce qui crée un déséquilibre entre fonctionnalités et performances
- En raison de l’architecture de Nextcloud, qui embarque de nombreuses bibliothèques et de nombreux outils communs, la baisse de performances est le prix à payer pour une expérience intégrée
Utilisation de services alternatifs
- Certaines fonctions sont séparées vers Vikunja (gestion des tâches, 1,5 Mo de JS) et Immich (gestion des photos)
- Vikunja n’est pas parfait, mais son volume de JS plus faible lui donne une meilleure rapidité perçue
- Malgré cela, il reste difficile de remplacer totalement Nextcloud grâce à son intégration et sa praticité
Conclusion et évolution de la perception
- La structure actuelle de Nextcloud peut avoir des contraintes réelles, comme des raisons légitimes ou un manque de ressources humaines
- Malgré cela, la dégradation de l’expérience utilisateur et de l’accessibilité est clairement pointée comme un problème
- À travers les écrits de l’expert des performances web Alex Russell, l’importance des performances web et le problème du manque de rigueur des équipes de développement dans la gestion des performances et de l’accessibilité sont mis en lumière
- Lors du développement de web apps, il faut prendre en compte le problème de l’inégalité de performance (performance inequality)
3 commentaires
C’est juste lent. Ce n’est pas seulement le client qui est lent, le serveur l’est aussi.
Sur une machine 8745HS, même après plusieurs heures, la génération des vignettes pour quelques centaines de PDF n’est toujours pas terminée.
Mieux vaut faire tourner n’importe quel autre serveur de fichiers. Si le client est sous Windows, SMB est préférable ; pour le reste, il vaut mieux utiliser un serveur WebDAV avec rclone ou dufs.
copyparty, c’est vraiment bien.
Avis sur Hacker News
J’aimerais pouvoir aimer Nextcloud. Je trouve que son existence même est impressionnante
Mais même s’il semble bien fonctionner en apparence, il finit parfois par se casser complètement avec des erreurs irrécupérables
J’ai essayé de sauvegarder automatiquement les photos de famille via les apps iOS/Android, mais l’app iOS affiche parfois une erreur « locked webdav » ou bien la synchronisation se bloque
Au final, on se retrouve à devoir retéléverser 80 Go de photos depuis zéro
C’est trop instable pour un usage familial, donc il faut une alternative fiable. En pratique, il n’y a rien d’autre qu’iCloud
J’avais collé des fichiers via l’intégration avec l’app Fichiers, mais rien ne s’est synchronisé et les données ont disparu sans le moindre avertissement
copyparty GitHub — il n’y a que les fonctions nécessaires, sans lourdeur inutile
Mais pour remplacer Dropbox, il n’y a toujours rien de vraiment convaincant
L’app officielle est pleine de bugs, mais le serveur, lui, est stable
Nextcloud est lent à cause du trop grand nombre d’appels JavaScript
Un simple rafraîchissement de la page calendrier déclenche 124 appels réseau, dont 31 ne sont pas mis en cache
Chaque calendrier prend plus de 30 ms, donc plus on en a, plus la latence s’accumule
Même sur le réseau local, cela prend 1 seconde, et en 4G plus de 33 secondes. La conception elle-même est inefficace
Ce type d’architecture REST ne peut qu’être lent sur les réseaux mobiles, où la latence aller-retour est élevée
Je pense qu’il est temps d’utiliser des WebSocket plutôt que REST
Ajouter ou modifier un événement est devenu pénible, et l’interface a pris un aspect puéril. Il n’existe pas de calendrier web open source vraiment convaincant
Une approche comme Electric SQL est intéressante
Et des évolutions JS comme la TC39 import proposal pourraient aussi aider
J’ai autrefois maintenu un soft fork de Nextcloud, et la structure de base est beaucoup trop complexe
Rien qu’en appliquant quelques correctifs de performance, la vitesse de rendu du gestionnaire de fichiers a été multipliée plusieurs fois
Mais la base de code est une accumulation de couches sur couches, donc difficile à considérer comme fiable
J’ai fini par abandonner le projet. J’ai l’impression que cette complexité contribue à faire vivre l’écosystème des hébergeurs
Chaque fonctionnalité a commencé comme plugin indépendant, sans vraie intégration
Maintenant c’est devenu un monstre, et je pense qu’il vaudrait mieux relier plusieurs outils via du SSO
Et en pratique, exploiter Nextcloud n’est pas si difficile. Une fois configuré, la maintenance reste simple
Je pense que la lenteur ne vient pas tant du volume de JS évoqué dans l’article que d’une logique inefficace
Le vrai problème, c’est le trop grand nombre d’appels API et de mises à jour de l’interface
À une époque, on vérifiait l’optimisation dès qu’on dépassait 200 Ko, alors que Nextcloud monte à 15 Mo
J’utilise Nextcloud depuis 7 ans pour sauvegarder les photos de famille
C’est bon pour la vie privée et globalement stable, mais je ne le recommanderais jamais comme remplaçant de Google Docs
Les gros envois et le chargement des miniatures sont instables et lents
Malgré tout, il n’y a pas vraiment d’alternative, et je n’ai pas envie de confier mes données à l’IA des géants de la tech
J’aimerais que ma famille l’utilise plus activement
J’ai essayé plusieurs gestionnaires de fichiers auto-hébergés
Je suis passé par Ajaxplorer → Pydio → Nextcloud → FileRun, et c’est FileRun qui m’a le plus satisfait
C’est rapide, stable, et ça fonctionne bien même dans un navigateur mobile
C’est payant maintenant, mais ça vaut le coup
copyparty est aussi léger et rapide, mais moins accessible pour les utilisateurs ordinaires
La fonction « file requests » de FileRun me manque
filebrowser GitHub
filebrowser-docker
lien de démo
J’envisage de le combiner avec Syncthing, mais je crains la charge CPU
Nextcloud est lent et lourd, mais stable
Il est utilisé sans problème depuis des années dans une entreprise de 8 personnes
On utilise très peu la web app parce qu’elle est lente, et on s’appuie surtout sur le client de synchronisation bureau
Le plugin d’authentification IMAP est très utile, ce qui simplifie la gestion des utilisateurs
On peut la personnaliser librement avec uBlock, userstyle, userscript, etc.
J’avais autrefois découvert et signalé une faille du lecteur PDF de Nextcloud
Le problème venait de l’inclusion d’un ancien lecteur PDF en JS, et j’avais reçu 100 $ à 16 ans
mon billet de blog
Beaucoup se plaignent des projets open source, mais peu de gens essaient vraiment de les améliorer
Moi, j’adore Nextcloud. C’est lent, certes, mais je possède mes données, et comme le code est sous AGPL, je peux aussi le modifier
On peut l’utiliser gratuitement et ajouter des extensions comme on ferait son « shopping »
Je l’utilise depuis plus de 6 ans sans gros problème, et cette liberté est vraiment géniale
Ce n’est pas parfait, mais c’est un projet dont je suis reconnaissant qu’il existe
L’avantage de Nextcloud, c’est qu’il permet de gérer tout un ensemble d’outils collaboratifs sur une seule plateforme
Fichiers, calendrier, notes, bureautique, photos, Talk, etc. : l’expérience est intégrée
Le package AIO a résolu beaucoup de problèmes de mises à jour et de stabilité
En revanche, la base PHP pénalise les performances, et l’interface gagnerait à être plus soignée, à la manière de Synology DSM
Le vrai problème, c’est une structure d’E/S inefficace et l’énorme quantité d’appels XHR
PHP reste avantageux pour l’accessibilité et les contributions de la communauté
documentation officielle — mais elle dépend beaucoup de Docker et impose des contraintes importantes sur l’environnement