스크립트
00:00:00Früher bedeutete die Erstellung plattformübergreifender Desktop-Apps meist die Wahl von Electron, doch heute
00:00:04haben wir die Qual der Wahl. Um etwas Licht ins Dunkel zu bringen, vergleichen wir heute die drei besten Optionen
00:00:09für plattformübergreifende Desktop-Apps: Tauri, geschrieben in Rust, Electro-Bun vom Bun-Team
00:00:14und Deno Desktop, das neue Angebot von Deno. Als Basis nehmen wir zudem Electron. Falls ihr
00:00:20ein anderes Tool auf diesem Kanal sehen wollt, lasst es mich einfach in den Kommentaren wissen.
00:00:23Wir vergleichen vier Punkte: Paketgröße, Startgeschwindigkeit, Laufzeitleistung und die Entwicklererfahrung.
00:00:29Ich habe dieselbe App viermal gebaut: ein Bildschirmaufnahme-Tool, mit dem man Ergebnisse
00:00:35auf einer Timeline bearbeiten und als MP4 exportieren kann. Ich habe diese Art von App gewählt, da Videoverarbeitung
00:00:40solche Tools an ihre Grenzen bringen kann. Natürlich kommt es nicht nur auf die Leistung an.
00:00:44Die Fähigkeiten eures Teams und die Art des Produkts beeinflussen maßgeblich, welches
00:00:49Framework ihr wählt, aber hoffentlich gibt euch dies eine Orientierungshilfe.
00:00:58Schauen wir uns kurz eine Demo der entwickelten App an. Wir starten die App,
00:01:03wählen den aufzunehmenden Bildschirm aus und klicken auf Aufnahme. Nun nehmen wir kurz
00:01:08den Bildschirm auf. Wenn wir fertig sind, drücken wir Stopp. Ein Fenster erscheint mit unserer Aufnahme
00:01:12auf der Timeline. Wir können sie zuschneiden, um Pausen zu entfernen, und als MP4 exportieren. Die App ist
00:01:18eigentlich sehr simpel, aber da wir mehrere APIs nutzen, Videos aufnehmen, verarbeiten und
00:01:24die Benutzeroberfläche rendern, ist dies ein guter Test. Als Erstes prüfen wir
00:01:28die Paketgröße. Denkt daran, die Apps bieten alle identische Funktionen. Electron als Basis liegt bei 323
00:01:35Megabyte, Tauri bei nur 57 Megabyte, Electro-Bun bei 418 Megabyte und Deno bei 111 Megabyte.
00:01:44Alle nutzen zudem eingebettetes FFmpeg für MP4-Exporte, was allein 45 Megabyte ausmacht. Electro-Bun ist so
00:01:52groß, weil ich Chromium mitliefern musste. Ich habe es versucht, aber ich konnte die
00:01:56Bildschirmaufnahme nicht mit der nativen System-Webview zum Laufen bringen, speziell zur Aufnahme aus JavaScript.
00:02:01Man benötigt die Screen-Capture-API und die getDisplayMedia-Funktion. Man fragt den Browser nach dem Bildschirm,
00:02:06er gibt einen Stream zurück, der Media-Recorder kodiert ihn – so machen es Electron und Deno. Electro-Bun
00:02:12enthält diese API gar nicht, also muss man zwingend Chromium hinzufügen, was
00:02:17weitere 200 Megabyte Ballast mitbringt. Denos API implementiert dies, also ist es derselbe Code,
00:02:24aber ohne Chromium. Deshalb landet Denos Paketgröße bei etwa 100 Megabyte und Electro-
00:02:30Buns bei fast 400. Rust brauchte das nicht, da Tauri die Aufnahme nicht über
00:02:35die Webview steuert. Es läuft alles über das Backend durch das native Screen-Capture-Kit. Das ist
00:02:40dasselbe macOS-Framework, das QuickTime nutzt, und die Aufnahme erfolgt direkt im Backend. Man übergibt
00:02:46ihm ein Display, einen Codec und einen Dateipfad, und es schreibt die Datei selbst. Die Webview ist nur die UI, sie
00:02:52berührt keinen einzigen Frame. Zudem erhält man kostenlos Dinge, die JavaScript-Builds selbst handhaben müssen:
00:02:56Screen-Capture-Kit mischt Mikrofon und System-Audio selbst und finalisiert ein korrektes MP4. Ich habe
00:03:02FFmpeg in der Tauri-App gelassen, um in andere Formate zu exportieren, aber technisch gesehen ist das
00:03:07optional. Okay, nun starten wir die Apps, um die Startzeit zu messen. Ich habe ein Skript geschrieben,
00:03:13das dies zehnmal durchführt, um den Median zu bilden. Electron lag als Basis bei 273 Millisekunden, Tauri
00:03:19kam auf 311 Millisekunden, Electro-Bun auf 773 Millisekunden und Deno auf 242 Millisekunden.
00:03:29Die Überraschung für mich war, dass Tauri nicht am schnellsten war; es liegt knapp hinter Electron. Deno
00:03:34hat tatsächlich alle geschlagen. Die Annahme wäre, dass Rust plus System-Webview für sofortige
00:03:39Starts sorgt, aber da die Rendering-Engine ohnehin hochfahren muss, trägt dies vermutlich zur
00:03:44etwas langsameren Startgeschwindigkeit bei. Electro-Bun ist der Ausreißer, fast dreimal langsamer als Electron. Es startet
00:03:50einen Launcher, der Bun startet, das wiederum Chromium startet – drei Runtimes in einer Kette, das merkt man deutlich.
00:03:56Schauen wir uns nun den Speicherverbrauch nach dem Start an. Wenn die App läuft, ist Electron
00:04:01wieder die Basis mit 128 Megabyte. Tauri kam auf 109 Megabyte, Electro-Bun auf 208 und Deno auf 98
00:04:10Megabyte. Deno und Tauri waren also fast gleichauf, während Electro-Bun fast das Doppelte verbrauchte.
00:04:15Für Tauri ist das keine zehnfache Verbesserung, wie das Marketing impliziert. Auf der Festplatte ja,
00:04:21sie ist viel kleiner, aber der tatsächliche Speicherbedarf bei laufender Anwendung ähnelt den anderen
00:04:26Tools sehr. Ein Punkt, auf den man bei eigenen Tests achten sollte: Tauri nutzt die
00:04:31System-Webview, und diese Prozesse sind keine Kinderprozesse eurer App; macOS startet sie separat,
00:04:36daher zeigt die Aktivitätsanzeige Tauri mit etwa 36 Megabyte an. Es sieht aus, als würde es Electron dreifach
00:04:42schlagen, aber das tut es nicht. Wenn man alle diese Prozesse zusammenzählt, liegen die 36 Megabyte eher bei 109
00:04:48Megabyte, was wir im Test gemessen haben. Was die Bildschirmaufnahme angeht, bemerkte ich eine viel bessere
00:04:53Leistung bei der Tauri-App. Das liegt wahrscheinlich daran, dass wir die Daten nicht in der Webview
00:04:58aufnehmen und dann über eine Bridge übertragen, sondern alles nativ mit dem System-SDK
00:05:04aufnehmen. Wenn man 60 FPS Aufnahmen anstrebt, ist Rust mit Tauri der richtige Weg.
00:05:10Schauen wir uns nun die Entwicklererfahrung an. Aufgrund der Unterschiede der Plattformen war diese
00:05:15einfache App gar nicht leicht zu bauen. Insgesamt waren Electron und Tauri am einfachsten zu
00:05:20implementieren, aber Deno und Electro-Bun hatten viele Probleme und Systemabstürze. In Deno schloss sich
00:05:26die gesamte Anwendung beim Start der Aufnahme, wenn man die App versteckte. Ich denke, das liegt daran,
00:05:30dass Deno bei unsichtbaren Bildschirmen annimmt, die Anwendung sei fertig, und beendet
00:05:36den gesamten Prozess. Der Workaround war, die Ansicht einfach außerhalb des Bildschirms zu verstecken.
00:05:41Electro-Bun hatte Probleme damit, Chromium für die Aufnahme bündeln zu müssen, und aus irgendeinem
00:05:46Grund hängt das Paket von Three.js und Babylon.js für 3D-Rendering ab, was zur
00:05:53aufgeblähten Paketgröße beitrug. Alles in allem würde ich persönlich Tauri wählen. Wenn ihr aber
00:05:58nicht in Rust programmieren wollt, ist Electron weiterhin die ausgereifte Plattform für TypeScript-Entwickler. Deno sieht okay aus, aber ich denke,
00:06:04die Plattform braucht noch Zeit. Electro-Bun war für mich die schlechteste von allen.
00:06:09Ich hoffe, ihr könnt euch nun ein eigenes Urteil bilden. Lasst mich in den Kommentaren wissen, was ihr denkt. Wir haben auch
00:06:13ein Video speziell über Deno Desktop gemacht. Wenn ihr mehr darüber erfahren wollt, klickt auf dieses
00:06:18Video hier. Ansonsten, ich bin Warren von BetterStack, danke fürs Zuschauen und bis zum nächsten Mal.