it-swarm.com.de

Warum sind Programme so groß?

Wenn wir uns das Vintage-Programm Netscape Navigator oder eine frühe Version von Microsoft Word ansehen, waren diese Programme weniger als 50 MB groß. Wenn ich jetzt google installiere chrome es sind 200 MB und die Desktop-Version von Slack ist 300 MB. Ich habe über eine Regel gelesen, dass Programme den gesamten verfügbaren Speicher belegen, egal wie viel es ist, aber warum?

Warum sind die aktuellen Programmgrößen im Vergleich zu vor 10 oder 15 Jahren so groß? Die Programme haben nicht wesentlich mehr Funktionen und sehen nicht sehr unterschiedlich aus. Was ist jetzt das Ressourcenschwein?

190
Niklas

"Ganz anders aussehen" ist eine Frage der Wahrnehmung. Heutige Grafiken müssen bei völlig anderen Bildschirmauflösungen gut aussehen als früher, so dass ein 100x100-Bild, das früher mehr als gut genug für ein Logo war, jetzt schrecklich klebrig aussieht. Es musste durch ein 1000x1000-Bild derselben Sache ersetzt werden, was genau dort dem Faktor 100 entspricht. (Ich weiß, dass Sie stattdessen Vektorgrafiken verwenden können, aber das unterstreicht nur den Punkt: Der Rendercode für Vektorgrafiken musste zu Systemen hinzugefügt werden, die ihn zuvor nicht benötigten. Dies ist also nur ein Kompromiss zwischen einer Art von Größenerhöhung zum anderen.)

"Anders arbeiten" ist ebenfalls eine Frage der Wahrnehmung. Der heutige Browser macht massiv mehr als eines von 1995. (Versuchen Sie, an einem regnerischen Tag mit einem historischen Laptop im Internet zu surfen - Sie werden feststellen, dass es fast unbrauchbar ist.) Nicht viele davon werden sehr oft verwendet, und 90% von ihnen kennen sie vielleicht gar nicht, aber sie sind da.

Hinzu kommt natürlich die allgemeine Tendenz, weniger Zeit für die Optimierung des Raums und mehr für die Einführung neuer Funktionen aufzuwenden. Dies ist ein natürlicher Nebeneffekt größerer, schnellerer und billigerer Computer für alle. Ja, es wäre möglich, Programme zu schreiben, die so ressourceneffizient sind wie 1990, und das Ergebnis wäre erstaunlich schnell und raffiniert. Aber es wäre nicht mehr kostengünstig; Die Fertigstellung Ihres Browsers würde zehn Jahre dauern. Bis dahin hätten sich die Anforderungen vollständig geändert. Früher programmierten die Leute mit äußerster Aufmerksamkeit auf Effizienz, weil die langsamen, kleinen Maschinen von gestern sie dazu zwangen, und alle anderen taten es auch. Sobald sich dies änderte, verlagerte sich der Engpass für den Programmerfolg von der Möglichkeit, überhaupt zu laufen mehr und mehr glänzende Dinge , und dort sind wir jetzt.

266
Kilian Foth

Wenn Sie Netscape Navigator mit einem modernen Browser vergleichen, gibt es einen massiven Unterschied in der Funktionalität. Vergleichen Sie einfach die HTML 3.2 Spezifikation (51 Seiten, wenn ich eine Druckvorschau mache) mit der aktuelle HTML-Spezifikation (PDF-Version ist 1155 Seiten). Das ist eine 20-fache Vergrößerung.

Netscape Navigator hatte kein DOM und kein CSS! Es gab keine dynamischen Änderungen am Dokument, kein JavaScript, das das DOM oder die Stylesheets veränderte. Keine Registerkarten. Kein Audio oder Video. Ein moderner Browser ist ein wesentlich komplexeres Programm.

109
JacquesB

Ein Grund dafür ist, dass die in Anwendungen gepackten Daten größer sind, weil sie eine höhere Auflösung und Qualität aufweisen. Ein Symbol in den Tagen von Netscape war höchstens 32 x 32 Pixel groß, höchstens 8 Bit tief (möglicherweise nur 4 Pixel), während es jetzt wahrscheinlich 64 x 64 Pixel groß ist und in Echtfarbe mit Transparenz vorliegt, was 32 Bit Tiefe bedeutet. Das ist 16 mal größer. Und der Speicherplatz ist so billig, dass die Leute beim Generieren eines PNG oft nicht einmal die Option "komprimiert" aktivieren.

Ein weiterer Grund ist, dass Anwendungen heutzutage eine unglaubliche Datenmenge mit sich führen, was ältere Anwendungen nicht getan haben. Es gibt heute Anwendungen, die zusammen mit einer Präsentation "Erste Schritte" ausgeliefert werden im Video.

Ein weiterer Grund ist, dass Programmiersprachen heutzutage eher zu umfangreichen Laufzeitumgebungen passen, die ziemlich groß sind und jeweils 100 MB groß sind. Auch wenn Sie nicht alle Funktionen Ihrer Laufzeitumgebung nutzen, müssen Sie das Ganze mit Ihrer App verpacken.

Der Hauptgrund ist jedoch, dass es heute Tonnen und Tonnen von Bibliotheken gibt, die wir in unseren Anwendungen verwenden können, und wir haben eine Kultur der Verwendung von Bibliotheken entwickelt, um die ständige Neuerfindung des Rads zu vermeiden. Sobald Sie mit der Verwendung von Bibliotheken beginnen, tauchen natürlich mehrere Fragen auf, und wir haben uns angewöhnt, die liberalsten Antworten darauf zu geben:

  • Lohnt es sich, eine weitere Bibliothek aufzunehmen, wenn diese nur von einer meiner Funktionen verwendet werden soll? --ja.

  • Lohnt es sich, noch eine weitere Bibliothek aufzunehmen, wenn ich nur einen kleinen Teil der gesamten Funktionalität dieser Bibliothek benötige? --ja.

  • Lohnt es sich, noch eine Bibliothek aufzunehmen, wenn ich durch die Aufnahme nur 2 Arbeitstage ersparen kann? --ja.

  • Lohnt es sich, mehrere Bibliotheken aufzunehmen, die mehr oder weniger dem gleichen Zweck dienen, nur weil verschiedene Programmierer auf meiner Gehaltsliste bereits mit verschiedenen Bibliotheken vertraut sind? --ja.

    (Bitte beachten Sie, dass ich nur diese Tendenzen beobachte und keinerlei Aussage darüber mache, ob ich ihnen zustimme oder nicht.)

Ein weiterer erwähnenswerter Grund ist, dass einige Benutzer bei der Entscheidung, welche Anwendung aus mehreren Auswahlmöglichkeiten verwendet werden soll, denken Sie, dass derjenige, der mehr Platz einnimmt, mehr Funktionen bietet, schickere Grafiken usw. (Was natürlich völliger Unsinn ist.)

Benimmt sich Software also wie Gas? Nimmt es tendenziell den gesamten verfügbaren Platz ein? In gewissem Sinne ja, aber nicht in alarmierendem Maße. Wenn wir uns ansehen, was den meisten Speicherplatz auf unseren Laufwerken einnimmt, lautet die Antwort für die meisten von uns, dass es sich nicht um Anwendungen handelt, sondern um Medien wie Filme und Musik bei weitem =. Software hat sich nicht mit der Geschwindigkeit aufgebläht, mit der die Speicherkapazität erweitert wurde, und es ist unwahrscheinlich, dass dies jemals der Fall sein wird. Daher werden Anwendungen in Zukunft wahrscheinlich einen vernachlässigbaren Bruchteil des Speicherplatzes darstellen für Benutzer verfügbar.

79
Mike Nakis

Zusätzlich zu den anderen Ansern gab es vor 10 Jahren normalerweise separate Versionen für lokalisierte/internationalisierte Versionen. Jetzt ist es im Allgemeinen so, dass Programme die vollständige Lokalisierungsunterstützung in jeder veröffentlichten Version bündeln, die die Programmgröße auffüllt.

16
Eterm

Ein Grund sind Abhängigkeiten. Ein Programm mit umfangreichen Funktionen und gutem Aussehen muss viele Dinge erledigen - Verschlüsselung, Rechtschreibprüfung, Arbeiten mit XML und JSON, Textbearbeitung und viele andere Dinge. Woher würden sie kommen? Vielleicht rollst du deine eigenen und hältst sie so klein wie möglich. Höchstwahrscheinlich verwenden Sie Komponenten von Drittanbietern (möglicherweise MIT-lizenziertes Open Source), die viele Funktionen bieten, die Sie eigentlich nie benötigen. Wenn Sie jedoch eine einzelne Funktion einer Komponente von Drittanbietern benötigen, müssen Sie häufig die gesamte Komponente mit sich herumtragen. Sie fügen also immer mehr Abhängigkeiten hinzu und mit der Entwicklung und Erweiterung Ihres Programms wächst auch das von ihnen abhängige Programm.

13
sharptooth

Während die Grafik/Benutzerfreundlichkeit tatsächlich Faktoren sind, gibt es eine Menge davon, die Bibliothek/überschüssiger kompilierter Code sind.

Beispiel dafür, wie klein Code noch sein kann: MenuetOS, ein vollständiges 64-Bit-Betriebssystem mit leistungsstarken Apps, das auf eine einzelne Diskette passt.

Beispiel dafür, wie groß Code ohne ersichtlichen Grund sein kann: Ich habe eine einfache Textausgabe "Hallo Welt!" in Ada vor kurzem. Die kompilierte ausführbare Datei war über 1 MiB!. Dieselbe ausführbare Datei in Assembly ist nur ein KiB oder 2 (und der Großteil davon ist ausführbarer Overhead, der tatsächlich ausgeführte Code beträgt mehrere zehn Bytes).

10
Brian Knoblauch

Es ist trivial wahr, dass Software so gebaut werden muss, dass sie zwei Dingen entspricht: den Benutzern und der verfügbaren Hardware. Ein Programm ist für seinen Zweck geeignet, wenn es mit der ihm zur Verfügung stehenden Hardware rechtzeitig das tut, was der Benutzer will. Na duh. Da sich die Hardware jedoch in praktisch allen messbaren Dimensionen verbessert, nimmt die Anzahl der diskreten Programme zu, die von ungeeignet zu passend wechseln - der Entwurfsraum wird größer:

  • Höhere Sprachen ermöglichen es, Ideen in weniger Code und Zeit als zuvor auszudrücken. Diese geringere Komplexität ermöglicht es umgekehrt, immer komplexere Ideen auszudrücken.
  • Bündelung Mehr Daten mit der Anwendung können sie sofort benutzerfreundlicher machen. Zum Beispiel wird es wahrscheinlich nicht lange dauern, bis Anwendungen zur Rechtschreibprüfung mit jeder der Menschheit bekannten Sprache gebündelt werden - schließlich sind es nur ein paar Gigabyte.
  • Hardware-Kompromisse ermöglichen Entwicklern und Benutzern eine größere Auswahl an Ressourcen, die sie interessieren. Siehe zum Beispiel FLAC/OGG gegen WAV, SVG gegen PNG, Datenbankindizes.
  • Humane Interfaces Tauschen Sie häufig die bisherige Menge an Hardware aus, um die Benutzerfreundlichkeit zu gewährleisten. Anti-Aliasing, hohe Auflösungen, schnelles Aktualisieren und Wechseln zwischen diskreten Bedienfeldern sorgen für ein realistischeres und daher intuitiveres und verlässlicheres Erlebnis.
7
l0b0

Dies gilt definitiv für Android -Anwendungen. Vor vier Jahren benötigte eine einfache App etwa 2 bis 5 Megabyte Speicherplatz. Heutzutage benötigt eine einfache App etwa 10 bis 20 Megabyte Speicherplatz.

Je mehr Speicherplatz verfügbar ist, desto größer ist die App.

Ich denke, dass es bei Android zwei Hauptgründe gibt:

  • Google hat das Framework Android) erweitert und viele neue Funktionen hinzugefügt.

  • Entwickler kümmern sich nicht mehr darum. Bilder sind in einer weitaus höheren Auflösung enthalten (natürlich wurden die Bildschirmauflösungen des Smartphones erhöht), Bibliotheken von Drittanbietern sind gedankenlos enthalten.

6
Mike76

Vieles läuft auf die Entwicklerzeit und die Kosten dieser Zeit hinaus. Damals, als Visual Basic zum ersten Mal auf den Markt kam, konkurrierte es mit C/C++ und der große Nachteil war, dass man in ANSI C für Windows in vielleicht 15 KB 'Hello World' schreiben konnte. Das Problem mit VB war, dass Sie immer den Albatros der 300K-Laufzeitbibliothek hatten.

Jetzt könnten Sie die 10-fache Größe Ihres VB-Programms) und es wären immer noch nur ein paar K mehr, aber die 10-fache Größe Ihres C/C++ - Programms, und Sie sehen sich einige MONATE an mehr Entwicklung.

Am Ende ist das Aufblähen Ihrer Anwendungen ein kleiner Preis für die enormen Sprünge in der Entwicklungsproduktion, die Preissenkung und die enorme Bandbreite an Funktionen, die in den alten handgefertigten Tagen der Entwicklung niemals möglich gewesen wären. Wenn Programme klein und schnell, aber auch schwach, nicht miteinander kompatibel, unterfunktioniert und teuer in der Entwicklung waren.

4
andyb

Mit der Zeit entwickeln sich die Bedürfnisse der Benutzer und werden immer anspruchsvoller, so dass Anbieter/Autoren verschiedener Software gezwungen sind, diese Bedürfnisse im Namen des Wettbewerbs zu befriedigen.

Um einen neuen Bedarf zu decken, muss jedoch häufig neuer Code hinzugefügt werden. Neuer Code bedeutet, dass neue Schwachstellen behoben werden müssen. Das Beheben neuer Schwachstellen kann Code hinzufügen oder Türen zu neuen Schwachstellen öffnen.

Jede zusätzliche Funktion, um die Bedürfnisse eines Benutzers zu befriedigen, benötigt möglicherweise mehr Prozessorleistung für die Geschwindigkeit (wir alle beschweren uns über die Geschwindigkeit dieses oder jenes Browsers), neue grafische Ressourcen für bessere visuelle Effekte ... usw.

All dies bedeutet das Hinzufügen neuer Ebenen von Anwendungen (Code), Sicherheit und manchmal Hardware.

2
user167772

Ein Großteil der Größe stammt aus eingebauten Bibliotheken. Viele Anwendungen werden heutzutage mit Elektronen erstellt, die eine große Menge mit der Anwendung bündeln. Wenn Sie Anwendungen unter Linux installieren, sind diese normalerweise viel kleiner, da ein Großteil der Anwendung bereits über gemeinsam genutzte Bibliotheken installiert ist, die auch von anderen Programmen verwendet werden.

1
Qwertie