Introduction à WebAssembly et Kotlin
Le développement web moderne exige de plus en plus de performances, en particulier pour les calculs complexes, le traitement d'images, les jeux et les applications scientifiques. WebAssembly (Wasm) est un format binaire bas niveau qui s'exécute dans le navigateur à une vitesse proche du natif. Et Kotlin, grâce à sa flexibilité et sa prise en charge de multiples plateformes, devient un excellent candidat pour la compilation en Wasm.
Dans cet article, nous allons détailler comment configurer un projet Kotlin pour la compilation en WebAssembly, écrire des exemples pratiques et examiner les meilleures pratiques d'optimisation.
1. Configuration de l'environnement pour Kotlin/Native et WebAssembly
Pour travailler avec WebAssembly en Kotlin, on utilise Kotlin/Native — une technologie qui permet de compiler du code Kotlin en fichiers binaires natifs, y compris Wasm. Voyons la configuration étape par étape.
Installation des outils nécessaires
- IntelliJ IDEA (version Community ou Ultimate) — l'environnement de développement principal.
- Gradle (intégré dans IDEA) — le système de build.
- Emscripten SDK — un outil pour travailler avec Wasm (nécessaire pour certains scénarios avancés).
Création du projet
Créez un nouveau projet Gradle et ajoutez la configuration suivante dans build.gradle.kts :
plugins { kotlin("multiplatform") version "1.9.22" kotlin("plugin.serialization") version "1.9.22"}
kotlin { wasm { binaries.executable() browser { commonWebpackConfig { cssSupport.enabled = true } } }}
dependencies { commonMainImplementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.2")}Notez : pour Kotlin 1.9+, la cible wasm est utilisée (auparavant c'était wasm32). Assurez-vous que la version de Kotlin est à jour.
Structure du projet
Après la configuration, créez le fichier src/wasmMain/kotlin/Main.kt — ce sera le point d'entrée de votre application Wasm.
2. Écrire une première application Kotlin pour WebAssembly
Écrivons une application simple qui calcule la factorielle d'un nombre et interagit avec JavaScript.
Code Kotlin
// src/wasmMain/kotlin/Main.ktimport kotlinx.browser.documentimport kotlinx.browser.window
fun factorial(n: Int): Long { var result = 1L for (i in 1..n) { result *= i } return result}
fun main() { window.onload = { val output = document.getElementById("output") ?: return@onload val input = document.getElementById("number") ?: return@onload // Exemple d'appel val num = 10 output.textContent = "Factorielle $num = ${factorial(num)}" // Ajout d'un gestionnaire pour la saisie dynamique input.addEventListener("input", { val value = (input as? org.w3c.dom.HTMLInputElement)?.value?.toIntOrNull() ?: 0 output.textContent = "Factorielle $value = ${factorial(value)}" }) }}Template HTML pour l'exécution
Créez le fichier src/wasmMain/resources/index.html :
<!DOCTYPE html><html><head> <meta charset="UTF-8"> <title>Kotlin Wasm Demo</title></head><body> <h1>Calculatrice de factorielle en Kotlin/Wasm</h1> <input type="number" id="number" value="10"> <p id="output">Chargement...</p> <script src="https://unpkg.com/kotlin-wasm-bridge@latest/dist/kotlin-wasm-bridge.js"></script> <script src="main.js"></script></body></html>3. Interaction entre Kotlin et JavaScript via WebAssembly
L'un des aspects clés de