- En tentant d’éditer dans le navigateur un document Word d’environ 30 Mo, l’auteur a subi une latence à la saisie, illustrant concrètement le coût en performance des applications web modernes
- Le document contenait principalement du texte, avec seulement quelques images et tableaux, mais Google Docs ou l’environnement Chrome ne l’ont pas traité de façon fluide
- À la place de Microsoft Office payant, l’auteur a installé LibreOffice, où le même document fonctionnait bien plus vite, mettant en évidence l’écart entre applications web et applications natives
- À mesure que les applications web modernes exigent davantage de mémoire et de CPU, cela alimente l’idée que la montée en gamme du matériel va de pair avec des applications web gourmandes en ressources
- Même si les PWA et les interfaces basées sur le navigateur se généralisent, la rendu natif et une conception logicielle efficace restent essentiels en matière d’utilisabilité
Le problème de performance des applications web révélé par un document de 30 Mo
- Google Docs a d’abord été choisi pour profiter d’un compte Google et de la synchronisation automatique dans le cloud
- Après avoir importé le document dans Google Docs et commencé à taper, plusieurs secondes s’écoulaient avant que les caractères n’apparaissent à l’écran
- Le fichier pesait environ 30 Mo ; il contenait quelques images et des tableaux simples, mais il s’agissait surtout de texte
- L’auteur en a conclu que Chrome ou Google Docs ne parvenaient pas à traiter correctement ce document
- Microsoft Office a été écarté car payant, et LibreOffice installé à la place faisait tourner le même document très rapidement
Une question plus large sur l’efficacité
- Cela amène à se demander si les outils, frameworks et langages modernes ne rendent pas les logiciels plus lourds sur le plan des performances
- Pour faire tourner des applications web gourmandes en ressources, les configurations matérielles ont gagné en puissance ; selon l’auteur, si seules des applications purement natives existaient, ces exigences pourraient être moindres
- L’exemple des appareils mobiles nécessitant 16 Go de RAM est cité pour dénoncer l’augmentation de l’usage des ressources par les logiciels
- Le web, plutôt que de rester un simple wrapper de moteur de rendu d’interface, devrait atteindre une efficacité de niveau rendu natif
- En 1966, l’ordinateur d’Apollo a permis l’alunissage avec 2 Ko de RAM, alors qu’en 2024 un navigateur peine à traiter un document d’environ 30 Mo : ce contraste souligne la nécessité de l’optimisation
1 commentaires
Avis sur Hacker News
Même si l’on veut créer une app native, on a l’impression qu’Apple et Microsoft continuent de mettre des bâtons dans les roues. Il faut accepter les comptes développeur, les certificats de signature de binaires, et même une commission de 30 % sur le chiffre d’affaires sans grande raison ; côté Microsoft en particulier, les API sont devenues déroutantes
Du coup, on finit par choisir le web, plus simple et moins cher
Les apps non signées peuvent tout de même s’exécuter sur Windows et macOS, mais elles affichent davantage d’avertissements. La commission de 30 % ne s’applique elle aussi que si l’on utilise le Mac App Store ou le Microsoft Store ; et le Microsoft Store semble ne pas prélever de commission si ce n’est pas un jeu et que l’on utilise son propre système de paiement
Je connais moins Apple, mais il est très probable qu’on puisse créer des apps Mac sans compte développeur ; pour l’iPhone, en revanche, il en faut un. Le prix que j’avais vu à l’époque était de 99 $ par an, ce qui n’est pas énorme si l’on compte sérieusement créer une app
Le traitement des contestations de paiement et des remboursements coûte aussi de l’argent, et il faut consacrer du temps au support client ou embaucher quelqu’un. Sous 1 million de dollars de chiffre d’affaires annuel, la commission d’Apple est de 15 %, donc pour des apps peu chères ou à valeur ajoutée, Apple peut être une meilleure affaire que de gérer soi-même les paiements
Il est ironique que cet article de 265 mots soit publié sur Medium, qui télécharge 10,88 Mo
about:processdans Firefox, même 10 minutes après la fin du chargement, cet article utilisait encore 239 Mo de mémoire et 0,06 à 0,2 % de CPU, et 45 % du temps CPU semblait consommé par Google reCAPTCHAJ’aimerais que des acteurs comme Mozilla ou Google collectent des statistiques d’utilisation CPU, mémoire et énergie par domaine, pour mettre publiquement dans l’embarras les développeurs qui ne se soucient pas des performances
Le web donne à nouveau l’impression d’être en 2005. Sauf que cette fois, les pop-ups sont intégrés dans la page
gemini://gemi.dev/bin/waffle.cgidans le navigateur Gemini et j’y colle l’URL. Ceux qui n’utilisent pas le réseau Gemini peuvent remplacermedium.comparscribe.ripdans l’URLOui, on s’est perdus, et la raison est simple : parce qu’on pouvait le faire. C’était le chemin de moindre résistance, alors on l’a pris
Pendant des décennies, le logiciel a profité gratuitement des progrès du matériel, surtout dans le web et les apps de bureau. La loi de Moore a été à la fois une bénédiction et une malédiction, et les logiciels que nous utilisons aujourd’hui sont créés par des gens qui ont appris la technologie au moment où cette rente battait son plein
Aujourd’hui, un ordinateur avec moins de 8 Go est inutilisable, et même 8 Go, c’est tout juste acceptable. Les nouveaux logiciels utilisent Electron et consomment au minimum 1 Go de RAM, et tout, y compris les navigateurs, utilise une quantité de mémoire absurde
Windows est encore plus incompréhensible. Chaque fois que j’aide ma mère avec son ordinateur, c’est un PC récent avec un i5 et 8 Go de RAM, mais il est beaucoup trop lent ; le démarrage, le lancement des programmes et les mises à jour prennent une éternité. Un ordinateur qui met plus d’une minute à démarrer, j’ai envie de le jeter par la fenêtre
On n’a pas résolu le déploiement d’applications dans plusieurs langages et environnements ; on l’a esquivé avec un moteur de conteneurs. On pourrait fournir aux utilisateurs qui le souhaitent un script de build installant compilateurs et outils, mais comme c’est difficile à tester correctement, on finit par utiliser des conteneurs
Redbean et Cosmopolitan libc m’ont semblé être ce qui se rapprochait le plus d’une “solution” à ce problème. Si l’on veut que les utilisateurs déploient une app facilement et de manière fiable, les conteneurs ont un avantage compétitif, et avec eux arrivent aussitôt plus de 100 Mo sur disque et un moteur de conteneurs
Tant que la concurrence entre États ou entreprises reste le principe central du développement technologique, il sera difficile de maîtriser les crises mondiales comme le changement climatique, la destruction des écosystèmes ou l’IA létale. Nous avons besoin de collaboration et de coopération comme principes d’organisation au plus haut niveau ; la concurrence crée d’immenses externalités négatives à l’échelle de la planète
Lazarus, c’est-à-dire les programmes écrits en Free Pascal, tourne très vite même sur des Windows récents comme Windows 11. Pour la vitesse et la stabilité, le mieux est de maintenir des logiciels de bureau écrits pour un objectif précis
Toute modernisation logicielle — qu’il s’agisse du matériel ou des frameworks — agit comme une taxe imposée à l’ensemble des fonctionnalités existantes
La complexité s’est accumulée exactement au mauvais endroit
Ce type de plainte revient sans cesse, mais en pratique, presque personne ne souhaite vraiment changer cet état de fait
Les développeurs aiment le Web, cette plateforme de calcul généraliste entièrement intégrée et connectée, et les utilisateurs semblent ne pas trop se soucier des performances tant que c’est suffisamment correct. Au final, on tolère que le logiciel se dégrade jusqu’au point où il n’agace pas trop les utilisateurs
Les dirigeants non plus ne s’intéressent pas à la création de meilleurs logiciels si un logiciel suffisamment bon existe déjà. Rien ne change tant que quelqu’un ne juge pas qu’une rupture brutale est nécessaire, et quel que soit le point de vue, il y a peu d’incitations au changement
Les personnes qui téléchargent de grosses apps sur un téléphone au signal faible, qui vivent dans des zones où Internet est instable, ou qui utilisent de vieux appareils parce qu’elles ont de faibles revenus ou vivent dans des pays en développement, sont frustrées par les apps lourdes et lentes. Si vous avez l’impression que les gens ne se soucient pas des performances ni de la taille des apps, vous posez peut-être les mauvaises questions aux mauvaises personnes
Avec le temps, seuls ceux qui se plaignent finissent par sembler atypiques ; les autres mettent à niveau, acceptent l’embonpoint ou continuent d’utiliser d’anciens logiciels
Cela dit, il faut aussi regarder ce que cet embonpoint apporte. Si Google Docs n’avait été qu’un clone de Word, il n’aurait pas été beaucoup utilisé, mais certains l’utilisent parce qu’il est gratuit, accessible depuis plusieurs appareils et permet une collaboration fluide
Et une partie de ce qui ressemble à de l’embonpoint correspond en réalité à des gains de confort. Les polices proportionnelles qui restent belles quelle que soit la taille, les polices Unicode, le traitement de documents plus gros que la mémoire disponible, le passage entre documents de travail et ressources, ou encore la protection mémoire consomment beaucoup de ressources, mais améliorent la qualité de vie
Le monde moderne fondé sur le cloud, ou à moitié en ligne, est assez artificiel du point de vue de l’utilisateur, et lorsqu’il n’y a pas besoin de monétisation, comme avec OpenOffice, on peut rester une application desktop
Personne ne s’en plaignait, et même lorsque les performances de certaines parties de l’app étaient médiocres, les réclamations des clients étaient rares. Les plaintes ne commençaient à apparaître qu’autour de 60 secondes de chargement
Malgré cela, le logiciel résolvait un problème très précieux en ramenant à quelques minutes un travail qui prenait une semaine, si bien que les clients en faisaient l’éloge. Quand la concurrence s’est intensifiée, il a fallu l’améliorer, mais la plupart des gens ne s’en souciaient vraiment pas et c’était toujours tout en bas des priorités
C’est amusant d’ouvrir le gestionnaire des tâches et de voir qu’ils n’utilisent que 20 à 30 Mo de RAM, alors même qu’une bonne partie de la base de données courante est chargée. VLC et Blender sont des exemples similaires
Il est intéressant de voir que la plupart des gens blâment les développeurs, alors qu’en réalité ce sont entièrement des décisions business
Le passage au cloud se fait parce que les entreprises aiment les revenus stables de l’abonnement, et parce que les clients entreprises n’ont pas à embaucher d’équipe IT, tandis que la responsabilité est externalisée, ce qui leur permet d’exiger une disponibilité élevée. Les performances doivent simplement être “acceptables” pour l’utilisateur final
Les clients qui refusaient les mises à niveau des logiciels on-premise ont entraîné de longs cycles de maintenance et une infinité de correctifs, et développer une seule fois pour le Web est plus avantageux économiquement que d’avoir des développeurs et des testeurs séparés pour chaque plateforme. La seule expertise des développeurs ne peut pas changer ces forces fondamentales
On ne pourra pas utiliser les dernières fonctionnalités tape-à-l’œil, mais sur une machine Win7, CS4 reste utilisable sans coût supplémentaire
Le problème vient du fait que les développeurs développent sur des machines aux performances inaccessibles aux utilisateurs, et ne se soucient pas des performances ni du code efficace
Au début des années 90, MS Word tenait sur quelques disquettes, et il me semble que l’exécutable principal faisait 2 Mo. Il tournait très bien même sur un 386 à 16 MHz avec seulement 2 Mo de RAM au total.
On faisait déjà alors la plupart de ce qu’on fait aujourd’hui ; il ne manquait guère qu’un correcteur grammatical. Désormais, on compte en Go, c’est 1000 fois plus gros, et je ne sais pas ce qu’on y a gagné. Non seulement on s’est perdus, mais on ne sait même plus quelle était la destination.
Par exemple, rien que
dict.wordssous Linux fait 4,8 Mo, et Arial Unicode est une police d’environ 20 Mo. Une seule icône de l’app sur laquelle je travaille fait 400 Ko, et le gestionnaire Google Crashpad pour le traitement des crashs fait aussi quelques Mo.Un écran 4K en vraies couleurs est 138 fois plus grand qu’un écran 640x480 en 16 couleurs.
Les PC de l’époque pouvaient démarrer sans UEFI, et avec une bonne configuration, Windows 3.11 se lançait presque instantanément, tout comme Word.
Le Word actuel a ajouté pas mal de toutes petites fonctionnalités et quelques grosses, mais je suis convaincu que si Microsoft s’en souciait, ils pourraient réduire l’usage mémoire d’un facteur 10. Il n’y a simplement pas d’incitation. Les ordinateurs sont rapides, la mémoire est abondante, et comme on ne dépend plus des disquettes, cela ne fait qu’ajouter du coût.
Je pense que l’obésité logicielle pourrait avoir un impact environnemental non négligeable, mais rien ne changera tant qu’il n’y aura pas un mécontentement assez fort, ou quelque chose comme une loi de l’UE anti-obésité logicielle.
J’ai aussi vu récemment sur GitHub le code source de MS Word for Windows 1.0. La publication originale se trouve au Computer History Museum et peut être consultée ici : https://computerhistory.org/blog/microsoft-word-for-windows-.... C’était du C pur, avec de grandes parties en assembleur, mais le code était d’une saleté sans commune mesure avec les standards, patterns et fonctionnalités de langage C/C++ actuels.
J’ai déjà lu cette formule : le logiciel est comme un gaz, il se dilate jusqu’à remplir l’espace disponible.
C’est pareil avec les distributions live. Avant, elles faisaient 700 Mo pour tenir sur un CD-R ; maintenant, il devient difficile d’en trouver une qui tienne sur une clé USB de 2 Go. Cela dit, c’est réjouissant de voir le “minimal” gagner du terrain.
Nvidia, qu’est-ce que vous nous faites télécharger au juste ? Des milliers de combinaisons de code généré qu’on n’utilisera jamais ?
Simplement, on met plus de temps à trouver ce qu’on veut au milieu de toutes les fonctionnalités lourdes qui ont été ajoutées.
Les logiciels minimalistes existent, mais les gens ne les choisissent pas beaucoup. On passe pas mal de temps à sélectionner prudemment ses dépendances, et cela mène à des stacks légères et performantes.
Ces temps-ci, j’aime des outils comme Lua, SQLite, Fennel[0], Althttpd[1], Fossil[2] et Mako Server[3]. On peut utiliser gratuitement d’excellents logiciels légers, stables et efficaces, mais il faut s’écarter un peu des sentiers battus. Ce ne sont pas les choses dont on entend le plus souvent parler sur Stack Overflow.
Pour le frontend, je suis un peu partagé. Je préfère les applications natives et les pages web, mais j’utilise Tiddlywiki tous les jours, et je pense que les web apps ont leur place. Cela dit, un onglet contenant un fichier Tiddlywiki de 6 Mo consomme 155 Mo de RAM, tandis qu’une session Emacs très personnalisée n’en utilise que 88 Mo ; je partage donc le constat de l’auteur.
[0]: https://fennel-lang.org/
[1]: https://sqlite.org/althttpd/doc/trunk/althttpd.md
[2]: https://fossil-scm.org/home/doc/trunk/www/index.wiki
[3]: https://makoserver.net/
Bien sûr, on peut aussi mal l’utiliser, mais il est presque stupéfiant de voir à quel point les programmes Lua peuvent être petits et efficaces par rapport à la plupart des autres langages.
À mon avis, le problème ressemble à peu près à ceci : un dirigeant d’entreprise estime que, pour être compétitifs, les développeurs ont besoin du meilleur matériel, et ceux-ci construisent des web apps sur des ordinateurs portables hautes performances avec 128 Go de RAM fournis par l’entreprise.
Ensuite, ils ne testent pas dans un environnement comme le PC familial de 2010 utilisé par leur père, ou pas assez souvent ni assez rigoureusement pour se rendre compte qu’une grande partie de l’application y est cassée ou inutilisable.
Cela met alors au premier plan le mobile first responsive, l’espace d’écran limité et les problèmes potentiels liés aux mauvaises connexions.
En général, quand on signale le problème au responsable produit, il l’écarte simplement. On peut donc reformuler le troisième point ainsi : “on teste aussi sur le PC familial de 2010, mais ce n’est pas un sujet pour les parties prenantes les plus importantes”.
Récemment, nous avons migré une vieille page, auparavant en HTML pur généré côté backend, vers React, et un simple menu déroulant contenant environ un millier d’éléments mettait plusieurs secondes à s’ouvrir. Avant, la page entière s’ouvrait en environ 100 ms.
Au début, quelqu’un a proposé de n’afficher que les 100 premiers éléments et de ne lancer le rendu qu’après que l’utilisateur a saisi trois caractères. C’est un peu la réalité d’aujourd’hui.
Bien sûr, en pratique, nous avons corrigé le très mauvais code React pour que le rendu soit instantané.
Si un nouveau framework rend le problème tellement évident que cela donne à quelqu’un une vraie raison de le corriger, cela devient plutôt une raison supplémentaire d’utiliser ce framework.
À force de mettre en avant des textes comme « idiomatic Ruby » ou « l’optimisation prématurée est la racine de tous les maux », et de dire que « le temps de développement compte plus que les performances », on en arrive là.
Avant, il y avait des développeurs qui écrivaient un meilleur code en moins de temps.
J’ai aussi vu beaucoup de code ancien absolument affreux, qui ne serait pas écrit aujourd’hui.