无需登录 数据私有 本地保存

Web Worker 质数搜索器 - 不阻塞界面计算

20
0
0
0
界面流畅度指示器 (观察小球与计数器)
实时计数: 00:00.000 界面冻结中
小球流畅移动中 — 主线程空闲
质数搜索器

体验 Web Worker 如何保持界面流畅 — 对比两种计算模式

大范围可能需要较多内存和计算时间
主线程计算进行中! 界面已冻结,动画停止、计时器停止响应。计算完成后将自动恢复。
Web Worker vs 主线程
Web Worker 模式
  • 在独立线程中运行,不阻塞主线程
  • 界面保持流畅,动画正常运行
  • 进度条实时更新
  • 可随时取消计算
  • 用户可继续操作页面
主线程模式
  • 计算占用主线程,界面完全冻结
  • CSS动画和JS计时器停止
  • 进度条无法更新(计算完才跳转)
  • 无法取消,必须等待完成
  • 浏览器可能提示"页面无响应"
常见问题
什么是 Web Worker?

Web Worker 是浏览器提供的多线程机制,允许 JavaScript 在后台线程中运行,不会阻塞用户界面。Worker 线程与主线程通过消息传递(postMessage)进行通信,适合处理计算密集型任务。

为什么质数搜索需要使用 Web Worker?

质数搜索(如埃拉托斯特尼筛法)涉及大量循环和数组操作,属于典型的 CPU 密集型任务。在浏览器中,如果直接在主线程执行,会导致页面冻结、动画停止、用户无法交互。使用 Web Worker 可以将计算移至后台,保持界面流畅。

Web Worker 有哪些限制?

Worker 无法访问 DOM、不能操作页面元素、无法使用 window 对象的某些方法。它与主线程的数据交换依赖 postMessage,传递的数据会被结构化克隆(会有一定开销)。此外,Worker 文件需要同源或使用 Blob URL。

埃拉托斯特尼筛法的原理是什么?

筛法是一种高效查找质数的算法:创建一个从2到N的数组,从最小的质数2开始,将其所有倍数标记为非质数,然后找到下一个未被标记的数作为质数,重复此过程直到 √N。时间复杂度约为 O(N log log N)。

什么情况下应该使用 Web Worker?

当你需要在浏览器中执行以下任务时,应考虑使用 Worker:大数据处理、图像/视频处理、密码学运算、复杂数学计算、大型JSON解析、实时数据流处理等。原则是:任何可能导致主线程阻塞超过50ms的操作都应考虑移至Worker。