JavaScript é uma linguagem de thread único, o thread que ela usa é referido como thread principal
Na verdade, o Brower usa outros tópicos
O Web Worker da API do navegador é uma forma de criar e registrar threads adicionais com JavaScript
Digamos que você precisa calcular muitos dados para desenhar um gráfico.
Esses cálculos podem demorar o suficiente para fazer com que a página pare de responder
É aí que entra o web trabalhador.
Você pode criar um novo thread para calcular esses dados e, quando terminar, o web trabalhador pode enviar de volta o resultado para o thread principal
Neste exemplo, usarei o Web Worker para buscar a API de imagens de cachorro e enviar de volta o resultado ao thread principal para exibir essas imagens
"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); };
Agora execute seu aplicativo e verifique o resultado!
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3