hasematzel.de

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.

4 Kommentare


  1. 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.


  2. 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.


  3. 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


  4. 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

Mitreden