JavaScript ist eine Single-Thread-Sprache, der verwendete Thread wird als Haupt-Thread bezeichnet
Brower nutzt tatsächlich andere Threads
Mit dem Web-Worker über die Browser-API können Sie zusätzliche Threads mit JavaScript erstellen und registrieren
Angenommen, Sie müssen viele Daten berechnen, um ein Diagramm zu zeichnen.
Diese Berechnungen könnten so lange dauern, bis die Seite nicht mehr reagiert
Hier kommt Web Worker ins Spiel.
Sie können einen neuen Thread erstellen, um diese Daten zu berechnen, und wenn dies erledigt ist, kann der Web-Worker das Ergebnis an den Haupt-Thread zurücksenden
In diesem Beispiel verwende ich Web Worker zum Abrufen von Hundebildern und sende das Ergebnis an den Hauptthread zurück, um diese Bilder anzuzeigen
"use client"; import { ChangeEvent, MouseEvent, useCallback, useEffect, useRef, useState } from "react"; export default function Home() { const [userInput, setUserInput] = useState(""); const workerRef = useRef (); const [dogPics, setDogPics] = useState (); useEffect(() => { workerRef.current = new Worker(new URL("./worker.ts", import.meta.url)); workerRef.current.onmessage = (event: MessageEvent ) => setDogPics(event.data); return () => { workerRef.current?.terminate(); }; }, []); const handleUserInputChange = useCallback( (e: ChangeEvent ) => { setUserInput(e.target.value); }, [setUserInput] ); const handleFetch = useCallback( (e: MouseEvent ) => { userInput && workerRef.current?.postMessage(userInput); }, [userInput] ); return ( {dogPics && dogPics.map((pic) =>); })}
self.onmessage = async (e: MessageEvent) => { const url = `https://dog.ceo/api/breeds/image/random/${e.data}`; const response = await fetch(url).then((res) => res.json()); self.postMessage(response.message); };
Führen Sie jetzt Ihre App aus und überprüfen Sie das Ergebnis!
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3