代码判断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标签
替换。
我今天累了。我想睡觉了。先写那么多。