Bun v1.3.12 — Automatisation Naveau Et Native, Supporte `using` et `await using`

Bun v1.3.12 — Automatisation Naveau Et Native, Supporte `using` et `await using`

lschvn

Bun v1.3.12 est arrivé le 10 avril avec l'un des ensembles de fonctionnalités les plus ambitieux des dernières versions. Deux avancées redéfinissent ce qu'un runtime JavaScript peut faire nativement : l'automatisation naveau sans navigateur et le support natif de la proposition TC39 Explicit Resource Management. Voici ce qui a changé.

Bun.WebView — Automatisation Naveau Intégrée

La fonctionnalité principale est Bun.WebView, une API d'automatisation naveau intégrée directement au runtime. Pas de Puppeteer, pas de Playwright — juste une API native avec deux moteurs :

  • WebKit (défaut sur macOS) — zéro dépendance externe, utilise le WKWebView système
  • Chrome (cross-platform) — piloté via le DevTools Protocol, détecte automatiquement les navigateurs installés ou accepte un chemin personnalisé

Les actions basées sur des sélecteurs attendent automatiquement l'actionabilité (style Playwright) — un élément doit être attaché, visible, stable et non obstrué avant qu'un clic se déclenche. Toutes les entrées sont dispatchées comme des événements au niveau de l'OS avec isTrusted: true.

await using view = new Bun.WebView({ width: 800, height: 600 });

await view.navigate("https://example.com");
await view.click("a[href='/docs']");   // attend l'actionabilité, clic natif
await view.scroll(0, 400);             // événement wheel natif, isTrusted: true

const title = await view.evaluate("document.title");
const png = await view.screenshot({ format: "jpeg", quality: 90 });
await Bun.write("page.jpg", png);

Un sous-processus navigateur est partagé par processus Bun ; les appels supplémentaires à new Bun.WebView() ouvrent des onglets dans la même instance. Les appels CDP bruts sont disponibles via view.cdp(method, params) pour les cas avancés.

using et await using Natifs dans JavaScriptCore

La proposition TC39 Explicit Resource Management — déjà disponible en TypeScript via le downleveling — fonctionne désormais nativement dans le moteur JavaScriptCore de Bun. Plus de 1 650 commits WebKit en amont ont atterri dans cette version, apportant les déclarations using et await using en tant que fonctionnalité native.

function readFile(path) {
  using file = openFile(path);   // file[Symbol.dispose]() appelé en fin de bloc
  return file.read();
}

async function fetchData(url) {
  await using connection = await connect(url);  // [Symbol.asyncDispose]() awaité
  return connection.getData();
}

Aucune étape de transpilation requise. Cela aligne Bun avec le graphe de modules natif et rend le nettoyage des ressources ergonomique sans wrapper utilitaire.

URLPattern — Jusqu'à 2,3× Plus Rapide

URLPattern.test() et URLPattern.exec() ont reçu une refonte、性能 significative. La correspondance regex interne appelle désormais directement le moteur regex compilé au lieu d'allouer des objets JavaScript temporaires à chaque appel, éliminant jusqu'à 24 allocations GC par appel.

BenchmarkAvantAprèsAccélération
test() correspondance, groupes nommés1,05 µs487 ns2,16×
test() pas de correspondance579 ns337 ns1,72×
test() correspondance, simple971 ns426 ns2,28×
exec() correspondance, groupes nommés1,97 µs1,38 µs1,43×

Effet secondaire : les internaux de URLPattern ne polluent plus RegExp.lastMatch ou RegExp.$N.

Planificateur Bun.cron() In-Process

Bun.cron dispose désormais d'une surcharge callback in-process qui exécute une fonction selon un schedule cron, complétant la variante existante au niveau OS qui enregistre des entrées crontab/launchd/Task Scheduler. La version in-process est plus légère, fonctionne de manière identique sur toutes les plateformes, et partage l'état directement avec le reste de l'application.

Garanties clés : pas de chevauchement (le prochain déclenchement est planifié uniquement après la résolution du handler), scheduling UTC, compatible --hot (les jobs sont nettoyés avant la ré-évaluation du graphe de modules), et disposable via using.

Autres Améliorations

  • Corrections sockets UDP : les erreurs ICMP (port unreachable, host unreachable) sont désormais transmises via le handler d'erreur au lieu de fermer silencieusement le socket. Les datagrammes tronqués sont détectables via un nouveau paramètre flags.truncated.
  • Cycle de vie des unix domain sockets : correspond désormais à Node.js — se lier à un fichier socket existant retourne correctement EADDRINUSE, et stop() nettoie automatiquement le fichier socket.
  • Exécutables autonomes sur Linux : bun build --compile embed désormais le graphe de modules via une section ELF .bun au lieu de lire depuis /proc/self/exe, corrigeant les binaires avec permissions execute-only.
  • Optimisations SIMD : Bun.stripANSI, Bun.stringWidth et les helpers ANSI partagés ont reçu une accélération SIMD (prologue 4×-unrolled, skips CSI/OSC en vrac), avec jusqu'à ~4× d'amélioration sur les entrées ASCII simples.
  • Améliorations JIT : tier-up plus rapide pour les fonctions stables, Array.isArray en intrinsèque JIT, String#includes optimisé, et arithmétique BigInt améliorée.

Mettez à jour avec bun upgrade ou installez depuis bun.sh.

{tldr}

  • Bun.WebView apporte l'automatisation naveau avec les moteurs WebKit et Chrome, aucune dépendance externe — clics, scrolls, screenshots et accès CDP natifs dans une seule API
  • La proposition TC39 using/await using (Explicit Resource Management) est désormais supportée nativement dans JavaScriptCore, éliminant le besoin de downleveling TypeScript pour le nettoyage des ressources
  • Les opérations URLPattern sont jusqu'à 2,3× plus rapides grâce aux appels directs du moteur regex et à l'élimination de 24 allocations GC par appel {/tldr}

Articles connexes

Plus de couverture avec des sujets et tags en commun.

Bun v1.3.11 avec Cron natif au niveau OS et intégration au stack IA d'Anthropic
bun

Bun v1.3.11 avec Cron natif au niveau OS et intégration au stack IA d'Anthropic

Bun v1.3.11 réduit le binaire de 4 Mo, intègre Bun.cron pour les jobs planifiés au niveau OS, et marque un moment pivot alors que le runtime rejoint Anthropic pour alimenter Claude Code.
Deno 2.7 Stabilise l'API Temporelle, Ajoute le Support Windows ARM et les Overrides npm
javascript

Deno 2.7 Stabilise l'API Temporelle, Ajoute le Support Windows ARM et les Overrides npm

Deno 2.7 est une version majeure du cycle : l'API Temporal est désormais en production, les builds Windows on ARM natifs arrivent, npm overrides fonctionne comme dans Node, et des dizaines d'amélioration de compatibilité Node.js atterrissent.
Bun vs Node vs Deno en 2026 : Le Duel des Runtimes Que Personne N'a Demandé (Mais Que Tout Le Monde Fait)
javascript

Bun vs Node vs Deno en 2026 : Le Duel des Runtimes Que Personne N'a Demandé (Mais Que Tout Le Monde Fait)

Trois runtimes JavaScript. Trois philosophies différentes. Des benchmarks indépendants à travers le throughput HTTP, les cold starts et la performance asynchrone racontent une histoire plus claire que le marketing ne pourrait jamais le faire. Voici l'analyse brutale et honnête pour les développeurs qui choisissent leur prochaine plateforme JS côté serveur.

Commentaires

Connexion Connectez-vous pour participer à la conversation.

Pas encore de commentaires. Soyez le premier à partager vos pensées.