2 points par GN⁺ 2025-11-04 | 3 commentaires | Partager sur WhatsApp
  • 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

 
ndrgrd 2025-11-04

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.

 
yeorinhieut 2025-11-05

copyparty, c’est vraiment bien.

 
GN⁺ 2025-11-04
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

    • L’app iOS a déjà perdu la connexion au compte en arrière-plan, ce qui a entraîné une perte de données
      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
    • Il existe récemment une alternative ultra-légère créée par la communauté : copyparty
      copyparty GitHub — il n’y a que les fonctions nécessaires, sans lourdeur inutile
    • Pour la sauvegarde photo, Immich offre une bien meilleure expérience
      Mais pour remplacer Dropbox, il n’y a toujours rien de vraiment convaincant
    • Pour tout ce qui touche aux photos, je pense qu’Immich est ce qu’il y a de mieux
    • Pour les envois depuis mobile, je suis passé à FolderSync et ça fonctionne parfaitement
      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

    • Il y a beaucoup trop de fichiers JS et beaucoup trop de requêtes AJAX
      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
    • Avant, le calendrier Nextcloud était vraiment excellent, mais la refonte l’a complètement cassé
      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
    • Pour résoudre ce genre de problème, il faudrait améliorer les protocoles de synchronisation des données
      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

    • Je pense pareil. Nextcloud est tombé dans le piège de la modularité
      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
    • Je me demande si ces correctifs ont été partagés. Si le gain de vitesse est aussi important, cela pourrait aider la communauté
      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

    • Quand il y a trop de JS, le surcoût cumulé du parsing, de l’exécution et des manipulations du DOM devient important
      À une époque, on vérifiait l’optimisation dès qu’on dépassait 200 Ko, alors que Nextcloud monte à 15 Mo
    • Cela peut aussi venir d’un cache mal géré ou d’un préchargement inutile
  • 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

    • Je me demande si Immich peut être cette alternative. J’ai entendu dire qu’il est très bon pour gérer photos et vidéos
  • 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

    • J’aime bien filebrowser. Avec Syncthing, on obtient une sorte de mini Dropbox
      filebrowser GitHub
      filebrowser-docker
    • Dans copyparty aussi, la fonction « shares(--shr) » permet de créer des liens d’envoi similaires
      lien de démo
    • copyparty ne prend en charge que la synchronisation à sens unique, donc il est difficile de le considérer comme un remplaçant de Nextcloud
      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 dit souvent que la web app est lente, mais elle a aussi beaucoup d’avantages
      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

    • Moi aussi, j’avais essayé d’afficher un PDF dans une div intégrée à l’app, mais j’ai fini par devoir utiliser pdf.js
  • 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

    • Changer de langage n’améliorerait pas énormément la vitesse
      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é
    • À noter que Owncloud Infinite Scale est une version réécrite en Go
      documentation officielle — mais elle dépend beaucoup de Docker et impose des contraintes importantes sur l’environnement