Hallo zusammen,
ich hatte vor kurzem ein Script vorgestellt, dass dem My-Anwendern dieses Forums neue Antworten auf eigene Beiträge im Seitenkopf anzeigen kann.
Ich denke, das ist nur eine Möglichkeit, wie man das Forum mit Javascript nutzbarer gestalten könnte. Vor einigen Jahren hatte Zapp viele weitere Möglichkeiten aufgezeigt. In Zeiten von Ajax sollte man noch viel mehr machen können.
Das obige Script durchläuft ziemlich aufwändig den Threadbaum auf der Forumshauptseite und extrahiert die relevanten Daten über die Postings. Da das viele ähnliche Scripte machen würden, dachte ich an eine Art Framework, dass diese Funktionalität zur Verfügung stellt. Auf dessen Basis kann man dann Scripte wie das obige implementieren.
Ich habe dazu mit zwei Modellen experimentiert:
1. Das Traverse-Modell. Man hat sich das wie SAX bei XML vorzustellen. Man registriert Handler, die bei gewissen Parse-Ereignissen aufgerufen werden. Dann wird der Thread-/Postingbaum durchlaufen und bei jedem Thread bzw. Posting die Handler mit den jeweiligen extrahierten Daten aufgerufen.
Vorteil: Man kann beim Laden viele Scripte mit unterschiedlichen Aufgaben einbinden, die mehrere Handler registrieren. Der DOM-Baum wird dann beim onload bzw. DOMContentLoad einmal traversiert und alle Scripte, die beim Laden der Seite aktiv werden, bekommen die benötigten Daten. Wenn während der »Laufzeit« noch einmal ein Traversieren nötig ist, so kann es erneut manuell angestoßen werden.
Nachteil: Einige. Eine Logik wie »suche neue Antworten auf eigene Postings« ist nicht so einfach umzusetzen. Es sei denn, man arbeitet letztlich doch wieder direkt im DOM. Man kennt dies von SAX.
2. Das Alternativ-DOM. Die Treadliste wird beim load bzw. DOMContentLoad einmal durchlaufen und alle Daten werden extrahiert und in einer riesige JavaScript-Objektstruktur gespeichert. Es gibt dann Thread-Objekte und Posting-Objekte und alle sind miteinander reziprok verknüpft. Es gibt Listen und Indizes, man kann Threads und Postings nach bestimmten Kriterien suchen und hat wiederum Referenzen auf die entsprechenden DOM-Elementknoten.
Vorteil: Damit kann man sehr einfach und schnell Aufgaben wie die obige lösen und es sind viele andere denkbar. Das Alternativ-DOM kann man mit Abstraktions-Funktionen ausstatten, sodass man die gängigen Änderungen ohne direkten Eingriff ins DOM vornehmen kann.
Nachteil: Das Aufbauen der riesigen tausendfach verwobenen Objekt- und Arraystruktur beim onload ist elend lahm und verbraucht einigen Speicher.
Nun gehe ich bei diesen Modellen davon aus, dass mit der jetzigen Forumshauptseite in XHTML gearbeitet. Ich denke aber darüber nach, wie man das Forum ajaxifizieren könnte. Anstatt der HTML-Struktur gibt es z.B. eine XML-Struktur, die mit XSLT in das gewünschte XHTML transformiert wird. JavaScript dient als Kitt und hat idealerweise Zugriff auf die XML-Struktur, mit der es einfacher arbeiten kann, und das letztliche XHTML-Dokument. Das XML-Dokument wird dann lediglich mit JavaScript »angereichert« und es werden einige Indizes und Referenzen angelegt. Die letztlichen Operationen können immer »live« am XML-DOM durchgeführt werden, Ergebnisse von Abfragen sowie Änderungen werden immer wieder päckchenweise über das XHTML-DOM dargestellt.
Es sind natürlich auch andere Formate denkbar. Etwa die Forumsseite direkt im JSON-Format, aus der dann der XHTML-Code erzeugt wird. Da müsste man aber die Performance messen, denn es ist sicher langsamer, den langen JSON-String in eine gigantische Objektstruktur zu parsen und mit JavaScript in XHTML zu überführen, als die Objektstruktur auf Basis von XHTML nachträglich aufzubauen. Es wäre auch die Kombination eines servergenerierten XHTML-Dokuments mit eingebauter JSON-Struktur denkbar. Oder XML plus XSLT, das XHTML und JSON gleichzeitig erzeugt. Und so weiter.
Letztlich wäre eine serverseitige REST-API sinnvoll, die es erlaubt, Thread- und Postingdaten gezielt abzurufen und einige Abfragen serverseitig durchzuführen. Ausgabeformate könnten entsprechend JSON(P), XML und auch XHTML sein. Posting senden sowie Vorschau wären sicher auch umsetzbar.
Soweit zu den theoretischen Überlegungen über die Grundlagen. Ich habe mir noch nicht ausgemalt, welche Möglichkeiten ein solches Framework bieten würde. Jedenfalls sollten sich viele Funktionen des ursprünglichen Zapp-Scriptes einfach lösen lassen. Außerdem könnte man neue schlanke, angepasste Oberflächen für das Forum schreiben. Eine Anbindung an andere Services (etwa Community-Features wie Visitenkarten, weiteren Bewertungs- und Statistik-Systeme, Bookmarking, Tagging usw.) wäre auch kein Problem.
Was haltet ihr von diesen Gedanken? Ich möchte auch ganz konkret wissen, an welchen Stellen ihr eine weitere Ajaxifizierung sinnvoll fändet und welche Dienste man ins Forum integrieren könnte. Das Zapp-Script liefert ja bereits einige vorzügliche Ideen. Ich könnte mir etwa vorstellen, dass sich die Hautpseite und die Postingansicht automatisch aktualisieren, indem sie regelmäßig pollen und so neue Postings abrufen und in den DOM-Baum einmontieren.
Mathias