스크립트
00:00:00Construire des applications de bureau multiplateformes signifiait autrefois se tourner vers Electron, mais aujourd'hui, nous avons
00:00:04l'embarras du choix. Pour dissiper toute confusion, nous comparons aujourd'hui les trois meilleures options pour
00:00:09créer des applications de bureau multiplateformes : Tauri, écrit en Rust, Electro-Bun de l'équipe Bun,
00:00:14Deno Desktop, la nouvelle offre de Deno. Nous utiliserons également Electron comme référence. Si vous souhaitez
00:00:20voir un autre outil couvert sur cette chaîne, faites-le-moi savoir dans les commentaires.
00:00:23Nous comparerons quatre éléments : la taille du bundle, la performance au démarrage, la performance d'exécution et l'expérience
00:00:29développeur. J'ai créé la même application quatre fois : un outil d'enregistrement d'écran qui permet d'éditer les résultats
00:00:35sur une timeline et d'exporter en MP4. J'ai spécifiquement choisi ce type d'application car le traitement vidéo
00:00:40peut pousser ce genre d'outils à leurs limites. Bien sûr, tout ne dépend pas de la performance.
00:00:44Les compétences de votre équipe et le type de produit que vous construisez influenceront le type de
00:00:49framework que vous choisissez, mais j'espère que cela pourra vous guider sur ce à quoi vous attendre.
00:00:58Passons donc rapidement à une démo de l'application que nous avons construite. Nous commençons par lancer
00:01:03notre application, nous pouvons choisir quel écran enregistrer puis appuyer sur le bouton d'enregistrement. Maintenant, nous pouvons faire un court enregistrement
00:01:08de l'écran. Une fois terminé, nous appuyons sur stop, puis une fenêtre apparaîtra avec notre enregistrement sur la
00:01:12timeline. Nous pouvons ensuite couper cela pour supprimer les temps morts, puis cliquer sur exporter pour sortir un MP4. L'application est
00:01:18en fait incroyablement simple, mais comme nous utilisons plusieurs API, l'enregistrement, le traitement vidéo et
00:01:24le rendu de l'interface utilisateur, cela devrait être un test décent. La première chose que nous allons vérifier est la
00:01:28taille du bundle. N'oubliez pas que ces applications offrent toutes des fonctionnalités identiques. Electron, comme référence, fait 323
00:01:35mégaoctets. Tauri arrive à seulement 57 mégaoctets, Electro-Bun fait 418 mégaoctets et Deno fait 111 mégaoctets.
00:01:44Tous intègrent également ffmpeg pour les exports en MP4, ce qui ajoute 45 mégaoctets à lui seul. Electro-Bun est si
00:01:52grand parce que j'ai dû livrer Chromium avec. J'ai essayé très fort, mais je n'ai littéralement pas pu faire
00:01:56fonctionner l'enregistrement d'écran avec la vue web native du système, spécifiquement pour enregistrer depuis JavaScript.
00:02:01Vous avez besoin de l'API de capture d'écran et de la fonction getDisplayMedia. Vous demandez à l'écran au navigateur
00:02:06il vous donne un flux, le MediaRecorder l'encode, et c'est comme ça qu'Electron et Deno le font. Electro-Bun
00:02:12n'inclut pas du tout cette API, donc le seul moyen d'y accéder est de réintroduire Chromium, et cela
00:02:17ajoute 200 mégaoctets supplémentaires de lourdeur. L'API de Deno l'a implémentée, donc c'est le même code
00:02:24mais sans Chromium, et c'est pourquoi la taille du bundle de Deno finit par être d'environ 100 mégaoctets, et Electro-Bun
00:02:30finit par être plus proche de 400. Rust n'avait besoin de rien de tout cela car Tauri n'enregistre pas depuis
00:02:35la vue web du tout ; il le fait entièrement par le backend via le kit de capture d'écran natif. C'est
00:02:40le même framework macOS que QuickTime utilise, et tout est enregistré directement depuis le backend. Vous lui donnez
00:02:46un affichage, un codec et un chemin de fichier, et il écrit le fichier lui-même. La vue web n'est que l'interface utilisateur, elle ne touche jamais
00:02:52une seule image. Et vous obtenez aussi des choses gratuitement que la version JavaScript doit gérer.
00:02:56Le kit de capture d'écran mixe lui-même votre micro et l'audio système, et il finalise un MP4 correct. J'ai
00:03:02aussi laissé ffmpeg dans l'application Tauri pour pouvoir exporter vers différents formats, mais techniquement, c'est
00:03:07en fait optionnel. Okay, maintenant nous pouvons lancer ces applications pour détecter le temps de démarrage. J'ai écrit un script
00:03:13qui fait cela 10 fois pour pouvoir prendre la médiane. Electron, comme référence, était à 273 millisecondes, Tauri
00:03:19est en fait arrivé à 311 millisecondes, Electro-Bun était à 773 millisecondes et Deno à 242 millisecondes.
00:03:29La surprise ici pour moi a été que Tauri n'était pas le plus rapide, il est juste un cheveu derrière Electron, et Deno
00:03:34a en fait battu tout le monde. L'hypothèse serait que Rust plus la vue web système signifierait des démarrages
00:03:39instantanés, mais comme le moteur de rendu doit quand même démarrer dans tous les cas, c'est probablement ce qui contribue à
00:03:44la vitesse de démarrage légèrement plus lente. Electro-Bun est l'exception, presque trois fois Electron ; il lance
00:03:50un lanceur qui démarre Bun qui démarre Chromium, trois runtimes en chaîne, et on peut vraiment le sentir.
00:03:56Maintenant, regardons la mémoire après le lancement. Une fois que l'application est réellement en cours d'exécution, Electron est la référence
00:04:01encore, et c'était 128 mégaoctets. Tauri est arrivé à 109 mégaoctets, Electro-Bun à 208 mégaoctets et Deno à 98
00:04:10mégaoctets. Donc Deno et Tauri étaient pratiquement égaux, et Electro-Bun était pratiquement le double de tout le
00:04:15reste. Pour Tauri, ce n'est pas du tout l'amélioration x10 que le marketing suggère. Sur disque, oui, c'est beaucoup
00:04:21plus petit, mais l'empreinte mémoire réelle quand l'application tourne est beaucoup plus similaire aux autres
00:04:26outils. Et une chose à surveiller quand vous faites ces vérifications vous-même : Tauri utilise le
00:04:31système webview, et ces processus ne sont pas des enfants de votre application ; macOS les lance séparément, donc
00:04:36le moniteur d'activité montre Tauri à environ 36 mégaoctets, et on dirait qu'il bat Electron trois fois,
00:04:42mais ce n'est pas le cas. Donc, quand vous additionnez tous ces processus, les 36 mégaoctets deviennent plus proches de 109 mégaoctets,
00:04:48ce qui est ce que nous avons enregistré lors du test. En termes d'enregistrement d'écran lui-même, j'ai remarqué une bien meilleure
00:04:53performance de l'application Tauri, et c'est probablement parce que nous n'enregistrons pas les données dans la webview
00:04:58pour ensuite les transférer via un pont ; au lieu de cela, tout est enregistré avec le SDK natif qui vient
00:05:04avec le système. Si vous voulez vous rapprocher de captures à 60 fps, alors Rust et Tauri seront le
00:05:10chemin à suivre. Maintenant, regardons l'expérience développeur. En raison des différences de chaque plateforme, cette application simple
00:05:15n'était en fait pas du tout simple à construire. Globalement, Electron et Tauri étaient les plus faciles à
00:05:20implémenter, mais Deno et Electro-Bun ont en fait eu énormément de problèmes et de crashs système. Dans Deno, quand nous
00:05:26commencions un enregistrement puis cachions l'application, l'application entière se fermait simplement. Je pense que c'est parce que
00:05:30quand aucun écran ne reste visible, Deno suppose simplement que l'application est terminée, et il a donc terminé
00:05:36le processus entier. Donc, la solution de contournement était simplement de cacher la vue hors de l'écran à la place.
00:05:41Electro-Bun avait tous ces problèmes autour du besoin de bundler Chromium pour l'enregistrement d'écran, et pour une certaine
00:05:46raison, le paquet dépend en fait de 3js et BabylonJS, qui sont pour le rendu 3D, ce qui a contribué à la
00:05:53taille gonflée du bundle. Donc, dans l'ensemble, personnellement, je choisirais Tauri. Mais si vous ne voulez vraiment pas programmer
00:05:58en Rust, alors Electron reste la plateforme mature pour les développeurs TypeScript. Deno a l'air bien, mais je pense que
00:06:04la plateforme a encore besoin d'un peu de temps pour arriver à maturité. Et Electro-Bun, pour moi, était la pire de toutes.
00:06:09J'espère donc que vous pourrez vous faire votre propre avis. Dites-moi ce que vous en pensez dans les commentaires. Et nous avons aussi
00:06:13fait une vidéo entièrement sur Deno Desktop, donc si vous voulez en apprendre plus à ce sujet, alors vous pouvez cliquer sur cette
00:06:18vidéo ici. Sinon, c'était Warren de Betterstack. Merci d'avoir regardé, et je vous dis à la prochaine.