Worker 实现 js 多线程

有以下情景: 使用js 求 10000 之内的 质数,并把这些质数全部显示在 页面上

不使用 Worker 的写法:

 1 <div id="show">
 2
 3 </div>
 4
 5         <script type="text/javascript">
 6             var show = document.getElementById(‘show‘);;
 7             var num = 0;
 8             var br = 0;
 9             search:
10                 while (num <= 10000) {
11                     num += 1;
12                     for (var j = 2; j <= Math.sqrt(num); j++) {
13                         console.log(‘num%j=‘ + (num % j));
14                         if (num % j == 0) {
15                             continue search;
16                         }
17                     }
18                     // 大量的 运算导致了 dom 渲染阻塞
19                     if (br % 5 == 0) {
20                         show.innerHTML += "<br/>";
21                     }
22                     show.innerHTML += (num + "&nbsp;&nbsp;");
23                     br++;
24                 }
25         </script>

大量的运算导致了 dom 渲染等待延迟。

使用 Worker:

定义 worker.js 文件(名字任意)

 1 var num = 0;
 2
 3 search:
 4     while (num <= 10000) {
 5         num += 1;
 6         //console.log(num);
 7         for (var j = 2; j <= Math.sqrt(num); j++) {
 8             console.log(‘num%j=‘ + (num % j));
 9             if (num % j == 0) {
10                 continue search;
11             }
12         }
13
14
15         postMessage(num); // 向 有 该js 的worker 传递 数据,数据可以是复杂类型
16
17     }

html 页面

 1         <div id="show">
 2
 3         </div>
 4         <script type="text/javascript">
 5             var show = document.getElementById(‘show‘);
 6             var br = 0;
 7             var worker = new Worker("js/worker.js"); // 构造Worker对象
 8             worker.onmessage = function(event) {
 9                 if (br % 5 == 0) {
10                     show.innerHTML += "<br/>";
11                 }
12                 show.innerHTML += event.data + ",";
13                 br++;
14             }
15         </script>
时间: 2024-12-25 02:51:44

Worker 实现 js 多线程的相关文章

html5之Web Worker -- js多线程编程

什么是Web Worker? web worker 是运行在后台的 JavaScript,不占用浏览器自身线程,独立于其他脚本,可以提高应用的总体性能,并且提升用户体验. 一般来说Javascript和UI页面会共用一个线程,在HTML页面中执行js脚本时,页面的状态是不可响应的,直到脚本已完成.而这段代码可以交给Web Worker在后台运行,那么页面在Javascript运行期间依然可以响应用户操作.后台会启动一个worker线程来执行这段代码,用户可以创建多个worker线程. 有两种 W

JS多线程(web work)

JS多线程JS多线程不允许操作DOM 1. 引用Concurrent Thread.js库用法:Concurrent.Thread.Create(function(){};) 2. Web Workhtml5新增的,不需要引用第三方库//逻辑放在task.js中let worker = new Worker("task.js");//监听返回的数据worker.onmessage = function(event){ alert(event.data);}//向线程post数据work

js多线程(worker)

浏览器端js是单线程执行,所以当js执行高负载运算时,UI渲染就会阻塞,页面就会出现卡顿,用户体验就不是很好 js为此也提供了异步操作,例如: 定时器(setTimeout 和 setInterval),Ajax请求等,但异步终究还是单线程,不能从根本上解决问题,像setTimeout并不能拿到正确的值,因为执行的时候将该任务放到主线程执行,只有当前面的任务执行完才开始执行,所以即使设置时间为0,也并不一定立刻执行 所以HTML5标准添加了Web Worker,worker允许一段js程序运行在

Web worker 与JS中异步编程的对比

0.从一道题说起 var t = true; setTimeout(function(){ t = false; }, 1000); while(t){ } alert('end'); 问,以上代码何时alert"end"呢? 测试一下:答案是:永远都不会alert. 解析:JavaScript引擎是单线程的,事件触发排队等候.所有任务按照触发时间先后排队处理. 上例中,排队的顺序状态是: | var t=true ; | while(t){}; | alert('end'); | 在

ES6入门十二:Module(模块化)

webpack4打包配置babel7转码ES6 Module语法与API的使用 import() Module加载实现原理 Commonjs规范的模块与ES6模块的差异 ES6模块与Nodejs模块相互加载 模块循环加载 一.webpack4打包配置babel7转码ES6 1.webpack.config.js 在webpack中配置babel转码其实就是在我之前的webpack配置解析基础上添加babel的加载器,babel的具体转码配置在之前也有一篇详细的博客做了解析: webpack安装与

Web Worker——js的多线程,实现统计博客园总阅读量

前言 众所周知,js是单线程的,从上往下,从左往右依次执行,当我们有耗时的任务需要处理时,便会阻塞线程造成页面卡顿等问题.web worker的目的,就是为JavaScript创造多线程环境,允许主线程将一些任务分配给子线程.在主线程运行的同时,子线程在后台运行,两者互不干扰.等到子线程完成计算任务,再把结果返回给主线程.因此,每一个子线程就好像一个“工人”(worker),默默地完成自己的工作.更多worker的介绍请戳:JavaScript标准参考教程 本文通过web worker 统计博客

HTML5新特性-多线程(Worker SharedWorker)

There is no doubt that JavaScript是没有多线程之说的,他只能一件事一件事的做,做完一件事再做下一件事,假如你的js要花一段比较长的时间做一件事的话,那么浏览器将会卡顿一段时间,不对用户的操作产生响应,这可咋办呢?谢天谢地,HTML5为我们提供了实现多线程的机制,这么好的东西,想必你早就再用了,不过没关系啊,咱们一块儿复习一下咯! 一.Worker类 1.方法介绍 (1)构造函数 new Worker(arg)  :参数表示你的线程要执行的代码所在的js文件,例如'

深入 HTML5 Web Worker 应用实践:多线程编程

深入 HTML5 Web Worker 应用实践:多线程编程 HTML5 中工作线程(Web Worker)简介 至 2008 年 W3C 制定出第一个 HTML5 草案开始,HTML5 承载了越来越多崭新的特性和功能.它不但强化了 Web 系统或网页的表现性能,而且还增加了对本地数据库等 Web 应用功能的支持.其中,最重要的一个便是对多线程的支持.在 HTML5 中提出了工作线程(Web Worker)的概念,并且规范出 Web Worker 的三大主要特征:能够长时间运行(响应),理想的启

js Worker 线程

在平时的运行的javascript脚本都在主线程中执行,如果当前脚本包含复杂的.耗时的代码.那么JavaScript脚本的执行将会被阻塞,甚至整个刘看齐都是提示失去响应. 例子: 假设程序需要计算.收集1~9999的之间所有质数,不采用后台线程,而是之间是使用JavaScript前台线程的计算.收集质数.代码如下. <html> <head> <meta name="author" content="Yeeku.H.Lee(CrazyIt.org