Donnerstag, 29. März 2007

Java und JavaScript

Java und JavaScript - immer wieder werden sie von Anfängern verwechselt, obwohl sie ausser ein paar formalen Ähnlichkeiten nicht viel miteinander teilen. Doch es gibt keinen Grund für Java-Entwickler, hochnäsig die Nase zu rümpfen über die "Scripter".

JavaScript wird als nette kleine Scriptsprache missverstanden - in Wirklichkeit ist es eine vollwertige Programmiersprache (einem solchen Missverständnis ist neben JavaScript übrigens auch die komplexe und mächtige Programmiersprache Perl zum Opfer gefallen). Douglas Crockford hat zu diesem Thema alles Wesentliche auf http://javascript.crockford.com/javascript.html gesagt.

Dass JavaScript interpretiert, nicht kompiliert wird, ist nicht unbedingt ein Nachteil. Erstens macht dies bei den heutigen Prozessortakten kaum noch einen Unterschied. Und zweitens ist der Vorteil eines generierten Bytecodes schnell zunichte, wenn die Ladezeiten der benötigten Java-Laufzeitumgebung ins Monströse wachsen. Wenn man minutenlang eine animierte Grafik von "Sun" betrachten muss, ehe der Applet-Javacode prozessiert werden kann, weil erst eine Megabytes schwere Laufzeitumgebung in den Speicher gepumpt und initialisiert werden muss, vergessen wir am besten ganz schnell das Argument, dass compilierter Code besser, weil schneller ist. Mit jedem Release wächst der Leistungsumfang von Java - und damit in der Regel auch die Ladezeit für die Java Runtime.

Wie angenehm führt uns dagegen die Gemeinde der Ajax-Entwickler vor, wie man mit ein bisschen JavaScript und einem passenden Framework in kurzer Zeit schicke und flüssig bedienbare, performante und sofort nach dem Aufruf eingabebereite Webanwendungen erstellen kann. Das ist auch kein Wunder, denn die Script-Engine ist im Browser sofort verfügbar, und die Anbindung von JavaScript an den HTML-DOM ist optimiert.
Damit ist es ein leichtes, in einer "stehenden" Webseite Inhalte skriptgesteuert auszutauschen und zu modifizieren. In letzter Zeit hat sich die browserübergreifende XML/XSLT-Funktionalität in JavaScript deutlich verbessert, und nicht erst seit es das Wort Ajax gibt, ist es mit JavaScript möglich, HTTP-Requests ohne Bildwechsel im Hintergrund einer Webseite zu versenden und somit flüssig serverseitige Logik in die am Client angezeigte Seite zu integrieren.

Das bedeutet nun auch wieder nicht, dass JavaScript grundsätzlich besser ist als Java. Die Frage "Was ist besser, Java oder JavaScript" ist in dieser Allgemeinheit auch unsinnig. Es ist sinnlos, pauschal zu fragen "Was ist besser?", denn jede Sprache hat ihre besonderen Vorteile und optimale Einsatzgebiete. Und hier können wir ganz klar sagen: Obwohl es einmal anders gedacht war, verliert die Programmiersprache Java ihre Relevanz für die clientseitige Entwicklung, verlagert ihren Focus auf die serverseitige Logik. Dort kommen ihre Stärken viel besser zum Zuge. Denn dass ein Apache Tomcat-Server beim Hochfahren einmal die massige Java Laufzeit initialisieren muss, kann man ruhig in Kauf nehmen, und es darf auch ein paar Minuten kosten. Wenn dies einmal geschehen ist, profitiert man von den mächtigen Möglichkeiten der Sprache. Einem Surfer dagegen sind solche Ladezeiten wie die der Java 5 Runtime nicht zuzumuten. Was im Frontend prozessiert wird, muss schlank sein: Wenig Code, nur das jeweils nötige, keine gewaltigen Engines oder Frameworks! Dazu kommen weitere Probleme mit clientseitigem Java: Immer noch nicht alle Browser sind zu so simplen und selbstverständlichen Dinge wie JavaScript-Java-Kommunikation in der Lage (beispielsweise der Safari-Browser), das heisst: es ist nicht möglich, Attribute und Methoden eines Applets scriptgesteuert anzusprechen, und solange es an so elementaren Dingen noch hapert, ist das Wort "Geräteunabhängigkeit" ein Witz: es macht keinen Spass, auf einem solchen Niveau zu programmieren.

Ein erfolgverheissender Mix für Web-Anwendungen könnte aus JavaScript, HTML und CSS auf dem Client und Java oder einer robusten Sprache mit ähnlichen Vorteilen (wie z.B. ABAP) auf dem Server bestehen. Ein vorgelagerter Apache Webserver puffert und bedient statische Ressourcen. Die Dynamik entsteht durch Webservices, Servlets oder Server Pages - oder eine Kombination dieser Techniken.

Keine Kommentare :