`
yiminghe
  • 浏览: 1452932 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

使用 javascript Workers 进行计算

阅读更多

Computing with JavaScript Web Workers

一点体会:

 

以前对于大计算量的应用为了使得界面不至于僵死,只有将任务分成子任务,用timeout 来分批运行 ,其根本原因是 javascript本质是单线程的 ,集中时间大计算量的话会使得界面失去响应 ,更常用的是 将任务传到server端快速运行,利用xhr读取server端结果 。

 

09-09-01:

setTimeout 方式只是相当于模拟了多线程,而不是真正的多线程,比如当今的多核处理器,真正的多线程可以利用运行在不同的core而真正并行执行加快运行效率,这种timeout模拟的方式就不行了哦,只能在一个core运行的。


如今最新的浏览器 firefox 3.5 为我们提供了新的计算方式:


Worker ,后台运行的一段javascript ,突破了javascript的单线程模式,但是worker不可以动用界面操作,同java swing类似,界面操作仍然要单线程,worker 通过消息传递,将结果传给主线程,只有主线程才能进行界面操作,实现UI和处理线程分离。


举个例子:

 

两个文件 : html ,javascript(worker.js) 。由html中javascript 传递消息给worker


调用端:

 

<h1>请用 firefox 3.5 运行</h1>


<p>由于 javascript 的单线程特性,以前计算量很大的话就要放在server端运行,利用xhr回调取的结果,
	<br/><br/>
	现在也可以在client 后台运行了 ,界面不会僵死,但是 worker 不能进行界面dom操作,界面操作单线程保证
	<br/>
	</p>

<button id="test" > 后台worker运行 </button>

<button id="test2" > 当前线程运行 </button>

<div id="status" style="border:1px green solid;margin:10px;height:100px;color:red;">
</div>
<script type="text/javascript">
	//将要后台运行的一段代码
var worker = new Worker("worker.js");

//后台worker返回的结果
worker.onmessage = function(ev){
	
	document.getElementById("status").innerHTML="后台worker计算完毕:结果:<br />" +ev.data;
}

document.getElementById("test").onclick=function(){
	alert("后台worker将要进行 1 ~ 1000000000 的遍历 ,但是界面不会僵死,点确定后等一会后台worker会返回信息");
	document.getElementById("status").innerHTML="后台worker计算中 .....";
	//将消息发给后台计算,主界面仍然可以操作,不会僵死
	worker.postMessage(1);
};

document.getElementById("test2").onclick=function(){
	document.getElementById("status").innerHTML="";
	alert("当前线程运行将要进行 1 ~ 1000000000 的遍历 ,点确定后,界面将要僵死");
	for(var i=0;i<1000000000;i++);
	document.getElementById("status").innerHTML="当前线程 计算完毕:结果:<br /> 2";;
};
</script>
 

后台 worker.js :

 

//得到主线程传过的消息
onmessage = function(ev){
  for(var i=0;i<1000000000;i++);
  //将结果传递给主线程,注意不可以进行界面操作,不可以访问主线程页面数据,只能访问消息数据
  postMessage( "来自 worker " + (parseInt(ev.data)+1) );
};

 

 

 

09-09-01:

上面所说的 xhr 实际上就是 web worker ,只不过它具有不同的特定任务的socket API (from even faster websites)

 

 

 

 

 

 

0
0
分享到:
评论

相关推荐

    JavaScript开发使用WebWorkers

    在JavaScript开发中,Web Workers的应用越来越广泛,尤其是在处理大量数据或复杂计算的场景。 **Web Workers的基本概念** Web Workers是JavaScript的一种多线程解决方案,它们在后台线程中运行,不干扰用户界面的...

    vueworker以一种简单的方式使用webworkers的Vue插件

    Web Workers 允许在后台线程中运行 JavaScript,这些线程与主线程(即 UI 线程)分离,可以处理大量计算任务,而不会影响用户界面的响应速度。创建一个 Web Worker 需要定义一个工作脚本(如 `worker.js`),并在主...

    Node.js-deThread一个应用程序库支持在浏览器中利用JavaScript进行分布式计算

    deThread 库是 Node.js 生态系统中的一员,专为实现浏览器中的分布式计算而设计,通过结合 JavaScript、WebSockets 和 Web Workers 技术,它提供了在客户端进行高效计算的能力。 **1. 分布式计算基础** 分布式计算...

    javascript获取计算机硬件信息

    在描述中提到了jQuery,这是一个广泛使用的JavaScript库,它简化了DOM操作和事件处理。虽然jQuery本身不直接支持获取硬件信息,但它可以帮助我们美化数据展示。例如,我们可以使用jQuery创建表格元素,动态填充获取...

    使用 WebAssembly 和 WebWorkers构建快速基因组学 Web工具的 框架_JavaScript_代码_下载

    "使用WebAssembly和WebWorkers构建快速基因组学Web工具的框架"这一主题,正是针对高性能计算需求,特别是生物信息学领域,提供了创新的解决方案。本文将深入探讨Aioli库如何通过JavaScript,WebAssembly以及Web...

    JavaScript实例应用 JavaScript实例应用

    11. **Web Workers**:JavaScript的Web Workers特性可以开启后台线程,处理大量计算任务,避免阻塞用户界面。 12. **Service Worker**:服务工作者是现代Web开发中的一个重要组成部分,它可以离线存储资源,实现...

    JavaScript与MATLAB的计算性能差异对比研究.zip

    JavaScript 可以通过 Web Workers 在后台线程执行计算密集型任务,从而避免阻塞用户界面,但这仍然无法与 MATLAB 的原生多线程和并行计算能力相比。MATLAB 提供的 Parallel Computing Toolbox 支持分布式计算,能够...

    JavaScript高级编程 pdf

    14. **Web Workers**:在后台线程中运行脚本,以提高计算密集型任务的性能。 15. **框架与库**:React、Vue、Angular等前端框架的使用,以及jQuery等库的掌握,可以提升开发效率。 16. **浏览器兼容性**:理解不同...

    与webworkers集成的更好方式

    本文将探讨如何通过JavaScript Proxies与Web Workers更高效地集成,实现类似与普通对象交互的方式。 ### Web Workers基础 Web Workers 允许开发者创建单独的执行线程,这些线程可以在不干扰用户界面的情况下运行...

    Android开发教程之使用 Web Workers 来加速您的移动 Web 应用程序--千锋培训

    一直以来,JavaScript代码在浏览器中是单线程执行的,这意味着复杂的计算或长时间运行的任务可能会阻塞用户界面,导致应用显得反应迟钝。Web Workers的出现打破了这一限制,通过在后台线程中执行耗时任务,使得主线...

    完成JavaScript30天挑战的解决方案

    20. **Web Workers**:学习使用Web Workers进行后台计算,提高网页性能。 在"JavaScript30-master"这个压缩包中,你将找到每个挑战对应的源代码和详细说明,通过逐一实践这些项目,你不仅可以巩固JavaScript知识,...

    Android开发教程之使用-Web-Workers-来加速PPT.ppt

    Web Workers是HTML5的一项关键特性,允许在浏览器后台创建独立的工作线程,从而使得复杂的计算或者数据处理可以在不影响用户界面UI的情况下进行,显著提升了Web应用的响应速度。 ### Web Workers简介 Web Workers为...

    震撼的javascript网页效果

    10. **Web Workers**:Web Workers允许在后台线程执行计算密集型任务,避免阻塞主线程,从而提高网页性能,支持大规模数据处理或复杂计算。 11. **Progressive Web Apps (PWA)**:利用Service Worker和Manifest文件...

    JavaScript超级玛丽

    10. 性能优化:为了保证游戏在各种设备上的流畅运行,开发者可能采用了性能优化策略,比如减少不必要的DOM操作,优化渲染循环,以及使用Web Workers进行后台计算等。 总之,JavaScript超级玛丽项目是一个综合展示...

    Vue.js中使用Web Workers来创建一个秒表

    在Vue.js中,Web Workers是一种优化应用性能的技术,它可以让你在后台线程中处理计算密集型任务,从而避免阻塞主线程(UI渲染线程)。本文将深入探讨如何在Vue项目中利用Web Workers来创建一个秒表功能。 首先,...

    使用JavaScript编程语言编写的模拟器列表

    优化技巧如避免全局查找、减少DOM操作、使用闭包以及利用Web Workers进行多线程处理都是提高性能的关键。 9. **调试和测试**:开发模拟器时,调试和测试是必不可少的。开发者工具如Chrome DevTools提供了丰富的功能...

    HTML5 Web Workers之网站也能多线程的实现

    在示例代码中,演示了使用Web Workers进行求和计算的过程。主线程通过`postMessage`方法向Worker线程发送了一个数字参数,然后在后台的Worker线程中接收到这个消息,并进行求和计算。计算完成后,使用`postMessage`...

    JavaScript 三维报表 饼图

    这可能包括使用requestAnimationFrame进行平滑动画,避免不必要的重绘,以及使用Web Workers进行后台计算等技术。 综上所述,JavaScript 三维饼图的实现涉及了JavaScript基础、HTML、CSS、绘图库、数据处理、三维...

Global site tag (gtag.js) - Google Analytics