Wenn wir uns das alte Programm Netscape Navigator oder eine frühe Version von Microsoft Word ansehen, waren diese Programme weniger als 50 MB groß. Wenn ich jetzt Google Chrome installiere, sind es 200 MB und die Desktop-Version von Slack 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 derzeitigen 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 Rohstoffschwein?
programming-practices
files
delivery
Niklas Rosencrantz
quelle
quelle
Antworten:
"Ganz anders aussehen" ist eine Frage der Wahrnehmung. Heutige Grafiken müssen bei völlig anderen Bildschirmauflösungen als früher gut aussehen, mit dem Ergebnis, dass ein 100x100-Bild, das früher mehr als gut genug für ein Logo war, jetzt fürchterlich klebrig aussieht. Es musste durch ein 1000x1000-Bild desselben ersetzt werden, was genau dort einen Faktor von 100 darstellt. (Ich weiß, dass Sie stattdessen Vektorgrafiken verwenden können, aber das unterstreicht nur den Punkt: Der Rendering-Code für Vektorgrafiken musste zu Systemen hinzugefügt werden, die ihn zuvor nicht benötigten. Dies ist also nur ein Kompromiss aus einer Art der Vergrößerung zum anderen.)
"Anders arbeiten" ist ebenfalls eine Frage der Wahrnehmung. Die heutige Browser hat massiv mehr Dinge , als ein aus dem Jahr 1995. (Versuchen Sie das Internet mit einem historischen Laptop an einem regnerischen Tag surfen -. Sie finden es fast unbrauchbar ist) Nicht viele von ihnen verwendet werden , sehr viel, und der Verwendung von 90 völlig unbekannt sein kann % von ihnen, aber sie sind da.
Hinzu kommt natürlich die allgemeine Tendenz, weniger Zeit für die Optimierung der räumlichen Gegebenheiten und mehr für die Einführung neuer Funktionen aufzuwenden. Dies ist eine natürliche Nebenwirkung größerer, schnellerer und billigerer Computer für jedermann. Ja, es wäre möglich, Programme zu schreiben, die so ressourcenschonend sind wie 1990, und das Ergebnis wäre erstaunlich schnell und glatt. Aber es wäre nicht mehr wirtschaftlich; Die Fertigstellung Ihres Browsers würde zehn Jahre dauern. Bis dahin hätten sich die Anforderungen vollständig geändert. Früher wurde bei der Programmierung größter Wert auf Effizienz gelegt, weil die langsamen kleinen Maschinen sie früher dazu gezwungen hatten, und alle anderen machten das auch. Sobald sich dies änderte, verlagerte sich der Engpass für den Programmerfolg von überhaupt lauffähig auf lauffähigImmer mehr glänzende Dinge , und dort sind wir jetzt.
quelle
tendency to spend less time on optimizing things for space
Diese. Wenn ich Code schreibe, optimiere ich nicht auf Speicherplatz oder Geschwindigkeit. Ich optimiere für die Wartung. Es ist wichtiger, dass die Codebasis leicht geändert werden kann, als schnell oder klein zu sein. Ich kann davon ausgehen, dass ich für jede Beschwerde über die Programmgeschwindigkeit zehn Anfragen nach neuen Funktionen und null Anfragen bekomme, um sie zu verkleinern.Wenn Sie Netscape Navigator auf einen modernen Browser vergleichen zu können , 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 aktuellen 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 modifizierte. Keine Tabs. Kein Audio oder Video. Ein moderner Browser ist ein weitaus komplexeres Programm.
quelle
EM
Elements - acht oder neun Wörter - mit der Länge derselben in der HTML 5-Spezifikation - für mich mehr als ein Bildschirm mit umgebendem Material, das das Element beschreibt, wo es ist anwendbar und wie es verwendet werden soll.Ein Grund dafür ist, dass die in Anwendungen gepackten Daten größer sind, da 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ß, mit höchstens 8 Bit Tiefe (möglicherweise nur 4), während es jetzt wahrscheinlich 64 x 64 Pixel groß ist und in Echtfarben mit Transparenz, dh 32 Bit Tiefe, angezeigt wird. Das ist 16 mal größer. Und der Speicherplatz ist so günstig, dass sich die Leute oft nicht einmal die Mühe machen, die Option "Komprimiert" zu aktivieren, wenn sie ein PNG generieren.
Ein weiterer Grund ist, dass Anwendungen heutzutage eine umwerfende Datenmenge mit sich führen, die ältere Anwendungen nicht hatten. Heutzutage gibt es Anwendungen, die zusammen mit einer Präsentation "Erste Schritte" in Videos ausgeliefert werden .
Ein weiterer Grund ist, dass Programmiersprachen heutzutage in der Regel mit umfangreichen Laufzeitumgebungen mit jeweils 100 MB zusammenarbeiten. Auch wenn Sie nicht alle Funktionen Ihrer Laufzeitumgebung nutzen, müssen Sie das Ganze mit Ihrer App packen.
Der Hauptgrund ist jedoch, dass es heutzutage Unmengen von Bibliotheken gibt, die wir in unseren Anwendungen verwenden können, und wir haben eine Kultur der Bibliotheksnutzung entwickelt, um die ständige Neuerfindung des Rads zu vermeiden. Wenn Sie mit der Nutzung von Bibliotheken beginnen, tauchen natürlich mehrere Fragen auf, und wir haben die Gewohnheit, die liberalsten Antworten darauf zu geben:
Lohnt es sich, noch eine Bibliothek hinzuzufügen, wenn sie nur von einer meiner Funktionen verwendet wird? - ja.
Lohnt es sich, noch eine weitere Bibliothek einzubeziehen, wenn ich nur einen winzigen Teil des gesamten Funktionsumfangs dieser Bibliothek benötige? - ja.
Lohnt es sich, noch eine weitere Bibliothek einzubeziehen, wenn ich durch die Einbindung nur 2 Arbeitstage Zeit habe? - ja.
Lohnt es sich, mehrere Bibliotheken einzubeziehen, die mehr oder weniger denselben Zweck erfüllen, nur weil verschiedene Programmierer auf meiner Gehaltsliste bereits mit verschiedenen Bibliotheken vertraut sind? - ja.
(Bitte beachten Sie, dass ich nur diese Tendenzen beobachte und keine Aussage darüber mache, ob ich ihnen zustimme oder nicht.)
Ein weiterer erwähnenswerter Grund ist, dass einige Benutzer bei der Entscheidung, welche Anwendung sie unter mehreren Optionen verwenden möchten, der Ansicht sind, dass die Anwendung, die mehr Platz einnimmt, mehr Funktionen bietet, schickere Grafiken usw. (was natürlich völliger Unsinn ist) .)
Verhält sich Software also wie Gas? Nimmt es tendenziell den gesamten verfügbaren Platz ein? In gewissem Sinne ja, aber nicht in alarmierendem Ausmaß. Wenn wir uns ansehen, was den meisten Speicherplatz auf unseren Laufwerken einnimmt, ist die Antwort für die meisten von uns, dass es sich bei weitem nicht um Anwendungen handelt, sondern um Medien wie Filme und Musik . Software hat sich nicht mit der Geschwindigkeit aufgebläht, mit der sich die Speicherkapazität vergrößert hat, und es ist unwahrscheinlich, dass dies jemals der Fall sein wird. In Zukunft dürften Anwendungen daher einen vernachlässigbaren Teil des für Benutzer verfügbaren Speicherplatzes ausmachen.
quelle
Zusätzlich zu den anderen Ansern hätte es vor 10 Jahren typischerweise separate Versionen für lokalisierte / internationalisierte Versionen gegeben. Nun 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.
quelle
Ein Grund sind Abhängigkeiten. Ein Programm mit vielen Funktionen und einem guten Aussehen muss noch viele Dinge erledigt werden - 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 haben, die Sie eigentlich nie benötigen. Wenn Sie jedoch eine einzelne Funktion von einer Drittanbieterkomponente benötigen, müssen Sie häufig die gesamte Komponente mit sich herumtragen. Sie fügen also immer mehr Abhängigkeiten hinzu und während sie sich entwickeln und erweitern, wächst auch Ihr Programm, das von ihnen abhängt.
quelle
Während die Grafik / Benutzerfreundlichkeit in der Tat Faktoren sind, gibt es eine Menge davon, die Bibliothek / überschüssigen kompilierten Code.
Ein 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.
Ein 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 der Assembly ist nur ein KiB oder 2 (und der größte Teil davon ist übermäßig ausführbar, der aktuelle Ausführungscode besteht aus mehreren zehn Bytes).
quelle
Es ist trivial, dass Software so gebaut werden muss, dass sie zwei Dinge erfüllt: Die Benutzer und die verfügbare Hardware. Ein Programm ist für seinen Zweck geeignet, wenn es mit der dem Benutzer zur Verfügung stehenden Hardware rechtzeitig das tut, was der Benutzer wünscht. Na duh. Da sich die Hardware in praktisch allen messbaren Dimensionen verbessert, nimmt die Anzahl der diskreten Programme zu, die von "nicht fit" zu "fit" wechseln.
quelle
Dies gilt definitiv für Android-Anwendungen. Vor vier Jahren nahm eine einfache App etwa 2-5 Megabyte Platz ein. Heutzutage benötigt eine einfache App etwa 10-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 Android-Framework erweitert und viele neue Funktionen hinzugefügt.
Entwickler interessieren sich nicht mehr. Bilder sind in einer viel höheren Auflösung enthalten (natürlich sind die Bildschirmauflösungen des Smartphones erhöht), Bibliotheken von Drittanbietern sind gedankenlos enthalten.
quelle
Ein Großteil davon hängt von der Entwicklerzeit und den Kosten dieser Zeit ab. In den Tagen, in denen Visual Basic zum ersten Mal auf den Markt kam, konkurrierte es mit C / C ++ und das große Problem war, dass man in ANSI C für Windows 'Hello World' in vielleicht 15K schreiben konnte. Das Problem mit VB war, dass Sie immer den Albatros der 300K-Laufzeitbibliothek hatten.
Jetzt könnten Sie das 10-fache der Größe Ihres VB-Programms erreichen und es wären immer noch nur ein paar K mehr, aber das 10-fache der Größe Ihres C / C ++ - Programms und Sie sehen ein paar Monate mehr Entwicklung.
Am Ende ist das Aufblähen Ihrer Anwendungen ein geringer Preis für die enormen Sprünge in der Entwicklungsproduktion, die Preissenkung und die enormen Fähigkeiten, die in den alten Tagen der handgefertigten Entwicklung niemals möglich gewesen wären. Wenn Programme klein und schnell, aber auch schwach waren, inkompatibel miteinander, unterdurchschnittlich und teuer in der Entwicklung.
quelle
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 befriedigen, muss häufig neuer Code hinzugefügt werden. Neuer Code bedeutet, dass neue Sicherheitslücken behoben werden müssen. Das Beheben neuer Sicherheitsanfälligkeiten kann Code hinzufügen oder Türen für neue Sicherheitsanfälligkeiten öffnen.
Jede hinzugefügte 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, neue Schichten von Anwendungen (Code), Sicherheit und manchmal Hardware hinzuzufügen.
quelle
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 sie normalerweise viel kleiner, da ein Großteil der Anwendung bereits über gemeinsam genutzte Bibliotheken installiert ist, die auch andere Programme verwenden.
quelle
Wenn Sie beim Erstellen von Software die Funktion A benötigen, importieren Sie ein Modul A *. A * kann A lösen, aber A * kann Probleme mehr als A lösen, und A * könnte groß sein. Alle großen Module ergeben die große Software.
Möglicherweise nicht der gleiche Fall, aber so ähnlich: Wenn Sie nur "Hallo Welt" auf der Konsole mit Java drucken möchten, müssen Sie JRE (> 60 MB) installiert haben.
Wenn das Java-Beispiel nicht gut ist, probieren Sie Folgendes aus: Wenn die Software in einer Datei protokollieren muss, verwendet sie möglicherweise ein Protokollierungsmodul, mit dem tatsächlich Protokolle in der Datenbank, über das Netzwerk und einige andere Funktionen erstellt werden können. Die Funktionen werden jedoch nie in verwendet das Projekt.
quelle
code
. Ich würde behaupten, dass es die Frage überhaupt nicht wirklich beantwortet. Der zweite Abschnitt verwendet Java als Beispiel (obwohl versucht wird, zu behaupten, dass die JRE als Teil des Wachstums der Anwendungsgröße betrachtet werden sollte - was wiederum den Punkt der Frage verfehlt und überhaupt kein faires Beispiel darstellt und das weiter fortführt) Missverständnisse von Java). Alles in allem ist es entweder falsch oder wiederholt Punkte in früheren, besser geschriebenen Antworten.Das stimmt nicht ganz. Systeme geben den verbrauchten Speicher erst frei, wenn das Betriebssystem unter Speicherdruck gerät. Dies ist eine Leistungsverbesserung. Wenn Sie auf einer Seite mit Bildern navigiert haben, navigieren Sie weg. Möglicherweise navigieren Sie zurück und benötigen das Bild erneut. Wenn das Betriebssystem über RAM verfügt, kann der Speicher erst gelöscht werden, wenn Sie sicher sind, dass Sie ihn nicht mehr benötigen.
Das sofortige Löschen des Speichers würde dem Benutzer die CPU-Zyklen und die Speicherbandbreite rauben, wenn höchstwahrscheinlich reaktionsschnelle Webseiten auf dem Bildschirm angezeigt werden sollen.
Das Betriebssystem belegt den gesamten verfügbaren Nicht-Anwendungsspeicher, von dem der Großteil für den Dateisystem-Cache bestimmt ist.
Die Speicherverwaltung ist ein schwieriges Problem, aber es gibt sehr clevere Leute, die die ganze Zeit daran arbeiten. Nichts wird absichtlich verschwendet und das Hauptziel ist es, Ihnen einen sehr reaktionsschnellen Computer zur Verfügung zu stellen.
quelle
Es kann sein, dass Programme dazu neigen, den verfügbaren Speicherplatz zu erweitern, ähnlich den Vorortphänomenen, bei denen Sie einer verriegelten Autobahn neue Fahrspuren hinzufügen und innerhalb weniger Jahre der Verkehr wieder gesichert wird.
Aber wenn Sie sich das ansehen, werden Sie vielleicht feststellen, dass die Programme tatsächlich mehr tun. Browser, die zum Beispiel schickere Grafiken ausführen, verfügen über ausgefeilte Entwicklertools, die es vor einigen Jahren noch nicht gab. Sie sind auch mit vielen Bibliotheken verknüpft und verwenden manchmal nur einen kleinen Teil des Codes. Während sich die Größe von Programmen erhöhen kann, um den verfügbaren Speicher zu füllen, kann dies aus legitimen Gründen geschehen.
quelle
Bibliotheken, die auf nicht optimierten Objekten basieren, benötigen mehr Speicher zum Laden, Installieren und mehr Rechenzyklen. Der Objektcode ist größtenteils aufgedunsen.
Führen Sie einfach den Standard-C ++ - Code aus, um alle assert () - Objektaufrufe anzuzeigen und sicherzustellen, dass es sich um gültige Objekte handelt. Wenn Sie eine Ebene über eine Ebene von Objekten entwerfen, die Objekte einkapseln, werden die Unterebenen aufgebläht und undurchsichtig. Programmierer werden faul und nehmen mehr Objekte an, weil es schneller ist als das Neugestalten, was auf die benötigte Funktionalität beschränkt ist. Es ist wirklich so einfach.
Betrachten Sie die Größe des Linux C-Kernels, nur den Kernel, im Vergleich zur Größe der maßgeschneiderten Anwendungen. Der Kernel kann die gesamte Maschine ausführen. Aber es war nicht so schnell wie Anwendungen, es braucht Zeit, um die beste Funktionalität zu erzielen.
quelle