谈论Javascript线程

谈论Javascript线程
代码判断1:
点击我
var div = document.getelementbyid(div);
Div.addEventListener(听到咔哒声,函数(){(){
提醒(你点击我!;
});
对于(var i = 0;i < 999999999;i + +){
console.log(我);
}
执行,不出所料,所有浏览器都会卡住,因为循环周期太多,非常昂贵的CPU资源,基于Javascript的UI浏览器中的Javascript线程由于死亡而暂停。

既然问题来了,我只想实现代码,我该怎么办

concurrent.thread.js

这类图书馆本质上使用setTimeout实现伪多线程,这是一个很好的选择HTML5 webworker才出来。例如,如果我们想实现上面的代码片段,你可以写的(我下载的类库):

代码段2:
点击我
concurrent.thread.create(函数(){()
var div = document.getelementbyid(div);
Div.addEventListener(听到咔哒声,函数(){(){
提醒(你点击我!;
});
对于(var i = 0;i < 9999999;i + +){
console.log(我);
}
});
一个新的线程可以通过创建方法的类库提供创建。此外,设置脚本标签type属性文本/ x-script.multithreaded-js也可以达到同样的效果:

代码段三:
点击我
var div = document.getelementbyid(div);
Div.addEventListener(听到咔哒声,函数(){(){
提醒(你点击我!;
});
对于(var i = 0;i < 9999999;i + +){
console.log(我);
}

webworker

HTML5如何对上述浏览器卡的坏用户体验视而不见

这里我们使用经典的斐波那契序列做测试:

代码段四:

首页:

窗口。指针函数(){
var div = document.getelementbyid(div);
如果(typeof(工人)!= =未定义){ / / WebWorker之前,首先确定浏览器是否支持
console.log(开始计算…);
VAR时间=新的日期(×1); / /获取当前时间戳
VaR的工人=新工人(斐波那契.js); / /创建一个webworker对象和通过路径在新线程执行脚本
工人。消息=功能(e){ / /监测从一个新的线程来发送数据
div.innerhtml = e.data;
VAR时间=新的日期()* 1;
console.log(时间:+(time2-time1)+ );
}
U3000 U3000 U3000 U3000 U3000 U3000 U3000 U3000
worker.postmessage(36); / /发送数据到新的线程
其他{ }
警报(您的浏览器不支持webwoker );
}
}
Fibonacci.js:
函数(n){
返回N均为3晚:(arguments.callee(n-1)+ arguments.callee(n-2));
}
消息=功能(e){
VaR Num = parseInt(e.data,10);
PostMessage(Fibonacci(努姆)); / /发送到主机的数据页
}

该方法的基本使用已经在代码注释,看着控制台,你可以看到,执行时间是印刷很快。所以我们得出的结论是,WebWorker是一个适用于复杂,在前端大量的计算。应该指出的是,webworker不支持跨域,本地测试或HTTP协议,不使用文件协议,否则工人不能创建对象和脚本错误报告
如果我们需要在一个连续的基础上进行多次投递业务,最好不要写work.postmessage所有的时间,像这样:
(36)worker.postmessage;

(36)worker.postmessage;

(36)worker.postmessage;

因为在这个时候只有一个webworker实例,PostMessage将按顺序执行而不是异步的,它无法发挥其性能全面,数据可以通过创建多个webworker实例发送。

需要注意的几点是:

1,我们观察到,WebWorker可以接受一个URL创建一个工人,和JSONP的原理是通过动态插入script标签加载数据。然后我们尝试使用webworker来完成同样的事情,不是更好吗因为WebWorker是一个多线程,不堵塞,不美吗但事实上,经过实验,我们发现,WebWorker的表现都不好。所以这不是很好的东西,我们仍然不能对别人好。

2、当WebWorker收到其他的信息来源,它也带来了隐患,网站的安全性。如果接收的剧本来源不明的信息,它可能导致跨站脚本注入攻击。所以我们需要警惕这个问题。事实上,在上面的例子中没有id是安全的,它可以通过现代的浏览器设置innerText或textContent过滤HTML标签替换

我今天累了。我想睡觉了。先写那么多。
免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
相关文章
返回顶部