「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Web ワーカーとは何か、そして NextJS でそれを使用する方法

Web ワーカーとは何か、そして NextJS でそれを使用する方法

2024 年 11 月 2 日に公開
ブラウズ:454

What is Web worker and how to use it in NextJS

前提条件

  • ReactJS/NextJSの基礎知識

Webワーカーとは

JavaScript はシングルスレッド言語であり、使用するスレッドはメイン スレッドと呼ばれます
ブラウザは実際には他のスレッドを使用しています
ブラウザ API からの Web ワーカーは、JavaScript を使用して追加のスレッドを作成および登録する方法です


メインスレッドだけで作業できるのに、なぜ他のスレッドを作成するのでしょうか?

グラフを描画するには大量のデータを計算する必要があるとしましょう。
これらの計算には、ページが応答しなくなるほど時間がかかる可能性があります
そこでウェブワーカーの出番です。
これらのデータを計算する新しいスレッドを作成でき、それが完了すると、Web ワーカーは結果をメイン スレッドに送り返すことができます


NextJSでWebワーカーを使用する方法

このサンプルでは、​​Web Worker を使用して犬の写真 API を取得し、結果をメインスレッドに送り返してそれらの画像を表示します

  • 通常どおり NextJS プロジェクトを初期化します
  • このサンプルではここで反応フックを使用したいため、ファイルの先頭に「use client」を追加して page.tsx をクライアント コンポーネントにします
  • 通常の値の状態と onChange ハンドラーを使用して入力を作成します
  • onClick イベントを持つボタンを作成します。このボタンを使用して、Web ワーカーに API を取得するように指示します
  • Web ワーカー インスタンスを保持する Ref を作成します
  • Web ワーカーを初期化するエフェクトを作成し、Web ワーカーが送り返すデータを処理するイベントを添付し、ページのアンマウント後にスレッド/Web ワーカーを終了します
  • Web ワーカーから受信した画像 URL を保持する状態を作成します。
  • page.tsx は次のようになります
"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) => dog pic)}        
    ); }
  • page.tsxと同じフォルダーにworker.tsというファイルを作成します
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);
};

次にアプリを実行して結果を確認してください!

リリースステートメント この記事は次の場所に転載されています: https://dev.to/theteabagcoder/what-is-web-worker-and-how-to-use-it-in-nextjs-4ndm?1 侵害がある場合は、study_golang にご連絡ください。 @163.com 削除
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3