Kleine Zaubereien mit jQuery
Für das Nachladen meiner del.icio.us-Bookmarks in der rechten Spalte hatte ich zunächst das kleine JavaScript-Framework moo.fx, bzw. mootools vorgesehen. Selbst inklusive des AJAX-Moduls des moo-Bundles, ergaben die Dateien zusammen nur 4,83 KB – was ich für das Laden eines Frameworks für geradezu vorbildlich halte.
Doch die Mailingliste der Webkrauts und Dirk Ginader brachten mich auf jQuery, eine weitere Bibliothek neben dem bekannten prototype, moo.fx und all’ den anderen. Gerrit van Aaken beschreibt in Wort und Bild eindrucksvoll die Unterschiede der Bibliotheken und die Eigenschaften von jQuery. Grund genug also, die auf 18 KB komprimierten Zeilen einmal auszuprobieren.
Serverseitig
Da ich die del.icio.us-API nicht so gerne mag und möglichst wenig mit client-seitigen Skripten machen will, nutze ich PHP und MagpieRSS, um mir die Liste meiner Bookmarks im RSS-Format von del.icio.us zu holen. Ein paar wenige Zeilen php-Code reichen aus:
$feedurl = "http://del.icio.us/rss/Hasematzel/";
$num_items = 10;
$rss = fetch_rss ($feedurl);
$items = array_slice ($rss->items, 0, $num_items);
Damit habe ich meine letzten 10 del.icio.us-Einträge im Array $items. Mit einer foreach-Schleife werden diese nun durchlaufen und direkt ausgegeben. Zugegeben: Mit dem “X” aus AJAX hat das nun nicht mehr viel zu tun. Stattdessen wird der gelieferte Output einfach in das DOM geschrieben.
Clientseitig
Zu diesem Zweck wird die komprimierte jQuery-Klasse geladen. Ziemlich einfach erzeugt man mit jQuery einen Event-Handler für das Laden des Dokumentes:
$(document).ready (function ()
{
// ...myfunction
});
Ist JavaScript im Browser nicht eingeschaltet oder nicht verfügbar, erfolgt ein entsprechender Hinweis, der sollte aber tunlichst schnell verschwinden, wenn das Skript ablaufen darf. Dazu dient die Methode hide():
$(document).ready (function ()
{
$('#mylinks').hide();
});
Wie man sieht, verwendet jQuery eine ähnlich Notation wie CSS. Dadurch wird vielen Leuten der Einstieg leichter fallen als bei den anderen Bibliotheken. Erklärung: Ist das Dokument geladen, wird das Element #mylinks so schnell wie möglich versteckt. Danach erfolgt der HTTP-Aufruf der Links vom zuvor erstellten PHP-Dokument (die Einfachheit hat mich ein wenig verblüfft):
$('#mylinks').load(
'http://hasematzel.de/sandbox/rss/ajax-delicious.php',
function(){
$('#mylinks').show('slow');
});
Der Methodenaufruf von load folgt also dem üblichen Schema: …(URI,Params,Callback). Die Zusammensetzung der Parameter gleichen sich bei vielen der Bibliotheken. Das ganze Skript könnt ihr euch hier ansehen – wahrlich keine Zauberei. Auch die weiteren Eigenschaften von jQuery sind sehr interessant. Erwähnenswert ist sicherlich die umfangreiche Dokumentation, unter anderem auch für das AJAX-Modul, die den Einstieg in die Bibliothek vereinfacht. Ob die Art des Frameworks nun 18 KB JavaScript (gegenüber z. B. ca. 4 KB von moo.fx) rechtfertigt, kann ich derzeit noch nicht sagen. Für Ein- und Umsteiger sei noch ein Getting started-Text erwähnt, der die ersten Schritte mit jQuery vereinfacht.
Jens Grochtdreis
13.10.2006
Es wäre mal interessant zu erfahren, ob es prinzipiell große Unterschiede in Bezug auf Performance und Leistung zwischen mootools und jquery gibt. Das wär mal ne echte Aufgabe für einen Javascript-Profi, eine grobe Analyse vorzunehmen. Falls man das kann.
Ich finde jquery allein wegen der Doku schon klasse. YUI hingegen von Yahoo! erweckt in mir mehr Vertrauen, weil es auch produktiv auf deren Seiten eingesetzt wird.
Oliver
13.10.2006
Ich glaube, dass der Unterschied in der Performance zwischen den Bibliotheken gering ist. Grundsätzlich sind die mootools von der Dateimenge her natürlich kleiner als die 18KB für jQuery, aber da die Skripte meist im Cache gefangen werden, sollte das nicht oft für Probleme sorgen. Beide nutzen für asynchrone Anfragen ziemlich geradeheraus das XMLHttpRequest-Objekt (bzw. das ActiveX-Äquivalent). Der Overhead des Frameworks ist bei beiden Bibliotheken überschaubar. Mootools ist da ja noch auf ein ziemlich zusammengestutztes “Prototype lite” angewiesen.
Sorgen machen muss sich nur derjenige, der wirklich komplexe Applikationen darauf aufbaut. Hier stellt sich sicherlich die Frage nach der Optimierung z. B. des Webservers auf das schnelle Abfackeln der kleinen HTTP-Anfragen, wenn die Zugriffe arg ansteigen oder der Einsatz eines anderen Webservers (als Comm-Layer) zum “rausrotzen” der AJAX-Anfragen.
Solange die Komplexität überschaubar bleibt, sind die von den Bibliotheken abhängigen Performancewerte wahrscheinlich weit geringer zu werten, als die Performance der JS-Engine in den Browsern und der Leistung des Webserver/Skript und Datenbank-Trio bei der Auslieferung der angefragten Daten.
Falk Pauser
22.2.2007
geschwindigkeit ist schon ein thema! da unter-
scheiden sich die diversen bibliotheken teils
sehr stark.
(hier: DomQuery vs. jQuery)
http://john.jquery.com/speed/yui.html
darki
19.12.2007
Ich seh da nix bei dem Test @Falk, außerdem müssten die beiden Frameworks in eigenständigen IFrames laufen damit diese unabhängig und ohne sich gegenseitig zu blockieren laufen, um einen validen Speedtest durchführen zu können. Siehe: http://mootools.net/slickspeed
Mootools und Prototype sind die eindeutig schnellsten.
Gruß darki