IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

La version 5 de Bun, le moteur d'exécution JavaScript, est disponible


Sujet :

JavaScript

  1. #1
    Chroniqueur Actualités
    Avatar de Bruno
    Homme Profil pro
    Rédacteur technique
    Inscrit en
    Mai 2019
    Messages
    1 976
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Rédacteur technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mai 2019
    Messages : 1 976
    Points : 38 427
    Points
    38 427
    Par défaut La version 5 de Bun, le moteur d'exécution JavaScript, est disponible
    Bun, un nouveau moteur d'exécution JavaScript, livré avec un client SQLite3 rapide,
    il apporte un peu de concurrence pour Node et Deno

    Bun est un moteur d'exécution JavaScript rapide et tout-en-un. Il permet de regrouper, transpiler, installer et exécuter des projets JavaScript et TypeScript. Il s’agit d’un runtime JavaScript avec un bundler natif, un transpiler, un task runner et un client npm intégrés.

    Bun est conçu pour remplacer les applications ou scripts JavaScript et TypeScript sur l’ordinateur local. Il implémente nativement des centaines d'APIs Node.js et Web, y compris environ 90 % des fonctions Node-API (modules natifs), fs, path, Buffer et plus encore. L'objectif de Bun est d'exécuter la plupart des codes JavaScript en dehors des navigateurs, en apportant des améliorations de performance et de complexité à l’infrastructure, ainsi que la productivité des développeurs grâce à des outils meilleurs et plus simples.

    Nom : Bun.png
Affichages : 101764
Taille : 7,8 Ko

    • Bun met en œuvre l'algorithme de résolution des modules de Node.js, de sorte qu’il est possible d’ utiliser des paquets npm dans bun.js. ESM et CommonJS sont supportés, mais Bun utilise ESM en interne. Les API Web comme fetch, WebSocket et ReadableStream sont intégrées ;
    • Dans bun.js, chaque fichier est transpilé. TypeScript et JSX fonctionnent simplement. Bun supporte "paths", "jsxImportSource "et plus à partir des fichiers tsconfig.json. Bun.Transpiler, le transpilateur JSX et TypeScript de bun est disponible en tant qu'API dans Bun.js ;
    • Il estpossible d’utiliser les appels système les plus rapides disponibles avec Bun.write pour écrire, copier, pipe, envoyer et cloner des fichiers. bun.js charge automatiquement les variables d'environnement à partir des fichiers .env. Plus besoin de require("dotenv").load() ;
    • Bun est livré avec un client SQLite3 rapide intégré bun:sqlite. Node-API bun.js implémente la plupart des Node-API (N-API). De nombreux modules natifs de Node.js fonctionnent simplement. bun:ffi appelle le code natif de JavaScript avec l'interface de fonction étrangère à faible coût de bun ;
    • node:fs node:path bun.js supporte nativement une liste croissante de modules Node.js de base ainsi que des globaux comme Buffer et process.
    Bun.js utilise le moteur JavaScriptCore, qui a tendance à démarrer et à fonctionner un peu plus rapidement que des choix plus traditionnels comme V8. Bun est écrit dans un langage de programmation de bas niveau avec une gestion manuelle de la mémoire. La plupart des éléments de Bun sont écrits à partir de zéro, notamment le transpilateur JSX/TypeScript, le client npm, le bundler, le client SQLite, le client HTTP, le client WebSocket.

    Le contrôle de bas niveau de la mémoire et l'absence de flux de contrôle caché de Bun simplifient considérablement l'écriture de logiciels rapides. Pour installer Bun, l’utilisateur doit executer ce script d'installation dans un terminal. Il télécharge Bun depuis GitHub.

    curl <a href="https://bun.sh/install" target="_blank">https://bun.sh/install</a> | bash

    Le serveur HTTP de Bun est construit sur des standards web comme Request et Response

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    // http.js
    export default {
      port: 3000,
      fetch(request) {
        return new Response("Welcome to Bun!");
      },
    };

    bun run http.js

    Ouvrez ensuite "http://localhost:3000" dans votre navigateur

    CLI de Bun

    bun run

    La même commande permettant d'exécuter des fichiers JavaScript et TypeScript avec le moteur d'exécution JavaScript de bun permet également d'exécuter les "scripts" de package.json. Remplacer npm run par bun run permet de gagner 160 ms à chaque exécution. bun exécute les scripts de package.json 30 fois plus vite que npm run.

    Npm est le gestionnaire de paquets par défaut pour l'environnement d'exécution JavaScript Node.js. Npm se compose d'un client en ligne de commande, également appelé npm, et d'une base de données en ligne de paquets publics et privés payants, appelée le registre npm.

    bun install

    bun install est un gestionnaire de paquets compatible avec npm. Il utilise les appels système les plus rapides disponibles pour copier les fichiers.
    bun wiptest. Un gestionnaire de tests de type Jest pour les projets JavaScript et TypeScript intégré à bun. Bun essaie toujours d'utiliser la méthode d'installation la plus rapide disponible pour la plateforme cible. Sous macOS, c'est clonefile et sous Linux, c'est hardlink.

    Il est possible de changer la méthode d'installation utilisée avec l'option --backend. En cas d'indisponibilité ou d'erreur, clonefile et hardlink se rabattent sur une implémentation de copie de fichiers spécifique à la plateforme. Bun stocke les paquets installés depuis npm dans ~/.bun/install/cache/${name}@${version}. Notons que si la version semver a une balise build ou pre, elle est remplacée par un hash de cette valeur. Cela permet de réduire les risques d'erreurs dues à de longs chemins de fichiers, mais complique malheureusement la détermination de l'endroit où un paquet a été installé sur le disque.

    Lorsque le dossier node_modules existe, avant l'installation, Bun vérifie si le "nom" et la "version" dans package/package.json dans le dossier node_modules attendu correspondent au nom et à la version attendus. C'est ainsi qu'il détermine s'il doit installer ou non. Il utilise un analyseur JSON personnalisé qui arrête l'analyse dès qu'il trouve "nom" et "version". Lorsqu'un bun.lockb n'existe pas ou que le package.json a changé de dépendances, les archives sont téléchargées et extraites rapidement pendant la résolution.

    Lorsqu'un bun.lockb existe et que le package.json n'a pas changé, bun télécharge les dépendances manquantes. Si le paquet dont le nom et la version correspondent existe déjà à l'emplacement prévu dans node_modules, bun n'essaiera pas de télécharger l'archive. Bun stocke les valeurs normalisées de cpu et os de npm dans le fichier de verrouillage, avec les paquets résolus.

    Il évite de télécharger, d'extraire et d'installer les paquets désactivés pour la cible au moment de l'exécution. Cela signifie que le fichier de verrouillage ne changera pas entre les plateformes/architectures, même si les paquets finalement installés changent. Les dépendances entre pairs sont gérées de manière similaire à yarn. bun install n'installe pas automatiquement les dépendances entre pairs et essaiera de choisir une dépendance existante.

    Burn apporte de la concurrence aux moteurs d’exécution déjà existant

    Node.js

    Node.js est un environnement d'exécution JavaScript basé sur le moteur JavaScript V8 de Google qui exécute le code JavaScript en dehors du navigateur. Il aide les développeurs à créer des unités de code non bloquantes afin de tirer le meilleur parti des ressources système pour créer des applications plus réactives.

    Le système de modules de Node permet aux développeurs d'étendre la plateforme à l'aide de modules tiers pour obtenir un maximum de fonctionnalités. Node.js permet simplement aux développeurs d'utiliser chaque projet JavaScript open source sur le serveur de la même manière que sur le navigateur client, ce qui permet une intégration plus étroite et plus efficace entre le serveur Web et les scripts de l'application Web prise en charge.

    Deno

    Créé par Ryan Dahl, ingénieur logiciel, développeur du runtime JavaScript Node.js et TypeScript, Deno est un moteur d'exécution (runtime) simple, moderne et sécurisé pour JavaScript et TypeScript, il utilise JavaScript V8 et est construit en Rust. Deno assume explicitement le rôle de runtime et de gestionnaire de paquets au sein d'un seul et même exécutable, plutôt que de nécessiter un programme de gestion de paquets distinct.

    Outre le runtime Deno, l’outil fournit également une liste de modules standard qui sont examinés par les responsables de Deno et dont le fonctionnement est garanti avec une version spécifique de Deno. Ils cohabitent avec le code source de Deno dans le référentiel denoland/deno. Ces modules standard sont hébergés sur deno.land/std et sont distribués via des URL comme tous les autres modules ES compatibles avec Deno.

    Bun a été construit à partir de zéro pour se concentrer sur trois choses principales :

    • démarrage rapide (il a l'avantage d'être rapide) ;
    • de nouveaux niveaux de performance (extension de JavaScriptCore, le moteur) ;
    • être un outil formidable et complet (bundler, transpiler, gestionnaire de paquets).

    Source : Bun

    Et vous ?

    Lequel de ses trois moteurs d'exécution JavaScript préférez-vous ? Deno, Node.js ou Bun ?

    Quelle amélioration de Bun préférez-vous le plus ?

    Voir aussi :

    OpenSSL annonce la disponibilité de la version 3.0 et le renouvellement de la Licence Apache-2.0, avec l'utilisation du nouveau module FIPS dans les projets de développement d'applications

    Node.js 16 est maintenant disponible, et vient avec une mise à niveau du moteur JavaScript V8, des binaires préconstruits pour les puces Apple et des API stables supplémentaires

    La Version 1.9 de Deno, le runtime pour exécuter JavaScript et TypeScript, est disponible, elle améliore les appels de commande dans Rust et apporte de nouvelles fonctionnalités

    La Fondation Node.js annonce la mise en place d'un programme de certification pour les développeurs Node.js, qui débutera au second trimestre

  2. #2
    Membre éprouvé
    Femme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    270
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Italie

    Informations forums :
    Inscription : Juillet 2012
    Messages : 270
    Points : 1 041
    Points
    1 041
    Par défaut
    ça je la trouve une bonne idée

  3. #3
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Points : 20 246
    Points
    20 246
    Par défaut
    Ca semble prometteur et on fait un pas de plus vers le support natif de typescript !

  4. #4
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2014
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2014
    Messages : 16
    Points : 64
    Points
    64
    Par défaut Evolution des moteurs JS hors navigateur
    Répondre aux 2 questions de l'auteur est prématuré. Ce qui l'est moins, c'est de constater que 2 projets (Deno en Rust, Bun en Zig) supportent TypeScript.

    Je sais, je sais: TypeScript est sous-représenté chez les devs JS. J'aurais pourtant plus de facilité à filer les billes à un dev Front si mon back est en TypeScript. Ne me demandez pas pourquoi Idem d'ailleurs si le back est en Dart, même si son rapport avec les devs Front semble plus mitigé.

    Pour l'instant, le choix de l'un ou l'autre sont hors champs. L'avenir nous dira ce qu'il en est, mais les deux solutions ont du potentiel.

    Merci pour cette belle présentation qui a remis Bun dans mon radar.

  5. #5
    Membre averti

    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2013
    Messages
    189
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Pérou

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2013
    Messages : 189
    Points : 380
    Points
    380
    Par défaut Interprétation de JavaScript par Java
    Interprétation de JavaScript par Java, c'est drôle, non ? j'ai cru lire que le créateur de JavaScript (Brendan Machin ?) ou le fondateur de NetScape (Jim Truc ?) rêvait de la mort de Java

  6. #6
    Chroniqueur Actualités

    Homme Profil pro
    Dirigeant
    Inscrit en
    Juin 2016
    Messages
    3 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Dirigeant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2016
    Messages : 3 160
    Points : 66 309
    Points
    66 309
    Par défaut Bun, le nouveau moteur d'exécution JavaScript, prendra-t-il la couronne de Node ?
    Bun, le nouveau moteur d'exécution JavaScript, prendra-t-il la couronne de Node ?
    Bun est présenté comme un tueur de Node en raison de sa simplicité et de sa rapidité

    Bun.js a été publié en version bêta il y a environ un mois, mais le nouveau-né de la famille JavaScript suscite déjà l'intérêt d'une grande partie de la communauté du langage. Son objectif principal est de fournir un environnement pour exécuter JavaScript en dehors du navigateur, tout comme Node.js et Deno.js, mais le développeur de Bun affirme que le moteur progresse pour offrir de nouveaux niveaux de vitesse et une complexité accrue. Bun est présenté comme le "couteau suisse" du monde JS puisque vous avez un empaqueteur, un transpileur et un gestionnaire de paquets en un seul outil. Mais parviendra-t-il à surpasser Node et Deno à l'avenir ?

    L'arrivée de nouveaux frameworks et de nouvelles bibliothèques en permanence est une caractéristique de JavaScript. En juillet 2022, l'écosystème JavaScript a accueilli un nouveau membre : Bun.js. Il est défini comme "un moteur d'exécution JavaScript rapide tout-en-un". Bun est le troisième outil du troisième de ce type après Node.js et Deno.js, et a été créé par Jarred Sumner à l'aide du langage de programmation Zig. Le langage est encore à ses débuts dans sa version 0.9.1, mais Sumner justifie le choix Zig par les avantages que présente son contrôle manuel de la mémoire de bas niveau et l'absence d'un "flux de contrôle caché".

    Bun met l'accent sur la simplicité et la rapidité

    Les développeurs auraient ainsi plus de facilité à écrire des logiciels rapides. Bun est un projet open source et est publié sous licence MIT. Il est basé sur le moteur JavaScriptCore de WebKit, qui est plus rapide que les alternatives courantes telles que V8, et comme Deno, Bun prend nativement en charge TypeScript. Mais contrairement à Deno, Bun est destiné à remplacer Node, Webpack, Babel, Yarn et PostCSS, le tout dans un seul et même paquet. Il est important de rappeler que Deno n'a pas été conçu comme un remplacement de Node. Son créateur, Ryan Dahl, l'a conçu pour améliorer la productivité. Alors, comment Bun se compare-t-il à Deno et Node ?

    Nom : edr.png
Affichages : 97480
Taille : 48,1 Ko

    Bun veut surtout convaincre les développeurs avec un paquet complet qui comprend entre autres, un transpileur JSX/TypeScript, un client npm, un empaqueteur ainsi que des clients pour SQLite, HTTP et Websocket. Bien que Bun soit inspiré par les concurrents Node et Deno, Sumner a déclaré lors de sa présentation qu'il tente aussi clairement d'améliorer l'expérience de développement et la productivité en fournissant un ensemble d'outils. Bun supporte la résolution de modules Node.js, aussi bien avec des modules CommonJS qu'avec des modules EcmaScript (ESM). Cela devrait permettre d'utiliser une grande partie des paquets npm.

    Sumner a expliqué que Bun est né de sa frustration face à la vitesse, ou au manque de vitesse, d'un langage : « j'ai été tellement frustré par la lenteur de tout ce qui est en JavaScript. Je sais que JavaScript peut être beaucoup plus rapide ». En tant qu'ancien développeur front-end chez Stripe, il a déclaré qu'il sait combien un cycle d'itération rapide est essentiel à la productivité. Ainsi, la vitesse de Bun ne se limiterait pas simplement à servir les requêtes plus rapidement que les autres moteurs d'exécution. Cela signifierait également qu'il est plus rapide pour installer des paquets, exécuter des tests, regrouper et transpiler.

    La page d'accueil de Bun indique des performances 3 et 4 fois supérieures à celles de Deno et Node. Ce sont des des chiffres impressionnants, mais Tomas Fernandez, développeur et ingénieur en informatique dématérialisée, a réalisé quelques tests pour voir comment Bun se comporte réellement, mais aussi pour déterminer à quel point il est rapide. Il a récemment partagé les résultats de ces tests, dont en voici quelques points forts :

    Gestion des paquets avec npm et Bun

    Dans ce premier test, Fernandez a comparé les performances de Bun à celles de npm pour la création de nouveaux projets. Les résultats ont révélé que npm prend 49 secondes pour créer une application React vide. Par contre, il faut moins d'une seconde à Bun pour terminer la configuration. « C'est une sacrée amélioration », a écrit Fernandez. Mais est-ce une comparaison valable ? Après une inspection plus poussée, il a constaté que :

    • npm a installé 1 392 paquets et la taille de node_modules est de 250 Mo ;
    • Bun n'a installé que 8 paquets, pour une taille totale de 72 Mo.


    D'après Fernandez, l'on compare ici des pommes et des oranges ici, car le modèle React de départ de Bun est plus petit. Toutefois, il a ajouté que le modèle tout à fait utilisable pour le développement. « Je peux lancer bun dev pour commencer à bidouiller immédiatement », a écrit l'ingénieur dans un billet de blogue. De plus, Bun se recharge également automatiquement à chaque changement. Il a néanmoins précisé que la commande React starter de Bun ne peut pas créer un build de production. Pour cela, il faut ajouter des react-scripts avec : bun add react-scripts -d.

    Nom : test1gestion.jpg
Affichages : 7157
Taille : 12,1 Ko

    La nouvelle dépendance installe 1 133 paquets supplémentaires, ce qui porte la taille totale de node_modules à 298 Mo. Fernandez estime que cela offre à présent de meilleures conditions pour la comparaison. Après avoir créé la nouvelle application 10 fois avec chaque outil, il a obtenu des chiffres à comparer. Dans ce test, Fernandez a observé que Bun est au moins 6 fois plus rapide que npm. De temps en temps, cependant, Bun se bloquerait (un problème connu). De même, npm ralentirait considérablement de temps en temps (Fernandez a indiqué qu'il n'a pas pu déterminer la cause de ce problème).

    Ajout et suppression de paquets avec Bun et npm

    Le test suivant concerne le temps que prennent npm et Bun pour ajouter et supprimer des paquets. Fernandez a utilisé une application React créée par npm comme terrain d'essai. Après avoir supprimé et réintroduit Webpack 10 fois avec chaque outil, il a obtenu les résultats suivants :

    Nom : test2supaj.jpg
Affichages : 7175
Taille : 16,8 Ko

    • Bun est 20 fois plus rapide que npm ;
    • Bun utilise un fichier de verrouillage binaire au lieu de package-lock.json. Mais il peut imprimer un fichier de verrouillage JSON compatible avec Yarn avec bun install -y ;
    • Bun n'installe pas les dépendances des pairs par défaut comme npm. Vous pouvez donc vous retrouver avec un ensemble de paquets différent de celui attendu dans votre dossier node_modules ;
    • le seul problème est que le gestionnaire de paquets de Bun n'est pas compatible à 100 % avec npm.


    Bun en tant qu'exécuteur de tâches

    Selon Fernandez, le composant d'exécution de Bun n'a pas implémenté suffisamment d'API Node pour faire des choses complexes comme la construction de projets React ou l'exécution de tests de bout en bout. Pourtant, il estime qu'il y a un domaine dans lequel Bun peut aider dès maintenant : il pourrait être utiliser comme un remplacement de npm run. « Le problème avec npm est qu'il prend environ 150 à 200 ms pour démarrer. Cela peut sembler anodin, mais lorsque vous exécutez fréquemment des scripts, vous pouvez sentir ce quart de seconde grignoter peu à peu votre productivité », a-t-il déclaré.

    Nom : test3runner.jpg
Affichages : 7138
Taille : 20,5 Ko

    « Bun n'a pas ce problème de démarrage, donc bun run test devrait être au moins quelques millisecondes plus rapide que npm run test », a-t-il ajouté. Pour le confirmer, il a exécuté le même ensemble de scripts 50 fois et a fait la moyenne des résultats. La figure ci-dessous présente les résultats de ce test. Les performances de Bun semblent légèrement supérieures à celles de npm.

    Copie de gros fichiers

    Dans ce test, il a comparé la façon dont chaque moteur d'exécution gère la copie de fichiers volumineux, un domaine dans lequel beaucoup d'efforts d'optimisation ont été déployés. Fernandez a copié le même fichier de 1 Go généré aléatoirement avec Bun, Deno, Node et cp pour le test. Après 20 exécutions avec chaque outil, il a déclaré qu'il semble que Bun et Deno soient aussi performants l'un que l'autre, et qu'ils l'emportent sur cp de près de 50 %. Quant à Node, il prend plus de 3 fois plus de temps pour effectuer la même tâche.

    Nom : copy.jpg
Affichages : 7126
Taille : 20,6 Ko

    En outre, Bun inclut un serveur HTTP fonctionnel, ce qui selon Fernandez, présente une opportunité de comparaison avec Node et Deno. Pour le test, il a utilisé les scripts d'exemple de Bun. Les résultats ont révélé que Deno a obtenu des résultats supérieurs de 19 % à ceux de Node, mais Bun a écrasé la concurrence en étant deux fois plus rapide.

    Conclusion

    « Non seulement Bun est rapide, mais il donne l'impression d'être rapide. On a l'impression de pouvoir faire n'importe quoi en moins d'une seconde. Bun remplacera-t-il Node ? Il est trop tôt pour le dire. Lorsque Deno est sorti, il n'a certainement pas tué Node - mais je ne pense pas que c'était l'intention, car il n'a jamais été conçu comme un remplacement de Node. Mais Bun vise la compatibilité, il a donc plus de chances. Et, comme nous l'avons vu, même à ce stade précoce, il peut être un outil très puissant », a déclaré Fernandez. D'autres commentaires estiment qu'avec l'arrivée de Bun, beaucoup de choses pourraient s'améliorer avec JavaScript.

    Nom : rfd.png
Affichages : 7185
Taille : 38,1 Ko

    Il est probablement temps pour JavaScript d'être mieux adopté dans les domaines où les performances sont critiques comme l'IA/ML, le développement de jeux, etc. Jusqu'à présent, la plupart des observateurs s'accordent à dire que Bun mérite l'attention rien que pour ses performances, et que la compatibilité avec les modules npm est un énorme avantage. Cela dit, Zig n'a pas la sécurité mémoire intégrée de Rust, utilisée par Deno. Bun n'en est qu'à ses débuts et la question de savoir si le projet atteindra l'élan dont il a besoin pour prospérer reste ouverte, mais il est certain que c'est un projet à suivre et qu'il aura une certaine influence.

    Par ailleurs, Bun pourrait avoir des problèmes d'adoptabilité. Alors que Deno et Node.js peuvent fonctionner sur plusieurs plateformes, Bun est lié à des variantes Unix hautes performances : macOS (x86 et Arm), Linux ou Windows Subsystem for Linux (WSL), ce qui limite son utilisation. Les développeurs Windows devront utiliser WSL, qui s'adresse principalement aux développeurs Linux opérant dans un environnement Windows et qui présente des limitations, comme le fait de n'être disponible que pour Windows 10.

    Source : Billet de blogue

    Et vous ?

    Quel est votre avis sur le sujet ?
    Que pensez-vous du moteur d'exécution JavaScript Bun ?
    Pensez-vous que ces caractéristiques lui permettront de faire de l'ombre à Node ou le surpasser ?

    Voir aussi

    Bun, un nouveau moteur d'exécution JavaScript, livré avec un client SQLite3 rapide, il apporte un peu de concurrence pour Node et Deno

    Pendant que Deno, le runtime de JS et TS, gagne en maturité, certaines entreprises tentent de l'utiliser en production, mais d'autres repartent non satisfaites à la suite des tests effectués

    Les conteneurs JavaScript surpasseront-ils les conteneurs Linux ? Le créateur de Node.js pense que les conteneurs JavaScript pourraient simplifier l'écriture des services Web

    Fresh, un framework web de nouvelle génération, conçu pour la vitesse, la fiabilité et la simplicité, il apporte un peu de concurrence pour Next.js

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Avril 2013
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 109
    Points : 385
    Points
    385
    Par défaut
    Ça va déprendre de sa stabilité pour être utilisé en développement/production dans le monde pro et de l'adoption par les entreprises.

    Autant aux USA l'adoption peut être mais en France c'est pas gagné, suffit de voir la quantité d'entreprise utilisant encore d'anciennes version de php/symfony, ou d'angular (je vois encore beaucoup d'entreprise utilisant angular 8). Ou le peu d'adoption de RoR, Python/Django ou même Go. J'ai l'impression qu'on aime pas trop sortir des sentiers battus en France

  8. #8
    Membre éclairé Avatar de rt15
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2005
    Messages
    262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2005
    Messages : 262
    Points : 665
    Points
    665
    Par défaut
    Pourquoi est-ce appelé un moteur d'exécution JavaScript ? Le moteur semble être JavaScriptCore. Bun ne fait qu'ajouter des APIs et des "services" autour de ce moteur dont certains ne servent qu'au développement et pas à l'exécution (Gestionnaire de paquet, transpiler...). Peut être appeler ça un environnement d'exécution accompagné d'outils de développement.
    Niveau perf, ce sont plus les gains des tâches de dev qui sont présentées, pas les perfs des applications qui vont s'exécuter dans l'environnement Bun (qui dépendent surtout du moteur et de la qualité d'implémentation des APIs).

  9. #9
    Chroniqueur Actualités
    Avatar de Bruno
    Homme Profil pro
    Rédacteur technique
    Inscrit en
    Mai 2019
    Messages
    1 976
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Rédacteur technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mai 2019
    Messages : 1 976
    Points : 38 427
    Points
    38 427
    Par défaut La version 5 de Bun, le moteur d'exécution JavaScript, est disponible
    La version 5 de Bun, le moteur d'exécution JavaScript, qui transpile, installe et exécute des projets JavaScript et TypeScript,
    apporte plusieurs pilotes de base de données

    Bun est un nouveau moteur d’exécution JavaScript avec un bundler natif, un transpiler, un task runner et un client npm intégrés. L’équipe de développement de Burn a annoncé le 18 juillet la version 5 du moteur d'exécution. Elle apporte de nouvelles fonctionnalités, notamment les espaces de travail npm, Bun.dns et le support de node:readline. La compatibilité avec node:tls et node:net a été améliorée, de sorte que plusieurs pilotes de base de données fonctionnent maintenant dans Bun pour la première fois, notamment Postgres.js, mysql2, node-redis, et d'autres.

    Un transpileur ou transcompilateur est un programme qui traduit un code source d'un langage à un autre au même niveau d'abstraction (ce qui le différencie d'un compilateur dont le résultat est d'un niveau inférieur à celui de son entrée). Le transcompilateur peut utiliser comme langage d'entrée un langage existant comme cfront qui convertit C++ en C ou un nouveau langage comme Coffeescript qui est transcompilé en Javascript. Le langage d'entrée peut être un sur-ensemble du langage de sortie, ce qui signifie que tout code écrit dans le langage de sortie est valable pour le langage d'entrée.

    Nom : Bun.png
Affichages : 108576
Taille : 7,8 Ko

    Bun est conçu pour remplacer les applications ou scripts JavaScript et TypeScript sur l’ordinateur local. Il implémente nativement des centaines d'APIs Node.js et Web, y compris environ 90 % des fonctions Node-API (modules natifs), fs, path, Buffer et plus encore. L'objectif de Bun est d'exécuter la plupart des codes JavaScript en dehors des navigateurs, en apportant des améliorations de performance et de complexité à l’infrastructure, ainsi que la productivité des développeurs grâce à des outils meilleurs et plus simples.

    Bun continue également à devenir plus rapide et plus stable - l'instanciation du tampon serait 10x plus rapide, crypto.createHasher() serait 50x plus rapide, et l'installation de bun a reçu des dizaines de corrections de bogues.

    Workspaces dans package.json

    Bun supporte maintenant les Workspaces dans le package.json, et c'est rapide. Bun installe le monorepo Remix en 500 ms environ sous Linux.

    • 28x plus rapide que npm install
    • 12x plus rapide que yarn install (v1)
    • 8x plus rapide que pnpm install

    Les workspaces permettent de développer facilement des logiciels complexes sous la forme d'un monoréseau composé de plusieurs paquets indépendants. Pour l'essayer, spécifiez une liste de sous-paquets dans le champ workspaces de votre package.json ; il est classique de placer ces sous-paquets dans un répertoire appelé packages.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    {
      "name": "my-project",
      "version": "1.0.0",
      "workspaces": ["packages/a", "packages/b"]
    }

    Cela présente quelques avantages majeurs

    • le code peut être divisé en parties logiques. Si un paquet dépend d'un autre, il est possible de l'ajouter comme dépendance avec bun add. Si le paquet b dépend de a, bun install fera un lien symbolique de votre répertoire local packages/a vers le dossier node_modules de b, au lieu d'essayer de le télécharger depuis le registre npm ;
    • les dépendances peuvent être dé-dupliquées. Si a et b partagent une dépendance commune, elle sera hissée dans le répertoire node_modules racine. Cela réduit l'utilisation redondante du disque et minimise les problèmes de "dépendance infernale" associés à l'installation simultanée de plusieurs versions d'un paquet.

    Bun.dns et node:dns

    Bun peut désormais résoudre des noms de domaine à l'aide de l'API intégrée Bun.dns. Pour l'instant, Bun.dns n'expose qu'une seule fonction : lookup.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    import { dns } from "bun";
    const records = await dns.lookup("example.com", { family: 4 });
    console.log(records); // [{ address: "93.184.216.34" }]

    En-têtes personnalisés dans WebSocket

    Une fonctionnalité demandée depuis longtemps dans la spécification WebSocket est la possibilité de définir des en-têtes personnalisés lors de l'ouverture d'une WebSocket. Bien que cette fonctionnalité n'ait pas encore été intégrée à WebSocket, Bun l'implémente désormais. Cela permet aux utilisateurs de personnaliser les en-têtes utilisés pour la demande de handshake du client WebSocket.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    const ws = new WebSocket("ws://localhost/chat", {
      headers: {
        Authorization: "...",
      },
    });

    Sockets utilisant node:tls et node:net

    Bun prend désormais en charge la création de sockets utilisant net.connect() et tls.connect(). Cela permet de débloquer plusieurs bibliothèques de pilotes de bases de données. Voici, quelques exemples représentatifs :

    Se connecter à Postgres dans Bun en utilisant Postgres.js

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    import postgres from "postgres";
    const sql = postgres();
    const [{ version }] = await sql`SELECT version()`;
    console.log(version); // "PostgreSQL 14.2 ..."

    Se connecter à MySQL dans Bun en utilisant mysql2

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    import { createConnection } from "mysql2/promise";
     
    const connection = await createConnection({
      host: "localhost",
      user: "root",
      database: "test",
    });
     
    const [rows] = await connection.execute("SELECT 1+2 AS count");
    console.log(rows); // [{ count: 3 }]

    Amélioration des performances

    • Nouveau Buffer() 10 fois plus rapide : auparavant, l'implémentation de Buffer dans Bun utilisait [C=Javascript]Object.setPrototypeOf()[C] pour créer chaque nouvelle instance. L'élimination de ce goulot d'étranglement rend l'instanciation d'un petit Buffer 10 fois plus rapide dans Bun ;
    • crypto.createHash() 50 fois plus rapide : auparavant, Bun utilisait une implémentation purement JavaScript de crypto.createHash(). Maintenant, elle est implémentée en utilisant le code natif de BoringSSL, ce qui permet de gagner 50 fois en vitesse.

    Support pour HTTPS_PROXY

    Bun reconnaît désormais les variables d'environnement HTTPS_PROXY, HTTP_PROXY et NO_PROXY lors des requêtes HTTP sortantes, ce qui inclut fetch() et bun install. Ces variables permettent de spécifier un proxy pour transférer, ou ne pas transférer, certaines requêtes HTTP et sont utiles lors de l’exécution de Bun au sein d'un pare-feu d'entreprise.

    export HTTPS_PROXY="http://proxy.example.com:8080"
    export NO_PROXY="localhost,noproxy.example.com"


    Burn et la concurrence des moteurs d’exécution déjà existant

    Tout comme bun, Deno est un moteur d'exécution Javascript. Créé par Ryan Dahl, ingénieur logiciel, développeur du runtime JavaScript Node.js et TypeScript, Deno est un moteur d'exécution simple, moderne et sécurisé pour JavaScript et TypeScript, il utilise JavaScript V8 et est construit en Rust. Deno assume explicitement le rôle de runtime et de gestionnaire de paquets au sein d'un seul et même exécutable, plutôt que de nécessiter un programme de gestion de paquets distinct.

    Outre le runtime Deno, l’outil fournit également une liste de modules standard qui sont examinés par les responsables de Deno et dont le fonctionnement est garanti avec une version spécifique de Deno. Ils cohabitent avec le code source de Deno dans le référentiel denoland/deno. Ces modules standard sont hébergés sur deno.land/std et sont distribués via des URL comme tous les autres modules ES compatibles avec Deno.

    Contrairement à Deno, Bun est destiné à remplacer Node, Webpack, Babel, Yarn et PostCSS, le tout dans un seul et même paquet. Il est important de rappeler que Deno n'a pas été conçu comme un remplacement de Node. Ryan Dahl, l'a conçu pour améliorer la productivité. Node.js est un environnement d'exécution JavaScript basé sur le moteur JavaScript V8 de Google qui exécute le code JavaScript en dehors du navigateur. Il aide les développeurs à créer des unités de code non bloquantes afin de tirer le meilleur parti des ressources système pour créer des applications plus réactives.

    Le système de modules de Node permet aux développeurs d'étendre la plateforme à l'aide de modules tiers pour obtenir un maximum de fonctionnalités. Node.js permet simplement aux développeurs d'utiliser chaque projet JavaScript open source sur le serveur de la même manière que sur le navigateur client, ce qui permet une intégration plus étroite et plus efficace entre le serveur Web et les scripts de l'application Web prise en charge.

    Source : Bun

    Et vous ?

    Quel est votre avis sur le sujet ?

    Que pensez-vous du moteur d'exécution JavaScript Bun ?

    Pensez-vous que ces caractéristiques lui permettront de faire de l'ombre à Node ou le surpasser ?

    Voir aussi :

    Bun, un nouveau moteur d'exécution JavaScript, livré avec un client SQLite3 rapide, il apporte un peu de concurrence pour Node et Deno

    Bun, le nouveau moteur d'exécution JavaScript, prendra-t-il la couronne de Node ? Bun est présenté comme un tueur de Node en raison de sa simplicité et de sa rapidité

Discussions similaires

  1. Réponses: 1
    Dernier message: 22/10/2021, 09h25
  2. Réponses: 0
    Dernier message: 13/08/2014, 23h31
  3. FTL JIT : le nouveau moteur JavaScript d'Apple
    Par sekaijin dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 09/05/2014, 18h06
  4. Réponses: 9
    Dernier message: 24/03/2011, 16h33
  5. [javascript] exécution de fonct. avec l'instruction onload
    Par TERRIBLE dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 11/03/2006, 18h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo