Web Worker 质数搜索器 - 不阻塞界面计算
在后台 Worker 中计算大范围内的质数,主线程实时绘制进度条,展示多线程优势。
UD5工具箱
直观对比主线程计算与后台 Worker 计算对 UI 流畅度的影响
requestAnimationFrame 驱动 · 卡顿时会停顿或跳跃
postMessage 传递可序列化的数据(结构化克隆算法),或使用 Transferable Objects(如 ArrayBuffer)实现零拷贝传输。Worker 内部可以使用 fetch、WebSocket、setTimeout 等 API。
// worker.js
self.onmessage = function(e) {
const result = heavyComputation(e.data);
self.postMessage(result);
};
// 主线程
const worker = new Worker('worker.js');
worker.onmessage = (e) => console.log('结果:', e.data);
worker.postMessage(inputData);
方式二:Blob URL(内联,如本演示)
const code = `self.onmessage=function(e){...}`;
const blob = new Blob([code], {type:'application/javascript'});
const url = URL.createObjectURL(blob);
const worker = new Worker(url);
// 使用完毕后释放
URL.revokeObjectURL(url);
可通过 worker.terminate() 立即终止 Worker。
在后台 Worker 中计算大范围内的质数,主线程实时绘制进度条,展示多线程优势。
编写主线程和 Worker 内的逻辑模板,自动生成分离的 JS 文件代码,加速 Worker 开发。
填写 Manifest、Service Worker、HTTPS 等实施情况,计算 PWA 完备度分数并给出改进建议。
在主线程和 Worker 之间使用 SharedArrayBuffer 和 Atomics 进行同步通信。
创建并运行动画工作线程,展示不受主线程影响的平滑动画效果。
注册一个周期性后台同步,模拟触发并显示更新数据。
通过 iframe 或 Web Components 将多个独立前端应用组合到同一个页面,展示微前端概念。
上传 webpack 的 stats.json,生成交互式树状图、模块大小排名,辅助优化构建体积。
输入 gRPC 服务地址和方法,构造 JSON 请求体,观察转为二进制帧并接收响应解码。
输入 HTML 或网址,提取所有标题标签,生成文档大纲树,检测跳跃和缺失。
输入 URL,通过前端代理或 CORS 配置获取并显示完整的响应头信息。
编写Brainfuck代码,以可视化的方式步进执行,观察活动纸带和指针。
通过滑块和开关调整 Flex 容器和子项的所有 CSS 属性,实时观察布局变化,理解弹性盒子。
并列播放所有CSS内置缓动函数(ease, linear等)的动画效果,方便对比选择。
使用新的迭代器辅助方法链式处理数据,查看懒求值效果。
触发系统原生分享,支持分享文本、链接与文件,检查浏览器兼容性与支持级别。
动画展示 Kruskal 算法选择边和合并集合的过程,高亮生成树边。
通过Service Worker或本地fetch模拟拦截和转发请求,查看修改后的请求响应。
展示几组在各类色盲下仍可区分的定性数据配色方案,含Hex码。
在页面上叠加可拖拽的半透明网格线,辅助网格布局对齐。
载入简单控制网格,执行 Catmull-Clark 细分一次,观察光滑效果。
可视化Flexbox容器和子项的所有属性及选项,鼠标悬停预览效果。
设定物理页框数,输入页引用串,动画展示不同页面置换算法的缺页率。
拖拽题型构建客户或员工反馈表,支持NPS、星级评分,导出填写链接或二维码。
分别使用主线程Canvas和OffscreenCanvas在Worker中渲染动画,对比FPS和流畅度。
在开发环境中模拟 periodicSync 事件,触发后查看 SW 中的处理逻辑和网络请求。
粘贴带参数的URL,以表格形式列出所有Query参数与值。
编写函数并选择调用方式(普通、方法、call、apply、箭头等),输出 this 的值。
应用 contain 的各种值(layout, paint, size),直观对比开启前后渲染和布局的变化。
输入移动距离和视口尺寸,手动模拟单个布局偏移的分数计算方式,加深对 CLS 的理解。