webR: Serverless R-App im Browser

In der ständig wachsenden Welt der Programmiersprachen und Technologien gibt es eine sehr spannende Entwicklung, die für R-Enthusiasten neue Möglichkeiten eröffnet – webR. Ähnlich wie Pyodide für Python lässt sich mit webR R-Code direkt im Webbrowser ausführen, ohne dass R auf Ihrem Gerät installiert ist.

webR: Serverless R-App im Browser

In der ständig wachsenden Welt der Programmiersprachen und Technologien gibt es eine sehr spannende Entwicklung, die für R-Enthusiasten neue Möglichkeiten eröffnet – webR. Ähnlich wie Pyodide für Python lässt sich mit webR R-Code direkt im Webbrowser ausführen, ohne dass R auf Ihrem Gerät installiert ist.

Was ist webR?

Die erste Version von webR wurde im März 2023 veröffentlicht. Seit dem 16. August 2023 ist das Projekt in der Version 0.2 verfügbar. webR ist eine Version von R, die in WebAssembly kompiliert wurde, um im Webbrowser eingesetzt zu werden. Zudem bietet webR eine unterstützende TypeScript-Bibliothek, um mit der Konsole und R-Objekten aus einer JavaScript-Umgebung zu interagieren. Dabei handelt es sich um dieselbe Technologie wie Pyodide, ein Tool, das die Ausführung von Python Code im Browser ermöglicht und unter anderem von Shinylive für Python verwendet wird

Wie hilft webR in der Web-Entwicklung?

webR eröffnet ganz neue Möglichkeiten für die interaktive Nutzung von R und Data Science im Web. Zwei der Vorteile von webR sind:

  • webR ermöglicht die Ausführung von nativem R-Code im Browser. Durch die Ausführung im Browser ist es möglich, R-Anwendungen auszuführen, ohne sich Gedanken über die Installation oder Aktualisierung von R machen zu müssen.
  • Die Schritte zur Installation, Einrichtung und Wartung von separaten Server-Architekturen entfallen.

Installation von webR

Um WebR zu installieren, müssen Sie einige Schritte befolgen, die je nach Ihrem Betriebssystem und Ihrer Webentwicklungsumgebung variieren können. Hier sind einige allgemeine Anweisungen, die Ihnen helfen können:

  • Laden Sie die neueste Version von WebR von der offiziellen Website (externer Link) herunter. Dabei besteht die Wahl zwischen einer vorkompilierten Binärdatei oder dem Quellcode.
  • Anschließend müssen Sie die Dateien webr.js und webr.wasm in Ihren Webserver kopieren. Diese Dateien sind für die Ausführung von webR im Browser verantwortlich. Beim Download des Quellcodes, müssen diese Dateien erst erstellt werden:
    • Wechseln Sie in die Kommandozeile und navigieren Sie zu dem Ordner, in dem Sie den WebR-Quellcode gespeichert haben. Führen Sie dann den folgenden Befehl aus, um WebR mit Emscripten zu kompilieren:
      emmake make
  • Um WebR in Ihrer Webanwendung zu verwenden, müssen Sie die Datei webr.js in Ihrem HTML-Dokument einbinden.
    • Zum Beispiel:
      <script src=“webr.js“></script>
  • Um webR in Ihrem TypeScript- oder JavaScript-Code zu verwenden, müssen Sie das webr-Paket importieren, das eine Reihe von Funktionen und Klassen zur Verfügung stellt, um mit webR zu interagieren. Sie können das webr-Paket entweder über npm installieren oder direkt aus dem webR -Repository beziehen.

Download über npm

npm i webr
// Importieren des webr-Pakets
import { Webr } from "webr";

// Erstellen einer WebR-Instanz
const webr = new Webr();
Code-Sprache: JavaScript (javascript)

Um webR zu starten, müssen Sie eine Instanz der Klasse webR erstellen und die Methode init() aufrufen. Dadurch wird webR initialisiert. Danach ist webR bereit, R-Code auszuführen. Jetzt kann die die Methode eval() genutzt werden, um R-Ausdrücke zu evaluieren und Ergebnisse zu erhalten.

// Initialisieren von WebR
webr.init().then(() => {
  // Evaluieren eines R-Ausdrucks
  webr.eval("1 + 1").then((result) => {
    // Anzeigen des Ergebnisses
    console.log(result);
  });
});
Code-Sprache: JavaScript (javascript)

webR-ServiceWorkers – Kurz erklärt

Damit webR die Verbindung mit der dahinter liegenden R bzw. Shiny-App herstellen kann sind „ServiceWorkers“ in Form von JavaScript-Dateien nötig. Sie sorgen im Hintergrund u.a. dafür, dass Fetch-Anfragen verarbeitet werden und handeln die Client-Registrierungen für die Anwendungen im Hintergrund ab, während die Website weiterhin responsiv bleibt. Die Skripte der ServiceWorkers müssen jedoch zunächst erstellt werden.

Ein Beispiel für einen httppuv ServiceWorker liefert George Stagg, der Entwickler von webR und Software Engineer bei Posit, direkt in GitHub (externer Link). Die entsprechende ServiceWorkers-Skripte müssen dabei auf den Webserver geladen, damit diese später korrekt geladen werden können.

Wie lässt sich webR mit Shiny verbinden?

Im Grunde benötigt man für die Verbindung lediglich 3 Teile:

  • HTML-Code, der auf einer Website eingefügt wird
  • Das R-Skript, bspw. mit der gewünschten Shiny-App (häufig „app.R“)
  • ServiceWorker-Skript(e)

Dabei wird webR bzw. die Shiny-App auf der entsprechenden Website per iframe angezeigt. Innerhalb der HTML-Datei wird nach dem Initialisieren der webR-Instanz auf ähnliche Weise das R-Skript geladen:

const shinyAppURL = '[URL des github-Repositorys oder Ordnerpfad des Webservers]' 
const shinyApp_File_Name = 'app.R'
Code-Sprache: JavaScript (javascript)

webR vs Shinylive

Kürzt man webR auf das Wesentliche herunter, steht die Frage im Raum: „Wenn man mit webR R-Code im Browser ausführen kann – was ist der Unterschied zu Shinylive?

Noch einmal zur Erinnerung: webR ist die für webassembly kompilierte Programmiersprache R. Zur Ausführung von R, einschließlich Shiny-Apps, auf einer Website benötigt man HTML und Javascript. Existierende Anwendungen wie bspw. Shiny-Apps müssen umgeschrieben, werden, so dass diese sich im Browser ausführen lassen. Zusätzlich muss die Website entsprechenden Code nutzen, damit die Verbindung zwischen Website und Shiny-App funktioniert. Aus diesem Grund ist webR vor allem für Webentwickler und Webentwicklerinnen interessant, die R-basierte Anwendungen auf Websiten zur Verfügung stellen wollen.

Shinylive hingegen automatisiert das Ganze: Dabei wird durch Shinylive eine entsprechende Website für den Browser automatisiert erstellt, welche webR integriert. Aus diesem Grund eignet sich Shinylive auch für Data-Scientists, die bestehende Shiny-Apps per Website zugänglich machen wollen – ohne auf Javascript und HTML-Kenntnisse zurückgreifen zu müssen.

webR und Shiny – Fazit

Das Wichtigste zuerst: webR ist kein Ersatz für Shiny! Vielmehr ist es eine elegante Ergänzung, gerade in Bezug auf die Skalierung von Shiny-Apps: Durch den Einsatz von webR werden Browser, und somit Rechner der Anwenderinnen und Anwender, aktiver Teil der Ausführung von R bzw. Shiny-Anwendungen. Da es sich bei R und Shiny um Single-Thread-Programmiersprachen handelt, werden Anfragen und Aufgaben nacheinander abgehandelt – dies kann sich auf die Reaktionszeit der Anwendungen auswirken.

Mithilfe von webR können Berechnungen auf die lokalen Browser verteilt werden, so dass bspw. eine Shiny-Anwendung die nächste Anfrage bereits verarbeiten kann, wodurch sich die Reaktionszeit der Anwendung verkürzt. Hier können Parallelen zu Shinylive for Python gezogen werden.

Aber: webR hat das Potenzial die Ausführung von R bzw. Shiny-Apps nachhaltig zu verbessen. Es bleibt also weiterhin spannend sich mit dem Thema zu befassen und die weitere Entwicklung zu beobachten.

Erzählen sie Ihre Data Story – mit Shiny

Konzeption, Entwicklung, Deployment und Betrieb:
Wir sind Ihr Ansprechpartner rund um Shiny-Themen.

Nichts mehr verpassen – Jetzt den eoda-Newsletter abonnieren!