React Academy · Lektion

Indlæsning af WASM-moduler i React

Importér og instantiér dynamisk et WASM-modul i useEffect, og eksponér dets funktioner for React-komponenter.

Lektion 2 af 413 trin

Indlæsning af WASM-moduler i React er en gratis React Academy-lektion på CoddyKit. Dette er lektion 2 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.

Standard-API'et til indlæsning af WASM

Den browserstandardiserede måde at indlæse et WASM-modul på er WebAssembly.instantiateStreaming(fetch(url), importObject). Det streamer WASM-binærfilen, mens den downloades, starter kompileringen med det samme og returnerer et objekt, der indeholder modulet og instansen. Det er den mest effektive indlæsningsmetode til produktionsbrug.

Dynamisk import med WASM-filer

Bundlere som Vite og webpack understøtter import af WASM-filer som ES-moduler med syntaks til dynamisk import: import('./module.wasm'). Bundleren håndterer indlæsningsmekanikken. Denne tilgang integreres naturligt med kodedeling — WASM-modulet indlæses først, når koden, der importerer det, bliver kørt.

useEffect til asynkron WASM-indlæsning

Indlæsning af et WASM-modul er en asynkron handling, der hører hjemme i en useEffect-hook. Hent og instantiér modulet inde i effekten, gem de eksporterede funktioner i tilstanden eller en ref, og opdatér komponenten, når initialiseringen er fuldført. Det tomme afhængighedsarray sikrer, at modulet kun indlæses én gang pr. montering af komponenten.

Lagring af WASM-instansen

Gem WASM-instansen i en useRef for at undgå nye gengivelser under initialiseringen, eller i en variabel på modulniveau, hvis instansen er en singleton, der deles på tværs af applikationen. Det fungerer også at gemme den i useState, men det medfører en ekstra gengivelse, når instansen bliver tilgængelig — det er acceptabelt i simple tilfælde.

React.lazy og Suspense til WASM

For komponenter, der kræver et WASM-modul for at fungere, skal du pakke komponenten ind i React.lazy og gengive den inde i en Suspense-grænse. WASM-modulet kan indlæses som en del af den dynamiske import. Suspense viser et reserveskelet, mens modulet initialiseres, hvilket giver en enkel indlæsningsoplevelse.

Forventet indlæsningstid

WASM-moduler tager 100-500 ms at indlæse og instantiere på en typisk forbindelse, afhængigt af modulets størrelse og enhedens hastighed. Vis altid en indlæsningsindikator (skelet, spinner eller fremdriftsbjælke), mens initialiseringen er i gang. Hvis brugergrænsefladen blokeres under WASM-initialiseringen uden visuel feedback, opleves det som en fastfrysning.

Adgang til WASM-eksporter

Efter instansiering er WASM-funktioner tilgængelige via instance.exports.myFunction(). Når du bruger wasm-bindgen (Rust-værktøjskæden), eksporterer det genererede JavaScript-modul med forbindelseskode funktionerne direkte med korrekt typekonvertering. Du kalder dem som almindelige JavaScript-funktioner med de typer, der er defineret i Rust-kilden.

Kald af WASM fra hændelseshåndterere

Kald WASM-funktioner fra React-hændelseshåndterere på samme måde som ethvert synkront funktionskald: function handleClick() { const result = wasmInstance.current.processImage(imageData); setResult(result); }. WASM-funktionskald er synkrone — de blokerer den kaldende tråd, indtil beregningen er fuldført, hvilket er endnu en grund til at køre dem i en Worker ved lange operationer.

Fejlgrænser til WASM-fejl

WASM-initialisering kan mislykkes: Hentningen kan mislykkes, modulet kan være inkompatibelt, eller browseren understøtter måske ikke en nødvendig funktion. Pak WASM-afhængige komponenter ind i en React-fejlgrænse for at opfange initialiseringsfejl og vise en reservevisning. Log fejlen til fejlfinding, og sørg om muligt for en vej til kontrolleret degradering.

Konfiguration af Vite-udvidelsesmoduler

Vite kræver to udvidelsesmoduler for at håndtere WASM-moduler korrekt: vite-plugin-wasm håndterer import af WASM-filer, og vite-plugin-top-level-await aktiverer await på øverste niveau, som bruges af noget WASM-forbindelseskode. Installér begge, og føj dem til plugins-arrayet i vite.config.ts.

webpack-konfiguration til WASM

I webpack-projekter skal du aktivere eksperimentet asyncWebAssembly i webpack.config.js: experiments: { asyncWebAssembly: true }. Det gør det muligt at bruge import() til WASM-filer, mens browseren indlæser modulet asynkront. Create React App-projekter kræver, at du ejecter eller bruger CRACO for at tilføje denne konfiguration.

WebAssembly.instantiateStreaming

Hvad er fordelen ved WebAssembly.instantiateStreaming() frem for WebAssembly.instantiate()?

Opsummering af lektionen

Indlæs WASM med WebAssembly.instantiateStreaming(fetch(url)) eller dynamisk import i useEffect. Gem instansen i useRef eller som en singleton på modulniveau. Vis indlæsningstilstanden under initialiseringen på 100-500 ms. Få adgang til eksporter via instance.exports.fn(). Brug fejlgrænser ved initialiseringsfejl. Konfigurér Vite med vite-plugin-wasm og vite-plugin-top-level-await.

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 “Indlæsning af WASM-moduler i React” gratis?

Ja — hele teksten til “Indlæsning af WASM-moduler i 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 “Indlæsning af WASM-moduler i React”?

Importér og instantiér dynamisk et WASM-modul i useEffect, og eksponér dets funktioner for React-komponenter. 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 2 af 4.

Hvor lang tid tager lektionen “Indlæsning af WASM-moduler i 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