자바스크립트는 단일 스레드 언어이며, 이 언어가 사용하는 스레드를 메인 스레드라고 합니다.
실제로 브라우저는 다른 스레드를 사용합니다
브라우저 API의 웹 작업자는 JavaScript로 추가 스레드를 생성하고 등록할 수 있는 방법입니다
차트를 그리려면 많은 양의 데이터를 계산해야 한다고 가정해 보겠습니다.
이러한 계산은 페이지가 응답하지 않을 정도로 오래 걸릴 수 있습니다
이것이 바로 웹 워커가 필요한 곳입니다.
해당 데이터를 계산하기 위해 새 스레드를 생성할 수 있으며 완료되면 웹 작업자가 결과를 기본 스레드로 다시 보낼 수 있습니다
이 샘플에서는 Web Worker를 사용하여 개 사진 API를 가져오고 결과를 기본 스레드로 다시 보내 해당 이미지를 표시하겠습니다.
"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); };
이제 앱을 실행하고 결과를 확인해보세요!
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3