Si nous regardons le programme vintage Netscape Navigator ou une version antérieure de Microsoft Word, ces programmes mesuraient moins de 50 Mo. Maintenant, lorsque j'installe Google Chrome, il s'agit de 200 Mo et la version de bureau de Slack, de 300 Mo. J'ai lu certaines règles qui stipulent que les programmes utiliseront toute la mémoire disponible, peu importe la quantité mais pourquoi?
Pourquoi la taille actuelle des programmes est-elle si importante par rapport à il y a 10 ou 15 ans? Les programmes ne font pas beaucoup plus de fonctions et ne semblent pas très différents. Qu'est-ce que c'est que la ressource porc maintenant?
programming-practices
files
delivery
Niklas Rosencrantz
la source
la source
Réponses:
"Avoir une apparence très différente" est une question de perception. Les graphismes actuels doivent bien paraître à des résolutions d'écran totalement différentes de ce qu'ils étaient, avec pour résultat qu'une image 100x100 qui suffisait amplement à un logo paraissait maintenant terriblement collante. Il a fallu la remplacer par une image 1000x1000 de la même chose, soit un facteur de 100 ici. (Je sais que vous pouvez utiliser des graphiques vectoriels à la place, mais cela ne fait que souligner le fait que du code de rendu graphique vectoriel a dû être ajouté à des systèmes qui n'en avaient pas besoin auparavant. Il s'agit donc simplement d'un compromis entre un type d'augmentation de taille à un autre.)
"Travailler différemment" est également une question de perception. Le navigateur actuel en fait énormément plus qu'en 1995. (Essayez de surfer sur Internet avec un ordinateur portable historique un jour de pluie - vous verrez qu'il est presque inutilisable.) Peu d'entre eux sont très utilisés et leurs utilisations peuvent être complètement ignorantes. % d'entre eux, mais ils sont là.
À cela s’ajoute bien entendu la tendance générale à consacrer moins de temps à l’optimisation de l’espace et davantage à l’introduction de nouvelles fonctionnalités. Ceci est un effet secondaire naturel des ordinateurs plus grands, plus rapides et moins chers pour tout le monde. Oui, il serait possible d'écrire des programmes utilisant autant de ressources que d'habitude en 1990 et le résultat serait incroyablement rapide et fluide. Mais ce ne serait plus rentable; votre navigateur prendrait dix ans, mais les exigences auraient complètement changé. Les gens programmaient avec une extrême attention à l'efficacité parce que les machines lentes et petites d'antan l'ont forcé à le faire, et que tout le monde le faisait aussi. Dès que cela a changé, le goulot d'étranglement pour le succès du programme est passé de pouvoir fonctionner du tout à l'exécutionde plus en plus de choses brillantes , et voilà où nous en sommes maintenant.
la source
tendency to spend less time on optimizing things for space
Cette. Lorsque j'écris du code, je n'optimise ni l'espace ni la vitesse. J'optimise pour la maintenance. Il est plus important que la base de code puisse changer facilement que d'être rapide ou petit. Je peux m'attendre à ce que pour chaque réclamation relative à la vitesse du programme, j'obtienne dix demandes de nouvelles fonctionnalités et aucune demande pour la réduire.Si vous comparez Netscape Navigator à un navigateur moderne, il y a une énorme différence de fonctionnalité. Il suffit de comparer la spécification HTML 3.2 (51 pages lorsque je fais un aperçu avant impression) avec la spécification HTML actuelle (la version PDF fait 1155 pages). C'est 20 fois plus grand.
Netscape Navigator n'avait pas de DOM ni de CSS! Il n'y a eu aucune modification dynamique du document, aucun code JavaScript ne modifiant le DOM ou les feuilles de style. Aucun onglet. Pas d'audio ou de vidéo. Un navigateur moderne est un programme beaucoup plus complexe.
la source
EM
élément HTML 3.2 - huit ou neuf mots - avec la longueur de celle-ci dans la spécification HTML 5 - plus qu'un écran comprenant les éléments environnants décrivant l'élément, où il est applicable et quelle est son utilisation prévue.Une des raisons est que les données contenues dans les applications sont plus volumineuses, car leur résolution et leur qualité sont optimales. À l'époque de Netscape, une icône ne dépassait pas 32 x 32 pixels, avec une profondeur maximale de 8 bits (peut-être seulement 4), alors qu'elle est probablement de l'ordre de 64x64 et qu'elle est en vraie couleur avec transparence, ce qui signifie une profondeur de 32 bits. C'est 16 fois plus grand. Et l’espace est si bon marché que souvent les gens ne se donnent même pas la peine de cocher l’option «compressé» lors de la génération d’un fichier PNG.
Une autre raison est que les applications contiennent actuellement une quantité de données ahurissante, contrairement aux applications plus anciennes. Il existe aujourd'hui des applications livrées avec une présentation vidéo "pour commencer" .
Une autre raison est que les langages de programmation actuels ont tendance à aller de pair avec des environnements d'exécution riches, assez volumineux, pouvant atteindre 100 Mo chacun. Même si vous n'utilisez pas toutes les fonctionnalités de votre environnement d'exécution, vous devez quand même regrouper le tout dans votre application.
Mais la raison principale en est qu’aujourd’hui, il existe des tonnes et des tonnes de bibliothèques que nous pouvons utiliser dans nos applications, et nous avons développé une culture de l’utilisation des bibliothèques afin d’éviter la réinvention constante de la roue. Bien sûr, lorsque vous commencez à utiliser les bibliothèques, plusieurs questions se posent et nous avons pris l’habitude de leur donner les réponses les plus libérales:
Vaut-il la peine d’inclure une autre bibliothèque si elle n’est utilisée que par une de mes fonctions? - oui
Vaut-il la peine d'inclure encore une autre bibliothèque si je n'ai besoin que d'un petit sous-ensemble de toute la richesse des fonctionnalités offertes par cette bibliothèque? - oui
Vaut-il la peine d'inclure encore une autre bibliothèque si son inclusion ne me sauve que de deux jours de travail? - oui
Vaut-il la peine d’inclure plusieurs bibliothèques qui servent plus ou moins le même objectif simplement parce que différents programmeurs de ma liste de paie sont déjà familiarisés avec différentes bibliothèques? - oui
(Veuillez noter que je ne fais qu'observer ces tendances, je ne déclare absolument pas si je suis d'accord ou non avec elles.)
Une autre raison à noter est que, pour tenter de choisir l’application à utiliser parmi plusieurs choix, certains utilisateurs pensent que celle qui occupe plus d’espace sera plus riche en fonctionnalités, aura des graphismes plus sophistiqués, etc. (Ce qui est totalement absurde .)
Donc, pour conclure, les logiciels se comportent-ils comme du gaz? At-il tendance à occuper tout l’espace disponible? Dans un certain sens, oui, mais pas dans une mesure alarmante. Si nous regardons ce qui se passe le plus de place sur nos disques, pour la plupart d' entre nous , la réponse est qu'il n'y a pas des applications, mais les médias tels que les films et la musique de loin . Les logiciels n'ont pas gonflé au même rythme que la capacité de stockage, et il est peu probable que cela se produise jamais. Par conséquent, les applications représenteront probablement une fraction négligeable de l'espace de stockage disponible pour les utilisateurs.
la source
En plus des autres pays, il y a 10 ans, il existait généralement des versions séparées pour les versions localisées / internationalisées. Désormais, les programmes vont généralement intégrer une prise en charge complète de la localisation dans chaque version publiée, ce qui correspond à la taille du programme.
la source
Une des raisons est les dépendances. Un programme riche en fonctionnalités et en apparence a besoin de beaucoup de choses - cryptage, vérification orthographique, utilisation de XML et JSON, édition de texte, etc. D'où viendraient-ils? Peut-être que vous roulez les vôtres et que vous les gardez aussi petits que possible. Très probablement, vous utilisez des composants tiers (Open Source sous licence MIT, par exemple) qui possèdent de nombreuses fonctionnalités dont vous n’avez jamais besoin, mais lorsque vous avez besoin d’une seule fonction à partir d’un composant tiers, vous devez souvent transporter l’ensemble du composant. Vous ajoutez donc de plus en plus de dépendances et au fur et à mesure qu’elles évoluent et grandissent, votre programme qui en dépend grandit également.
la source
Bien que les graphiques / la convivialité soient effectivement des facteurs contributifs, il y en a énormément qui est du code compilé par bibliothèque / excès.
Exemple de faible consommation de code: MenuetOS, un système d’exploitation 64 bits complet doté d’applications puissantes et pouvant être inséré sur une seule disquette.
Exemple de grosseur de code sans raison évidente: j’ai créé une simple sortie de texte "Hello, World!" à Ada récemment. L'exécutable compilé était supérieur à 1 MiB !. Le même exécutable dans l’assemblage est juste un KiB ou 2 (et la majeure partie de cela est une surcharge exécutable, le code en cours d’exécution est composé de dizaines d’octets).
la source
Il est trivialement vrai que le logiciel doit être conçu de manière à s’adapter à deux choses: les utilisateurs et le matériel disponible. Un programme est adapté à son objectif s'il fait ce que l'utilisateur souhaite en temps voulu avec le matériel à sa disposition. Bien duh. Mais au fur et à mesure que le matériel informatique améliore sensiblement toutes les dimensions mesurables, le nombre de programmes discrets qui évoluent d'inaptitude à adaptation augmente: l'espace de conception s'agrandit:
la source
Ceci est certainement vrai pour les applications Android. Il y a quatre ans, une application simple prenait environ 2 à 5 mégaoctets. De nos jours, une application simple prend environ 10 à 20 mégaoctets.
Plus l'espace disponible est grand, plus la taille de l'application est grande.
Je pense qu'il y a deux raisons principales dans le cas d'Android:
Google a étendu le cadre Android et ajouté de nombreuses nouvelles fonctionnalités.
Les développeurs ne s'en soucient plus. Les images sont incluses dans une résolution beaucoup plus élevée (bien sûr, les résolutions d'écran du smartphone ont été augmentées), les bibliothèques tierces sont incluses sans réfléchir.
la source
Cela dépend en grande partie du temps passé par le développeur et de son coût. À l'époque où Visual Basic est arrivé pour la première fois sur le marché, il était en concurrence avec C / C ++ et le gros problème était que vous pouviez écrire «Hello World» dans ANSI C pour Windows à environ 15K. Le problème avec VB était que vous aviez toujours l'albatros de la bibliothèque d'exécution 300K.
Désormais, vous pourriez multiplier par 10 la taille de votre programme VB, mais ce ne serait encore que quelques K de plus, mais 10 fois la taille de votre programme C / C ++ et vous envisagez un développement de quelques mois.
En fin de compte, le fardeau de vos applications est un faible prix à payer pour les énormes sauts dans la production de développement, la réduction du prix et l’immensité des capacités qui n’auraient jamais été possibles dans les vieux jours de développement conçus à la main; quand les programmes étaient petits et rapides mais aussi faibles, incompatibles les uns avec les autres, sous-développés et coûteux à développer.
la source
Au fil du temps, les besoins des utilisateurs évoluent et sont de plus en plus exigeants. Les éditeurs / auteurs de différents logiciels sont donc obligés de satisfaire ces besoins au nom de la concurrence.
Mais satisfaire un nouveau besoin signifie souvent ajouter un nouveau code. Nouveau code signifie nouvelles vulnérabilités à corriger. La correction de nouvelles vulnérabilités peut ajouter du code ou ouvrir des portes à de nouvelles vulnérabilités.
Chaque fonctionnalité ajoutée pour satisfaire les besoins d'un utilisateur peut nécessiter plus de puissance de processeur pour plus de rapidité (nous nous plaignons tous de la vitesse de tel ou tel navigateur), de nouvelles ressources graphiques pour de meilleurs effets visuels ... etc.
Tout cela implique l'ajout de nouvelles couches d'applications (code), de sécurité et parfois de matériel.
la source
Une grande partie de la taille provient de bibliothèques intégrées. De nos jours, de nombreuses applications sont construites à l'aide d'électron, qui regroupe énormément d'applications. Si vous installez des applications sur Linux, elles sont généralement beaucoup plus petites, car une grande partie de l’application est déjà installée via des bibliothèques partagées que d’autres programmes utilisent également.
la source
Lors de la construction du logiciel, si vous avez besoin de la fonction A, vous importerez un module A *. A * peut résoudre A, mais A * peut résoudre des problèmes plus que A, et A * peut être volumineux. Tous les grands modules donnent lieu à un logiciel de grande taille.
Peut-être pas la même chose, mais quelque chose comme ceci: Si vous avez juste besoin d’imprimer "hello world" sur une console en utilisant Java, vous devez avoir installé JRE (> 60 Mo).
Si l'exemple de Java n'est pas bon, essayez celui-ci: si le logiciel doit se connecter à un fichier, il peut utiliser un module de journalisation qui peut réellement créer des journaux sur une base de données, sur le réseau et sur d'autres fonctionnalités, mais ces fonctions ne sont jamais utilisées le projet.
la source
code
. Je soutiens que cela ne répond pas vraiment à la question. La deuxième section utilise Java comme exemple (bien qu’essayer de prétendre que le JRE devrait être considéré comme faisant partie de la croissance de la taille de l’application - ce qui manque encore l’objet de la question et qui n’est pas un exemple juste et continue à perpétuer la malentendus de Java). Dans l’ensemble, c’est soit faux, soit répète des points dans des réponses précédentes, mieux rédigées.Ce n'est pas tout à fait vrai. Les systèmes ne libèrent pas la mémoire qu'ils ont utilisée tant que le système d'exploitation n'est pas soumis à une pression mémoire. C'est une amélioration de la performance. Si vous parcouriez une page contenant des images, vous vous éloignez. Vous pouvez revenir en arrière et avoir à nouveau besoin de l'image. Si le système d'exploitation dispose de la mémoire RAM, inutile de l'effacer tant que vous n'êtes pas certain de ne plus en avoir besoin.
Si vous effacez immédiatement la mémoire, les cycles de la CPU et la bande passante de la mémoire seraient éloignés de la mémoire de l'utilisateur, qui souhaitera probablement que des pages Web très réactives soient affichées à l'écran.
Le système d'exploitation consomme toute la mémoire non disponible, dont la majorité est destinée au cache du système de fichiers.
La gestion de la mémoire est un problème difficile à résoudre, mais des personnes très intelligentes y travaillent tout le temps. Rien n'est délibérément gaspillé et l'objectif principal est de vous fournir un ordinateur très réactif.
la source
Il se peut que les programmes tendent à s’étendre pour occuper l’espace disponible, à l’instar du phénomène de banlieue qui consiste à ajouter de nouvelles voies à une autoroute encombrée et à rétablir l’encombrement du trafic en quelques années.
Mais si vous examinez la situation, vous constaterez peut-être que leurs programmes font plus de choses. Les navigateurs, par exemple, exécutent des graphismes plus sophistiqués, ont des outils de développement sophistiqués qui n'existaient pas il y a quelques années, etc. Ils se connectent également à de nombreuses bibliothèques, n'utilisant parfois qu'une petite partie du code. Ainsi, bien que la taille des programmes puisse augmenter pour remplir la mémoire disponible, cela peut être dû à des raisons légitimes.
la source
Les bibliothèques construites sur des objets qui ne sont pas optimisés nécessitent plus de mémoire pour charger, installer et davantage de cycles de calcul. Le code objet est pour la plupart gonflant.
Parcourez simplement le code C ++ standard en cours d'exécution pour afficher tous les appels d'objet assert () ed afin de vous assurer qu'ils sont des objets valides. Lorsque vous concevez couche après couche des objets encapsulant, les sous-couches sont gonflées et opaques. Les programmeurs deviennent paresseux et prennent plus d'objets parce que c'est plus rapide que de redéfinir ce qui se limite aux fonctionnalités nécessaires. C'est vraiment aussi simple que cela.
Considérez la taille du noyau Linux C, uniquement le noyau, par rapport à la taille des applications personnalisées. Le noyau peut exécuter la machine entière. Mais il n'a pas été construit aussi rapidement que les applications, il faut du temps pour créer les meilleures fonctionnalités.
la source