Retour au blog
Ingénierie Rust & Architecture · 9 min de lecture

Cold start WebAssembly : ce que les benchmarks disent vraiment (et ce qu’on ne peut pas encore affirmer)

Affane Daylami · Fondateur· 24 août 2026

Aucun runtime WebAssembly ne publie aujourd’hui un chiffre de cold start mesuré selon un protocole partagé, disclosé et reproductible par un tiers. Wasmtime, Wasmer et WasmEdge affichent chacun des arguments de démarrage rapide, mais rarement la même définition du mot « démarrage ». Cet article ne rajoute pas un chiffre de plus à la pile : il explique ce qu’un cold start mesure vraiment, pourquoi les chiffres publiés ne se comparent pas, et où en est réellement Aurabase, qui fait tourner wasmtime en production sans avoir encore publié de benchmark propre.

C’est la suite logique de notre méthodologie de benchmark, appliquée cette fois à une métrique spécifique. Pour le détail de l’architecture de nos fonctions Edge, voir notre article pilier sur l’architecture Rust d’Aurabase, ou notre comparatif Wasmtime vs Wasmer pour les différences d’architecture entre les deux runtimes.

L’essentiel

Un cold start WebAssembly additionne plusieurs phases (chargement, validation, compilation ou liaison, instanciation, premier appel) et deux chiffres qui n’incluent pas les mêmes phases ne sont pas comparables, même s’ils affichent la même unité. Wasmer commercialise Instaboot comme réponse marketing directe au sujet, mais ses chiffres publics ne sont pas repris ici sans méthodologie disclosée. Aurabase fait tourner wasmtime version 43 en dépendance de production pour ses fonctions Edge (vérifié dans aura-functions/Cargo.toml), mais n’a publié aucun benchmark de cold start reproductible à ce jour. Aucun chiffre Aurabase n’est avancé dans cet article : c’est la méthode qui est le sujet.

#
Constat

Pourquoi le cold start WebAssembly est redevenu un argument marketing disputé

Le cold start est redevenu un axe de différenciation commerciale entre runtimes WebAssembly, pas seulement un sujet de recherche académique. Wasmer en fait un argument de vente explicite avec une fonctionnalité nommée Instaboot, présentée comme une réponse directe au problème du démarrage à froid.

Ce réflexe rappelle exactement la dynamique déjà documentée dans notre article sur la méthodologie de benchmark backend : plusieurs fournisseurs concurrents affichent des chiffres de performance sur leur propre page produit, sans toujours préciser le protocole qui les a produits. Un chiffre de cold start sans méthode ne prouve rien de plus qu’un chiffre de latence sans méthode.

Le même piège que pour n’importe quel autre benchmark
Un chiffre de cold start publié sur une page marketing, sans matériel, sans charge de travail et sans définition claire du point de départ et du point d’arrivée de la mesure, ne se distingue pas d’un slogan. Ça vaut pour tous les runtimes cités dans cet article, Aurabase inclus le jour où un chiffre sera publié.
#
Définition

Ce qu’un cold start mesure réellement, et pourquoi la définition change tout

Un cold start n’est pas une seule opération : c’est une somme de phases distinctes, et deux fournisseurs ne mesurent pas forcément les mêmes phases sous le même nom.

ChargementRécupération du module .wasm : réseau, disque, ou déjà présent en mémoire
ValidationVérification de la structure du bytecode WebAssembly avant toute exécution
Compilation ou liaisonJIT à la volée (Cranelift, LLVM) ou liaison d’un artefact déjà précompilé (AOT)
InstanciationAllocation de la mémoire linéaire, des tables et des globales, exécution d’une fonction start éventuelle
Premier appelTraitement de la requête elle-même, parfois inclus dans le chiffre annoncé, parfois exclu

Un chiffre qui ne compte que l’instanciation d’un module déjà chargé et déjà compilé en mémoire aura mécaniquement l’air meilleur qu’un chiffre qui inclut le chargement réseau et la compilation. Aucun des deux n’est faux en soi : le problème apparaît quand on les compare sans préciser lequel des deux a été mesuré.

#
Recherche académique

Ce que montre la littérature académique, et pourquoi ses chiffres ne se comparent pas entre eux

Des travaux académiques publiés en preprint sur arXiv ces dernières années ont mesuré le temps d’instanciation de modules WebAssembly sur différents runtimes. Le point commun entre ces travaux n’est pas un chiffre convergent : c’est un écart important selon le runtime testé, la taille du module et le matériel utilisé.

Nous ne reprenons volontairement aucun chiffre précis tiré de ces publications dans cet article. Sans avoir revérifié en détail la méthodologie de chaque papier au moment de l’écriture, republier un nombre isolé reproduirait exactement le problème que cet article documente : un chiffre sans le contexte qui permettrait de savoir ce qu’il mesure vraiment.

Ce que cette variance apprend, en revanche, est directement utile : un cold start dépend fortement du contexte de mesure, exactement comme le rappelle la discipline de parité d’environnement décrite dans notre article de méthodologie générale (matériel identique, même région, même état de cache pour tous les systèmes comparés).

#
Paysage runtime

Wasmtime, Wasmer, WasmEdge : des priorités de compilation différentes

Les trois runtimes WebAssembly autonomes les plus cités dans ce débat n’arbitrent pas de la même façon entre vitesse de compilation et performance d’exécution, ce qui explique en partie pourquoi leurs chiffres de cold start ne se comparent pas terme à terme.

WasmtimeBackend de compilation Cranelift, avec historiquement une voie de précompilation possible en amont du déploiementUtilisé en production par Aurabase pour les fonctions Edge
WasmerA longtemps documenté plusieurs backends interchangeables, dont un backend pensé pour la vitesse de compilation plutôt que la performance d’exécutionCommercialise Instaboot, un redémarrage par snapshot d’instance déjà initialisée
WasmEdgePositionnement public centré sur un démarrage rapide, avec son propre argumentaire concurrentielRuntime alternatif également actif sur ce terrain marketing
Ce tableau sert à illustrer l’incomparabilité, pas à classer les runtimes
Ces architectures sont documentées publiquement par les projets eux-mêmes. Nous ne les avons pas re-vérifiées version par version pour cet article, et elles ne constituent pas un classement de performance. Elles expliquent seulement pourquoi trois chiffres de cold start affichés par trois runtimes différents peuvent être tous exacts et néanmoins non comparables entre eux.

Pour le détail architectural complet entre les deux runtimes les plus souvent opposés dans les discussions serverless, voir notre comparatif dédié Wasmtime vs Wasmer.

#
Requalification

Ce qu’Instaboot montre, et ce que sa page produit ne prouve pas à elle seule

D’après le positionnement produit que Wasmer communique publiquement, Instaboot restaure une instance déjà initialisée par un mécanisme de snapshot, plutôt que de relancer un démarrage complet à chaque requête. C’est un choix d’architecture réel et cohérent avec le problème qu’il cible.

Ce que cet article ne fait pas, en revanche, c’est reprendre un chiffre de performance affiché sur la page produit Wasmer. Sans savoir quel matériel, quelle charge de travail et quel protocole de mesure ont produit ce chiffre, le republier commettrait exactement l’erreur documentée plus haut : traiter un chiffre marketing comme un résultat de benchmark indépendant.

Le précédent qui justifie cette prudence
Un chiffre comme « cold start inférieur à 1 ms » a déjà circulé publiquement, y compris dans du contenu Aurabase antérieur, sans être adossé à un benchmark reproductible. Il est aujourd’hui traité en interne comme non étayé. La même règle s’applique à tout chiffre affiché par un runtime concurrent, Instaboot inclus, tant qu’aucune méthodologie disclosée ne l’accompagne.
#
Vérifié dans le code

Ce qu’Aurabase peut affirmer aujourd’hui sur son propre cold start, et ce qu’il ne peut pas

Aurabase fait tourner ses fonctions Edge sur Wasmtime en production, pas en projet pilote. Voici exactement ce que le dépôt permet d’affirmer, et où s’arrête cette affirmation.

3
RUNTIMES WASM CITÉS
Wasmtime, Wasmer, WasmEdge
0
BENCHMARK COLD START AURABASE PUBLIÉ
Aucune mesure reproductible et datée à ce jour
43
VERSION WASMTIME EN PRODUCTION
aura-functions/Cargo.toml, dépendance de prod

La dépendance est déclarée en dur, avec les features async et cranelift activées, dans les dépendances de production du service, pas dans une dev-dependency ni un commentaire :

services/aura-functions/Cargo.toml
TOML
# Extrait réel du dépôt
[dependencies]
# WASM Runtime
wasmtime = { version = "43", features = ["async", "cranelift"] }

Ce que ce fichier ne dit pas : aucun chiffre de cold start mesuré selon le protocole décrit dans notre méthodologie de benchmark n’existe aujourd’hui dans le dépôt pour ce runtime. Tant qu’une mesure datée, avec percentiles, matériel et charge de travail disclosés, n’a pas été publiée, aucun chiffre Aurabase ne doit être cité comme une caractéristique mesurée du produit. Pour l’architecture générale de la plateforme, voir notre article pilier architecture Rust d’Aurabase. Pour une comparaison concrète entre cold start WASM et cold start conteneur, indépendante de la question méthodologique traitée ici, voir notre article dédié WASM vs conteneurs.

#
Grille de lecture

Comment lire un chiffre de cold start avant de le croire

Sept questions à poser à n’importe quel chiffre de cold start, y compris le nôtre le jour où nous en publierons un.

  1. Quelles phases sont incluses ? Chargement réseau, validation, compilation, instanciation, premier appel : un chiffre qui n’en compte qu’une partie n’est pas comparable à un chiffre qui les compte toutes.
  2. Le module était-il vraiment « froid » ? Un module déjà en cache mémoire ou disque ne teste pas la même chose qu’un module chargé pour la première fois.
  3. Compilation JIT ou artefact précompilé (AOT) ? Les deux stratégies ont des coûts de démarrage structurellement différents.
  4. Chiffre unique ou distribution ? Un meilleur run sur dix n’a pas la même valeur qu’un p95 sur mille exécutions.
  5. Matériel et région précisés ? Un chiffre sans spécification matérielle ne peut pas être reproduit par un tiers.
  6. Comparaison à charge et topologie égales ? Comparer un runtime auto-hébergé à un service managé sans le signaler fausse la lecture.
  7. Date et version du runtime testé ? Un chiffre non daté sur un projet qui évolue vite ne veut plus rien dire au bout de quelques mois.
#
Questions Fréquentes

FAQ

Qu’est-ce que le cold start WebAssembly, exactement ?+
C’est le temps qui sépare l’arrivée d’une requête pour une fonction pas encore active et sa première réponse effective. Ce temps additionne plusieurs phases distinctes : chargement du module, validation du bytecode, compilation ou liaison, instanciation (mémoire linéaire, tables, globales), puis traitement de la requête. Deux chiffres de cold start ne mesurent pas forcément les mêmes phases.
Le chiffre « cold start WebAssembly inférieur à 1 ms » est-il vrai ?+
Ce chiffre a circulé publiquement, y compris dans du contenu Aurabase antérieur, sans être adossé à un benchmark reproductible avec matériel, charge de travail et méthode disclosés. Il est aujourd’hui traité en interne comme non étayé. La même prudence s’applique à tout chiffre de cold start affiché par un runtime concurrent sans méthodologie publiée.
Qu’est-ce qu’Instaboot, la fonctionnalité de Wasmer ?+
D’après le positionnement produit que Wasmer communique publiquement, Instaboot restaure une instance déjà initialisée par snapshot plutôt que de relancer un démarrage complet à chaque requête. Cet article ne reprend aucun chiffre de performance affiché sur la page produit Wasmer : sans méthodologie et matériel disclosés, republier ce chiffre reproduirait le problème qu’il documente.
Aurabase a-t-il publié un chiffre de cold start pour ses fonctions Edge ?+
Non. Aurabase fait tourner Wasmtime version 43 (features async et cranelift) en dépendance de production dans aura-functions, un fait vérifié directement dans le Cargo.toml du service. Mais aucun benchmark de cold start suivant un protocole reproductible et daté n’existe aujourd’hui dans le dépôt pour ce runtime.
Le WebAssembly démarre-t-il plus vite qu’un conteneur ?+
Architecturalement, un module WebAssembly a une surface de démarrage plus petite qu’un conteneur (pas de noyau invité, pas de système de fichiers complet à monter), ce qui rend un cold start rapide plausible. Mais l’écart réel dépend fortement du scénario testé. Notre article dédié à la comparaison WASM vs conteneurs creuse ce point avec des cas concrets.

Sources externes citées : documentation produit publique Wasmer (Instaboot), documentation publique du projet Wasmtime (Bytecode Alliance), consultées en préparation de cet article, sans revérification indépendante des chiffres de performance qu’elles affichent.

MÉTHODOLOGIE OUVERTE

Testez vos propres fonctions Edge sur Aurabase.

Créez un projet gratuit et déployez une fonction WASM sur Wasmtime. Le protocole de mesure décrit dans notre méthodologie s’applique à votre propre charge, pas seulement à la nôtre.

Créer un projet gratuit Lire notre méthodologie de benchmark
Aucune carte bancaire requise · 500 MB gratuits · 50 000 MAU