kiss.html | ||
Sprachen »de« en Benutzerkonto
|
KISS: Keep it simple, stupid!EinleitungEin altes Sprichwort sagt: "In der Kürze liegt die Würze". Das gilt natürlich auch für die Programmierung. Ein kleineres Programm wird sicher schneller geladen, und läuft im allgemeinen auch schneller. Ein vergleichendes BeispielEs ist schon erstaunlich, dass relativ komplizierte Programme wie rasmol oder xfig einiges schneller starten als ein simpler Texteditor wie kedit. Oder sollte ich eher sagen, dass es eine Schande ist? ProblemanalyseSchaut man sich den Quellcode von kedit an, sieht das Programm eigentlich recht schlank aus. Auch die Grösse des Ausführbaren Programmes ist minim:
Tatsächlich hat der Autor von kedit im Vergleich zu jenem von xfig ein winziges Programm geschrieben. Aber weshalb dauert der Start von ersterem trotzdem so lange? Die Erklärung wird recht einfach, wenn wir uns mit ldd die Libraries anzeigen lassen, die mit den beiden Programmen verlinkt sind: für kedit portablix:/usr/src/current/kdeutils/kedit# ldd /opt/kde2/bin/kedit kedit.so.0 => /opt/kde2/lib/kedit.so.0 (0x0ffbb000) libkspell.so.3 => /opt/kde2/lib/libkspell.so.3 (0x0ff78000) libkfile.so.3 => /opt/kde2/lib/libkfile.so.3 (0x0febb000) libksycoca.so.3 => /opt/kde2/lib/libksycoca.so.3 (0x0fe01000) libkio.so.3 => /opt/kde2/lib/libkio.so.3 (0x0fd3d000) libkdeui.so.3 => /opt/kde2/lib/libkdeui.so.3 (0x0fadb000) libkdesu.so.1 => /opt/kde2/lib/libkdesu.so.1 (0x0fa99000) libkdecore.so.3 => /opt/kde2/lib/libkdecore.so.3 (0x0f927000) libdl.so.2 => /lib/libdl.so.2 (0x0f904000) libDCOP.so.1 => /opt/kde2/lib/libDCOP.so.1 (0x0f8c3000) libqt.so.2 => /usr/lib/qt/lib/libqt.so.2 (0x0f2b2000) libpng.so.2 => /usr/lib/libpng.so.2 (0x0f268000) libjpeg.so.6 => /usr/lib/libjpeg.so.6 (0x0f1f3000) libXext.so.6 => /usr/X11R6/lib/libXext.so.6 (0x0f1c4000) libX11.so.6 => /usr/X11R6/lib/libX11.so.6 (0x0f0db000) libSM.so.6 => /usr/X11R6/lib/libSM.so.6 (0x0f0b1000) libICE.so.6 => /usr/X11R6/lib/libICE.so.6 (0x0f079000) libutil.so.1 => /lib/libutil.so.1 (0x0f057000) libz.so.1 => /usr/lib/libz.so.1 (0x0f028000) libstdc++-libc6.1-2.so.3 => /usr/lib/libstdc++-libc6.1-2.so.3 (0x0efb0000) libm.so.6 => /lib/libm.so.6 (0x0ef63000) libc.so.6 => /lib/libc.so.6 (0x0ee4d000) /lib/ld.so.1 => /lib/ld.so.1 (0x30000000) Insgesamt 23 Librariesfür xfig portablix:/usr/src/current/kdeutils/kedit# ldd /usr/X11R6/bin/xfig libjpeg.so.62 => /usr/lib/libjpeg.so.62 (0x0ff8d000) libm.so.6 => /lib/libm.so.6 (0x0ff40000) libXpm.so.4 => /usr/X11R6/lib/libXpm.so.4 (0x0ff11000) libXi.so.6 => /usr/X11R6/lib/libXi.so.6 (0x0fee8000) libXaw3d.so.6 => /usr/X11R6/lib/libXaw3d.so.6 (0x0fe62000) libXmu.so.6 => /usr/X11R6/lib/libXmu.so.6 (0x0fe2d000) libXt.so.6 => /usr/X11R6/lib/libXt.so.6 (0x0fdaa000) libSM.so.6 => /usr/X11R6/lib/libSM.so.6 (0x0fd80000) libICE.so.6 => /usr/X11R6/lib/libICE.so.6 (0x0fd48000) libXext.so.6 => /usr/X11R6/lib/libXext.so.6 (0x0fd19000) libX11.so.6 => /usr/X11R6/lib/libX11.so.6 (0x0fc30000) libc.so.6 => /lib/libc.so.6 (0x0fb1a000) /lib/ld.so.1 => /lib/ld.so.1 (0x30000000) Insgesamt 13 Libraries Offensichtlich dauert das laden der vielen Libraries, die bei KDE Programmen automatisch dazugelinkt werden fast ewig. Zwar verfügt Linux (und einige andere moderne Betriebssysteme) über "Load on Demand" (es werden nur die gerade benötigten Teile eines Programmes geladen), trotzdem geht viel Zeit verloren, weil diese wenigen Bruchstücke von den verschiedensten Orten geladen werden müssen. Dabei entstehen folgende Probleme:
SchlussfolgerungenKleine Programme laufen schneller als grosse. Wenig Sourcecode schreiben heisst nicht unbedingt ein kleines Programm erzeugen. Moderne Toolkits wie Qt mitsamt KDE Libraries verwöhnen den Programmierer und erzeugen ohne sein Wissen riesigen, langsamen Code. KDE/Qt oder GTK/Gnome sind sicher hervorragend geeignet für komplexe Officepakete oder Webbrowser, die wirklich den gesamten Umfang an Funktionalität ausnutzen. Für kleinere Projekte sind sie aber totaler Overkill. (libqt.so.* belegt alleine schon mehrere Megabyte) Update: Qt ab Version 4 tritt dem Problem entgegen, indem das Toolkit in mehrere kleinere Libraries aufgeteilt wurde. Somit ist es nun möglich, mit Qt ein Kommandozeilenprogramm zu schreiben, das nicht auch noch den ganzen X11 Code laden muss. © 2002 - 2008 by Stefan Heimers |
Kürzlich geändert
Dieser Server (de) 2024-05-04 18:16:25 Defragmentieren (de) 2023-12-21 12:43:54 Vorverstärker (de) 2023-12-21 12:43:54 Sunday Webserver (de) 2023-12-21 12:43:54 Linker (de) 2023-12-21 12:43:54 Partitionieren (de) 2023-12-21 12:43:54 |