JavaScript はシングルスレッド言語であり、使用するスレッドはメイン スレッドと呼ばれます
ブラウザは実際には他のスレッドを使用しています
ブラウザ API からの Web ワーカーは、JavaScript を使用して追加のスレッドを作成および登録する方法です
グラフを描画するには大量のデータを計算する必要があるとしましょう。
これらの計算には、ページが応答しなくなるほど時間がかかる可能性があります
そこでウェブワーカーの出番です。
これらのデータを計算する新しいスレッドを作成でき、それが完了すると、Web ワーカーは結果をメイン スレッドに送り返すことができます
このサンプルでは、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