首页 > 其他分享 >什么是 Web Worker 以及如何在 NextJS 中使用它

什么是 Web Worker 以及如何在 NextJS 中使用它

时间:2024-09-21 17:25:01浏览次数:11  
标签:Web gt const web Worker worker NextJS 创建 线程

先决条件reactjs/nextjs 基础知识 什么是网络工作者javascript 是一种单线程语言,它使用的线程称为主线程浏览器实际上使用其他线程来自浏览器 api 的 web worker 是您使用 javascript 创建和注册附加线程的一种方式 当您只能在主线程上工作时,为什么还要创建其他线程呢?假设您需要计算大量数据来绘制图表。这些计算可能需要足够长的时间才能使页面无响应这就是网络工作者的用武之地。您可以创建新线程来计算这些数据,完成后,web worker 可以将结果发送回主线程 如何在 nextjs 中使用 web worker在此示例中,我将使用 web worker 获取狗图片 api 并将结果发送回主线程以显示这些图像照常初始化 nextjs 项目通过在文件顶部添加“use client”使 page.tsx 成为客户端组件,因为我们希望在此示例中使用 react hooks使用通常的值状态和 onchange 处理程序创建输入创建一个带有 onclick 事件的按钮,我们将使用此按钮来告诉 web worker 获取 api创建一个 ref 来保存 web worker 实例创建一个 effect 来初始化 web worker 并附加一个事件来处理 web worker 发回的数据,并在页面卸载后终止线程/web worker创建一个状态来保存从 web worker 接收到的图像 url。page.tsx 看起来像这样"use client";import { changeevent, mouseevent, usecallback, useeffect, useref, usestate } from "react";export default function home() {? ? const [userinput, setuserinput] = usestate<string>("");? ? const workerref = useref<worker>();? ? const [dogpics, setdogpics] = usestate<string>();? ? useeffect(() =&gt; {? ? ? ? workerref.current = new worker(new url("./worker.ts", import.meta.url));? ? ? ? workerref.current.onmessage = (event: messageevent<string>) =&gt; setdogpics(event.data);? ? ? ? return () =&gt; {? ? ? ? ? ? workerref.current?.terminate();? ? ? ? };? ? }, []);? ? const handleuserinputchange = usecallback(? ? ? ? (e: changeevent<htmlinputelement>) =&gt; {? ? ? ? ? ? setuserinput(e.target.value);? ? ? ? },? ? ? ? [setuserinput]? ? );? ? const handlefetch = usecallback(? ? ? ? (e: mouseevent<htmlbuttonelement>) =&gt; {? ? ? ? ? ? userinput &amp;&amp; workerref.current?.postmessage(userinput);? ? ? ? },? ? ? ? [userinput]? ? );? ? return (? ? ? ? <div>? ? ? ? ? ? <input placeholder="number of dogs" value="{userinput}" onchange="{handleuserinputchange}" classname="mr-4 text-black">? ? ? ? ? ? <button classname="bg-green-500 text-black rounded" onclick="{handlefetch}">? ? ? ? ? ? ? ? fetch? ? ? ? ? ? </button>? ? ? ? ? ? {dogpics &amp;&amp; dogpics.map((pic) =&gt; @@##@@)}? ? ? ? </div>? ? );}</htmlbuttonelement></htmlinputelement></string></string></worker></string>登录后复制在与 page.tsx 相同的文件夹中创建一个名为worker.ts的文件self.onmessage = async (e: MessageEvent<string>) =&gt; {? ? const url = `https://dog.ceo/api/breeds/image/random/${e.data}`;? ? const response = await fetch(url).then((res) =&gt; res.json());? ? self.postMessage(response.message);};</string>登录后复制现在运行您的应用程序并检查结果! 以上就是什么是 Web Worker 以及如何在 NextJS 中使用它的详细内容,更多请关注我的其它相关文章!

标签:Web,gt,const,web,Worker,worker,NextJS,创建,线程
From: https://www.cnblogs.com/aow054/p/18424266

相关文章

  • 什么是 Cloudflare? Web 性能和安全公司概述
    在快节奏的数字世界中,网站的速度、安全性和可靠性对于企业和用户都至关重要。Cloudflare已成为确保网站平稳、安全和高效运行的基石。但Cloudflare到底是什么?为什么它成为网站所有者如此重要的工具?让我们深入了解它的作用和产品。Cloudflare简介Cloudflare是一家全球......
  • 了解如何在 <lines (Modulojs) 中创建 API 支持的 Zelda BOTW 怪物画廊 Web 组件
    模数教程回来了!大家好!暑假结束后,我带着modulo教程回来了。我正在制作更多教程-请继续关注。也就是说,如果您对我的下一个主题有任何特别的想法,请务必在评论中告诉我!我的上一篇教程是关于api驱动的pokémondanceparty组件的超级快速且有趣的“仅html,无js”教程,不到30......
  • 了解现代 Web 开发中的 chunkjs:代码分割和性能优化指南
    在Web开发中,尤其是使用React、Vue或Angular等现代JavaScript框架时,chunk.js指的是在应用程序的构建过程中创建的JavaScript捆绑文件。当捆绑或编译Web应用程序时,Webpack或Vite等构建工具会将JavaScript代码分割成称为“块”的较小文件。这些块通常是为了性能优......
  • 为什么 Streams API 改变了 Web 开发者的游戏规则
    我们首先解释一下数据是如何通过网络发送的。它不是作为单个连续流发送的;相反,它被分成更小的块。在接收端,消费者或应用程序负责在收到所有数据后以正确的顺序和格式重新组装这些块。对于图像、视频和其他相对较大的数据类型,此过程会自动发生。因此streamsapi提供的是一种无需等......
  • 为什么同步引擎可能是 Web 应用程序的未来
    在不断发展的web应用程序世界中,效率、可扩展性和无缝实时体验至关重要。传统的web架构严重依赖于客户端-服务器模型,这些模型可能难以满足现代对响应能力和同步的需求。这就是同步引擎发挥作用的地方,它为开发人员当今面临的许多挑战提供了一个有前景的解决方案。但同步引擎到底......
  • 书评:Eloquent JavaScript – Web 开发人员的基本指南
    作为最广泛使用的编程语言之一,JavaScript为网络提供了动力。然而,由于其快速发展,跟上JavaScript趋势可能具有挑战性。许多关于这个主题的书籍很快就会过时,但有一本书经受住了时间的考验:EloquentJavaScript。这本书已成为开发人员的最爱,并且正在稳步发展为那些希望加深对语言理......
  • 了解 CORS 在 Web 浏览器中的工作原理
    跨源资源共享(cors)是web浏览器中的一项重要安全功能,它控制web应用程序如何从与提供初始网页的域不同的域请求资源(例如数据、图像或脚本)。它的主要目的是保护用户免受试图访问其他网站上敏感信息的恶意网站的侵害。本博客将解释cors的工作原理以及为什么它对于web开发......
  • Webpack 系列第 3 部分
    请查找该系列的旧部分以充分理解这个概念。webpack5系列第1部分webpack5系列第2部分webpack5系列第4部分在线电子商店申请让我们使用微前端来构建一个在线商店应用程序以实现模块化。每个微前端将代表商店的不同部分,它们将共享公共库,例如react、设计系统和共享......
  • Web Development Job in 4
    简介网络开发领域持续快速发展,为拥有适当技能和知识的个人提供了令人兴奋的机会。如果您想进入这个充满活力的行业或提升自己的职业生涯,这里有一些重要策略可以帮助您在2024年找到梦想的工作:1.掌握基本技能编程语言:熟练掌握JavaScript、Python、Ruby或PHP等语言至关......
  • 使用 Nginx 搭建 Webdav 服务
    使用Nginx搭建Webdav服务一、自签名根证书1.生成根证书密钥opensslgenrsa-out./root.key20482.生成根证书opensslreq-x509-new-key./root.key-out./root.pem-days365交互信息CountryName(2lettercode)[]:CNStateorProvinceName(fullname)......