3.3 JavaScript Image Linker
Der JaSIL Compiler/Linker übersetzt Java Anwendungen in JavaScript. Als JDK wird derzeit Apache Harmony verwendet. Das vom Linker erzeugte optimierte Programm enthält nur die referenzierten Klassen, Felder und Methoden. Das JaSIL Projekt bietet die Möglichkeit preemitve Java Threads mit JavaScript in Clients von Web-Applikationen zu verwenden. JaSIL übersetzt Java Bytecode in JavaScript und verwendet daher einen allgemeinerer Ansatz als ähnliche Projekte mit speziellen Java Front-Ends. Das System verwendet den Garbage Collector von JavaScript für die Speicherverwaltung. • Motivation für die Übersetzung von Java in JavaScript JavaScript ist eine funktionale Sprache, die in allen populären Web-Browsern verfügbar ist. Auf diese Weise ist diese Sprache eine der weltweit meistgenutzten Plattformen. Java ist eine populäre objektorientierte Programmiersprache mit einem starken Typkonzept, die ebenfalls auf vielen verschieden Plattformen verfügbar ist. Sehr gute IDE Unterstützung erlaubt es EntwicklerInnen auf effiziente Weise komplexe Java Anwendungen zu erzeugen und zu warten. Java auf JavaScript zu portieren, sollte die Entwicklung von skalierbaren Web-Anwendungen mit smarten Clients, die benutzerfreundlich sind und den Server entlasten, einfacher und effizienter machen. • Java/JVM Kompatibilität JaSIL bietet Optionen für mehr oder weniger Java/JVM Kompatibilität des generierten JavaScript Codes. So ist die Unterstützung für preemtive Java Threads, einschließlich Synchronisierung optional. Derartige Threads sind vollständig durch Software realisiert und bieten kein echtes hardwarebasiertes Multiprocessing. Es ist gegenwärtig nicht beabsichtigt dynamisches Laden von Klassen zu unterstüzen und Reflection für Java Klassen ist nur begrenzt möglich. • Ein Beispiel mit Threads Über untenstehenden Pushbutton wird ein Dialog geöffnet und eine einfache Wortzählfunktion gestartet. Es wird eine Datei vom Server gelesen, die Anzahl der einzelnen Worte in der Datei ermittelt und das Resultat in einer Tabelle angezeigt. Das Schließen des Dialogs beendet die Funktion. Für diese Aufgabe wird ein Thread mit niedriger Priorität verwendet. Durch die Verwendung von Threads bleibt die GUI reaktiv, der Dialog kann bewegt oder auf das WEB-Dock minimiert werden und die Tabelle wird permanent aktualisiert. Java EntwicklerInnen können die Threadkonzepte verwenden, die ihnen bereits vertraut sind. Da das System Threads mit Prioritäten unterstützt, kann GUI Aktivität das Worte zählende Thread bremsen. Würde man die Funktion ohne Threads im Vordergrund ausführen, so wäre das GUI blockiert und der Browser würde regelmäßig lästige Nachrichtenfenster anzeigen, weil ein Script zu lange läuft. Die Tabelle würde nur aktualisiert werden, wenn eine dieser Nachrichten angezeigt wird. Um dieses Verhalten zu beseitigen, wäre zusätzlicher Programmieraufwand notwendig. Eine komplexe Funktion in kleinere Einheiten zu unterteilen kann eine nicht triviale Aufgabe sein und erhöht den Entwicklungs- und Wartungsaufwand.
• Beispiel with WebGL Über untenstehenden Pushbutton wird ein Dialog geöffnet und eine einfache WebGL Anwendung gestartet. Threads werden in diesem Beispiel keine verwendet, was bedeutet, dass die Anwendung im "GUI Thread" läuft.
• Ähnliche Projekte |