Holladiewaldfee,
Also wärs ja mal eine reizvolle Aufgabe, ohne Rücksicht auf irgendwelche Ressourcen und ohne Rücksicht auf "Sinnhaftigkeit" erstmal loszuzuschreiben und zu entwickeln, und dann nachzuschauen, was da alles passieren kann. Einfach, um herauszufinden, wann und womit man via Javascript Performance und andere wichtige Sachen überfordern kann.
Habe ich schon gemacht, und ich habe auch angefangen, einen Feature-Artikel drüber zu schreiben. Ich habe damals (vor 3-4 Jahren, in meiner gloreichen Kollegstufen-Zeit ein Skript geschrieben, das ein Listview-Steuerelement komplett mit allen (!) Funktionalitäten in JavaScript nachgebildet hat. Es läuft unter Netscape 4, Mozilla, IE und irgendeiner Opera Version, an die ich mich nicht mehr erinnern kann, und war Teil eines Projektes von mir, mehrere Windows-Steuerelemente in JavaScript nachzubilden. Das Ding hat weit über 100k und kann die Kiste wirklich für ein paar Sekunden lahmlegen. grund dafür ist der Algorithmus, der das Script die Einträge umsortieren lässt oder für eine richtige Darstellung sorgt, wenn die Größe der Spalten verändert wird oder durch die Liste gescrollt wird. Prinzipiell unterstützen die Scrollbars am Rand wie bei einem echten Listview theoretisch sogar Drag&Drop, was jedoch bei zunehmender Anzahl von Einträgen ziemlich unmöglich wird, weil die Berechnung so lange dauert.
Das Teil ist jetzt jahrelang auf den Platten des Servers rumgelegen, und ich hab's nie veröffentlicht ...
Das Ganze ist heute ziemlich unsinnig. Aber wir werden in drei oder vier Jahren Rechner mit CPU-Durchsatz von 15 GB als "normal" ansehen und über nahezu unbegrenzte RAM-Volumina verfügen, und was heute DSL ist, werden wir in wenigen Jahren als historischen Engpaß belächeln. Javascript wird aber immer noch relevant sein...
Für damalige Zeiten war der Listview absolut ungeeignet, da er auf einem PIII/450 so viel Leistung frißt, daß der Besucher denkt, sein Rechner wäre abgestürzt. Auch heute auf meinem PIV/2.6 ist das Ding noch ein Leistungsfresser ohne Ende. Das Problem dabei ist die absolut mangelhafte Implementierung von JavaScript in den Browsern, wenn es darum geht, Elemente am Bildschirm neu anzuordnen oder in der Größe zu ändern. Das dauert einfach bis in alle Ewigkeit. Gut, das fällt bei einem einzelnen Element nicht auf, bei 10 auch nicht, aber wenn man mal ein paar 1000 Dinger rumschieben muß ... das merkt man dann doch. Fast wie früher mit Visual Basic ;)
Das Teil ist auch in DSL-Zeiten nicht zu verharmlosen, schließlich müssen da auch erstmal 150k durch die Leitung. Was aber wesentlich länger dauert ist die Zeit, die der Browser benötigt, um das Teil korrekt und vollständig aufzubauen.
Und über all diesen Kram wollte ich eigentlich einen Feature-Artikel schreiben - und mitten drin war ich dann auf einmal kein Schüler und auch kein Zivi mehr und hatte überhaupt keine Zeit mehr, das Ding fertig zu machen.
Damit er nicht für alle Zeiten verloren ist, will ich ihn hier einfach mal hinstellen. Einiges darin ist nicht ganz richtig, einiges schlichtweg falsch, anderes ist lückenhaft usw. - das Ding ist einfach noch nicht über den Stand eines groben Entwurfes herausgekommen. Da ich aber auch in nächster Zeit sicher nicht dazu kommen werde, dran weiterzuschreiben, habe ich mich entschieden, es hier zu veröffentlichen.
http://harry.ilo.de/publikationen/selfaktuell/listview/
Leider fehlen ausgerechnet die beiden interessantesten Kapitel noch, "Grenzen von JavaScript" und "Unterschiede der JS-Interpreter moderner Browser". Damit aber auch ein bißchen Leben in diese Kapitel kommt, stelle ich hier mal einen Auszug aus meiner Facharbeit rein, "Anwendungsbezogenes JavaScript und Einführung in HTML, CSS und JavaScript". Beschrieben wird dabei ein Aufbau mit einem Treeview, Pulldown-Menüs und einem Listview, also ähnlich dem Windows-Explorer.
---
Hier zeigen sich auch sehr schön die Unterschiede zwischen den JavaScript-Interpretern von IE, NC4 und Mozilla: Während der IE5 die Seite, wie sie oben abgebildet ist, in weniger als einer halben Sekunde aufbaut, benötigt Mozilla für die Darstellung bereits rund vier Sekunden. Netscape 4 überzeugt mit einer Zeit von 19 Sekunden ... Dafür laufen Scrollvorgänge im Listview mit dem Communicator wesentlich schneller und glatter als mit Mozilla und IE ab. Auch Menüs klappen schneller auf.
Andere Schwächen der NC4-Engine offenbaren sich dagegen beim Aufklappen komplexer Äste im Treeview: Manchmal muß Netscape bis zu fünf Sekunden lang "überlegen" bevor ein Ast aufklappt. Bei IE und Mozilla ist dagegen kaum eine Verzögerung zu bemerken. Besonders auffällig ist jedoch die Langsamkeit der Netscape 4 JavaScript-Engine beim Ändern der Größe von Spalten im Listview. Etwas weniger als eine halbe Sekunde Berechnungszeit beim IE stehen hier gegen 32 (endlose) Sekunden beim Netscape 4. Auch zum Umsortieren einer Spalte benötigt Netscape mehr als die doppelte Zeit des Microsoft Browsers.
---
Dieser Text stammt aus den Jahren 2000/01, wenn hier von "Mozilla" die Rede ist, ist meist MileStone 16 oder so etwas gemeint. "IE" ist der IE 5 oder 5.5, oder was halt auch immer damals grade aktuell war.
Im Feature-Artikel-Entwurf sind auch zwei Beispiele verlinkt, in denen das komplexe Script zum Einsatz kommt:
http://harry.ilo.de/publikationen/selfaktuell/listview/beispiele/buch/suche.php
http://harry.ilo.de/publikationen/selfaktuell/listview/beispiele/musik/suche.php
Der Quelltext ist hier:
http://harry.ilo.de/publikationen/selfaktuell/listview/listview.txt
Download:
http://harry.ilo.de/publikationen/selfaktuell/listview/listview.zip (Script)
http://harry.ilo.de/publikationen/selfaktuell/listview/listview_img.zip (Grafiken)
http://harry.ilo.de/publikationen/selfaktuell/listview/listview_debug.zip (Debugging-Modul)
http://harry.ilo.de/publikationen/selfaktuell/listview/listview_bsp.zip (Beispiel)
Natürlich muß ich eingestehen, daß das Ding nicht sehr sauber programmiert ist und man durchaus noch einiges verbessern könnte, vor allem kann man im Script noch einige Passagen optimieren, was Stil und Performance angeht. Wer Zeit und Lust hat kann das gerne tun.
Und falls sich natürlich noch jemand findet, der Lust hat, den Feature-Artikel zu korrigieren und zu vervollständigen, ja, dann wäre ich restlos begeistert :)
Ansonsten wünsch ich Euch viel Spaß mit dem Zeug.
Ciao,
Harry
PS: Ja im Feature-Artikel-Entwurf fehlen wirklich die Grafiken und das Style-Sheet ...
PPS: Mir ist's wurscht, daß der Akzent hinter "Harry" und vor dem "s" falsch ist. Aber "Harrys" schaut so doof aus, fast wie "Harries" (arghl)