React Academy · Lektion

Fra Rust til WASM med wasm-pack og React

Kompilér Rust-kode til WebAssembly med wasm-pack, og brug de genererede JS-bindings i en React-app.

Lektion 3 af 413 trin

Fra Rust til WASM med wasm-pack og React er en gratis React Academy-lektion på CoddyKit. Dette er lektion 3 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i React Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. React Academy-kurset indeholder 4 lektioner i alt.

Rust-WASM-værktøjskæden

Den almindelige arbejdsgang fra Rust til WASM bruger to værktøjer: wasm-pack står for byggeprocessen (kompilerer Rust til WASM, kører wasm-bindgen og genererer npm-pakken), mens wasm-bindgen genererer JavaScript-bindinger, som gør Rust-funktioner kaldelige som almindelige JavaScript-funktioner med korrekt typehåndtering.

wasm-bindgen-attributten

Attributten #[wasm_bindgen] markerer Rust-funktioner, strukturer og metoder til eksport til JavaScript. Uden den bliver funktionen kompileret til WASM, men er ikke tilgængelig fra JavaScript. Når du markerer en funktion med #[wasm_bindgen], genererer wasm-bindgen JavaScript-forbindelseskode, som håndterer konvertering af argumenter og returværdier.

En simpel Rust-funktion

En minimal eksporteret Rust-funktion: use wasm_bindgen::prelude::*; #[wasm_bindgen] pub fn add(a: u32, b: u32) -> u32 { a + b }. Funktionen tager to usignerede 32-bit-heltal og returnerer ét. wasm-bindgen genererer JavaScript, der kalder funktionen med talargumenter og returnerer et talresultat.

Bygning med wasm-pack

Kør wasm-pack build --target web i Rust-pakkens mappe. Det kompilerer Rust-koden til WASM, kører wasm-bindgen for at generere JavaScript-bindinger og skriver en pkg/-mappe med den binære .wasm-fil, et JavaScript-modul med forbindelseskode og TypeScript-typedeklarationer.

Import i React

Importér det genererede modul i din React-komponent: import init, { add } from '../pkg/my_lib'. Funktionen init indlæser og instantiere WASM-binærfilen (kald den én gang i en useEffect). Efter initialiseringen kan du kalde de eksporterede funktioner direkte: const result = add(2, 3).

Overførsel af komplekse data: js_sys og JsValue

Til komplekse data ud over primitive tal tilbyder wasm-bindgen js_sys::Array (JavaScript Array), js_sys::Object (JavaScript Object) og wasm_bindgen::JsValue (enhver JavaScript-værdi). Disse typer gør det muligt for Rust-funktioner at acceptere og returnere JavaScript-arrays og -objekter, dog med større serialiseringsomkostninger end ved primitive værdier.

Minimering af marshalling-omkostninger

Det vigtigste performanceprincip er at holde data i WASM-hukommelsen og udføre alle beregninger dér. Overfør data én gang, udfør beregningen, og returnér kun det endelige resultat. Undgå mønstre, der gentagne gange overfører data på tværs af WASM-grænsen for hvert trin. Omkostningen ved hver grænsepassage er lille, men den hober sig op i tætte løkker.

serde-wasm-bindgen til strukturer

Craten serde-wasm-bindgen gør det muligt at serialisere Rust-strukturer til og fra JavaScript-objekter ved hjælp af Serde. Annotér strukturen med #[derive(Serialize, Deserialize)], og brug serde_wasm_bindgen::to_value() og from_value(). Dette er standardmetoden til at overføre komplekse strukturerede data.

Kørsel af WASM i en Web Worker

Langvarige WASM-beregninger blokerer den tråd, de kører på. Placér WASM i en Web Worker for at holde Reacts hovedtråd fri. Opret en Worker-fil, der initialiserer WASM-modulet og håndterer meddelelser. Send data til workeren via postMessage, modtag resultater via message-hændelsen, og opdatér derefter React-tilstanden med resultatet.

TypeScript-typer fra wasm-pack

wasm-pack genererer automatisk TypeScript-erklæringsfiler (.d.ts) for alle eksporterede funktioner og typer. Det giver dit React TypeScript-projekt fuld typesikkerhed, når det kalder Rust-funktioner. De genererede typer afspejler Rust-funktionssignaturerne — add(a: number, b: number): number — så IDE'ens autofuldførelse fungerer korrekt.

Produktionshensyn

WASM-binærfiler er typisk 100kb-2MB efter optimering. Aktivér wasm-opt i wasm-pack-buildet ved at angive opt-level = "z" i Cargo.toml's releaseprofil for aggressiv størrelsesoptimering. Servér WASM-filer med Content-Type: application/wasm, og aktivér HTTP/2, så browseren kan hente binærfilen effektivt som en strøm.

wasm-bindgen-attributten

Hvad er formålet med attributten #[wasm_bindgen] i Rust-kode?

Opsummering af lektionen

wasm-pack build --target web kompilerer Rust til WASM og genererer JavaScript-bindinger via wasm-bindgen. Annotér eksporterede funktioner med #[wasm_bindgen]. Importér init og de eksporterede funktioner i React, kald init() i en useEffect, og kald derefter funktionerne som almindelig JavaScript. Brug serde-wasm-bindgen til kompleks serialisering af strukturer. Kør WASM i Web Workers ved lange beregninger for at holde Reacts hovedtråd fri.

Gratis at komme i gang

Lær React med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
88
Lektioner
324

Ofte stillede spørgsmål

Er lektionen “Fra Rust til WASM med wasm-pack og React” gratis?

Ja — hele teksten til “Fra Rust til WASM med wasm-pack og React” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af React Academy-kurset, skal du opgradere til CoddyKit PRO. React Academy-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Fra Rust til WASM med wasm-pack og React”?

Kompilér Rust-kode til WebAssembly med wasm-pack, og brug de genererede JS-bindings i en React-app. Du øver dig i React Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på React Academy?

Der kræves ingen tidligere erfaring. React Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 3 af 4.

Hvor lang tid tager lektionen “Fra Rust til WASM med wasm-pack og React”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne React Academy-lektion?

Ja. Alle React Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Hvad er WebAssembly, og hvor passer React ind
  2. Indlæsning af WASM-moduler i React
  3. Fra Rust til WASM med wasm-pack og React
  4. WASM-anvendelser: billedbehandling og beregninger
← Tilbage til React Academy