Från Rust till WASM med wasm-pack och React
Kompilera Rust-kod till WebAssembly med wasm-pack och använd de genererade JS-bindningarna i en React-app.
Från Rust till WASM med wasm-pack och React är en gratis lektion i React Academy på CoddyKit. Detta är lektion 3 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för React Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i React Academy innehåller totalt 4 lektioner.
Rusts WASM-verktygskedja
Det standardiserade arbetsflödet från Rust till WASM använder två verktyg: wasm-pack samordnar bygget (kompilerar Rust till WASM, kör wasm-bindgen och genererar npm-paketet), medan wasm-bindgen genererar JavaScript-bindningar som gör Rust-funktioner anropbara som vanliga JavaScript-funktioner med korrekt typhantering.
Attributet wasm-bindgen
Attributet #[wasm_bindgen] markerar Rust-funktioner, strukturer och metoder för export till JavaScript. Utan attributet kompileras funktionen till WASM men är inte åtkomlig från JavaScript. När du annoterar en funktion med #[wasm_bindgen] genererar wasm-bindgen JavaScript-gluekoden som hanterar konvertering av argument och returvärden.
En enkel Rust-funktion
En minimal exporterad Rust-funktion: use wasm_bindgen::prelude::*; #[wasm_bindgen] pub fn add(a: u32, b: u32) -> u32 { a + b }. Funktionen tar två osignerade 32-bitarsheltal och returnerar ett. wasm-bindgen genererar JavaScript som anropar funktionen med numeriska argument och returnerar ett numeriskt resultat.
Bygga med wasm-pack
Kör wasm-pack build --target web i Rust-cratens katalog. Detta kompilerar Rust-koden till WASM, kör wasm-bindgen för att generera JavaScript-bindningar och skapar en katalog med namnet pkg/ som innehåller binärfilen .wasm, en JavaScript-gluemodul och typdefinitioner för TypeScript.
Importera i React
Importera den genererade modulen i din React-komponent: import init, { add } from '../pkg/my_lib'. Funktionen init läser in och instansierar WASM-binären; anropa den en gång i en useEffect. Efter initieringen anropar du de exporterade funktionerna direkt: const result = add(2, 3).
Skicka komplexa data: js_sys och JsValue
För komplexa data utöver primitiva tal tillhandahåller wasm-bindgen js_sys::Array (JavaScript Array), js_sys::Object (JavaScript Object) och wasm_bindgen::JsValue (vilket JavaScript-värde som helst). Dessa typer gör att Rust-funktioner kan ta emot och returnera JavaScript-arrayer och -objekt, men med större serialiseringskostnad än för primitiva värden.
Minimera marshalling-overhead
Den viktigaste prestandaprincipen är att hålla data i WASM-minnet och utföra all beräkning där. Skicka in data en gång, utför beräkningen och returnera endast det slutliga resultatet. Undvik mönster där data överförs över WASM-gränsen upprepade gånger för varje steg. Overheaden per gränsövergång är liten, men den ackumuleras i prestandakritiska loopar.
serde-wasm-bindgen för structs
Crate:et serde-wasm-bindgen gör det möjligt att serialisera Rust-structar till och från JavaScript-objekt med hjälp av Serde. Förse structen med #[derive(Serialize, Deserialize)] och använd serde_wasm_bindgen::to_value() och from_value(). Detta är standardmetoden för att överföra komplexa strukturerade data.
Köra WASM i en Web Worker
Långvariga WASM-beräkningar blockerar tråden de körs i. Placera WASM i en Web Worker för att hålla Reacts huvudtråd fri. Skapa en Worker-fil som initierar WASM-modulen och hanterar meddelanden. Skicka data till workern via postMessage, ta emot resultat via händelsen message och uppdatera sedan React-tillståndet med resultatet.
TypeScript-typer från wasm-pack
wasm-pack genererar automatiskt TypeScript-deklarationsfiler (.d.ts) för alla exporterade funktioner och typer. Det ger ert React TypeScript-projekt full typsäkerhet när ni anropar Rust-funktioner. De genererade typerna återspeglar Rust-funktionssignaturerna — add(a: number, b: number): number — så att IDE:ns autocomplettering fungerar korrekt.
Produktionsöverväganden
WASM-binärfiler är vanligtvis 100kb–2MB efter optimering. Aktivera wasm-opt i wasm-pack-bygget genom att ange opt-level = "z" i release-profilen i Cargo.toml för aggressiv storleksoptimering. Servera WASM-filer med Content-Type: application/wasm och aktivera HTTP/2 så att webbläsaren kan strömma binärfilen effektivt.
wasm-bindgen-attributet
Vad är syftet med attributet #[wasm_bindgen] i Rust-kod?
Lektionssammanfattning
wasm-pack build --target web kompilerar Rust till WASM och genererar JavaScript-bindningar via wasm-bindgen. Förse exporterade funktioner med #[wasm_bindgen]. Importera init och de exporterade funktionerna i React, anropa init() i en useEffect och anropa sedan funktionerna som vanlig JavaScript. Använd serde-wasm-bindgen för serialisering av komplexa structar. Kör WASM i Web Workers vid långvariga beräkningar för att hålla Reacts huvudtråd fri.
Lär dig React med en AI-lärare – gratis
Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.
- Kurser
- 88
- Lektioner
- 324
Vanliga frågor
Är lektionen ”Från Rust till WASM med wasm-pack och React” gratis?
Ja – hela texten till ”Från Rust till WASM med wasm-pack och React” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i React Academy, kan Ni uppgradera till CoddyKit PRO. Kursen i React Academy innehåller totalt 4 lektioner.
Vad lär jag mig i ”Från Rust till WASM med wasm-pack och React”?
Kompilera Rust-kod till WebAssembly med wasm-pack och använd de genererade JS-bindningarna i en React-app. Ni övar på React Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.
Behöver jag någon erfarenhet för att börja lära mig React Academy?
Du behöver inga förkunskaper. Utbildningen i React Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 3 av 4.
Hur lång tid tar lektionen ”Från Rust till WASM med wasm-pack och React”?
De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.
Kan jag skriva och köra kod i den här React Academy-lektionen?
Ja. Varje React Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.
Alla lektioner i den här kursen
- Vad är WebAssembly och vilken roll har React
- Ladda WASM-moduler i React
- Från Rust till WASM med wasm-pack och React
- Användningsområden för WASM: bildbehandling och beräkningar