«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Что такое веб-воркер и как его использовать в NextJS

Что такое веб-воркер и как его использовать в NextJS

Опубликовано 2 ноября 2024 г.
Просматривать:802

What is Web worker and how to use it in NextJS

Предварительное условие

  • Базовые знания ReactJS/NextJS

Что такое веб-воркер

JavaScript — это однопоточный язык, используемый им поток называется основным потоком
Брауэр на самом деле использует другие темы
Веб-воркер из API браузера — это способ создавать и регистрировать дополнительные потоки с помощью JavaScript


Зачем создавать другие потоки, если можно просто работать с основным потоком?

Предположим, вам нужно вычислить много данных, чтобы построить диаграмму.
Эти вычисления могут занять достаточно много времени, и страница перестанет отвечать на запросы
Вот тут-то и приходит на помощь веб-работник.
Вы можете создать новый поток для вычисления этих данных, и когда это будет сделано, веб-работник сможет отправить результат обратно в основной поток


Как использовать Web Worker в NextJS

В этом примере я собираюсь использовать Web Worker для получения API изображений собак и отправки результата обратно в основной поток для отображения этих изображений

  • Запустите проект NextJS как обычно
  • Сделайте page.tsx клиентским компонентом, добавив «use client» поверх файла, потому что для этого примера мы хотим использовать перехватчики реакции
  • Создайте входные данные с обычным состоянием значения и обработчиком onChange
  • Создайте кнопку с событием onClick. Мы будем использовать эту кнопку, чтобы сообщить веб-работнику о необходимости получить API
  • Создайте ссылку для хранения экземпляра веб-воркера
  • Создайте эффект для инициализации веб-воркера и прикрепите событие для обработки данных, которые веб-воркер отправляет обратно, и завершите поток/веб-воркер после размонтирования страницы
  • Создайте состояние для хранения 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)}        
    ); }
  • Создайте файл с именем worker.ts в той же папке, что и page.tsx.
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