جافا سكريبت هي لغة ذات خيط واحد، ويشار إلى الخيط الذي تستخدمه على أنه الخيط الرئيسي
المتصفح في الواقع يستخدم مواضيع أخرى
يعد عامل الويب من واجهة برمجة التطبيقات للمتصفح طريقة يمكنك من خلالها إنشاء وتسجيل سلاسل رسائل إضافية باستخدام JavaScript
لنفترض أنك بحاجة إلى حساب الكثير من البيانات لرسم مخطط.
قد تستغرق هذه العمليات الحسابية وقتًا كافيًا لجعل الصفحة غير مستجيبة
وهنا يأتي دور عامل الويب.
يمكنك إنشاء موضوع جديد لحساب تلك البيانات وعند الانتهاء، يمكن لعامل الويب إرسال النتيجة مرة أخرى إلى الموضوع الرئيسي
في هذه العينة، سأستخدم Web Worker لجلب واجهة برمجة تطبيقات صور الكلاب وإرسال النتيجة مرة أخرى إلى سلسلة الرسائل الرئيسية لعرض تلك الصور
"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