JavaScript es un lenguaje de subproceso único, el subproceso que utiliza se denomina subproceso principal
De hecho, el navegador utiliza otros hilos
El trabajador web desde la API del navegador es una forma de crear y registrar hilos adicionales con JavaScript
Digamos que necesitas calcular una gran cantidad de datos para dibujar un gráfico.
Esos cálculos podrían tardar lo suficiente como para que la página no responda
Ahí es donde entra en juego el trabajador web.
Puede crear un nuevo hilo para calcular esos datos y, cuando esté listo, el trabajador web puede enviar el resultado al hilo principal
En este ejemplo, usaré Web Worker para obtener la API de imágenes de perros y enviaré el resultado al hilo principal para mostrar esas imágenes
"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); };
¡Ahora ejecuta tu aplicación y comprueba el resultado!
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3