当js执行耗时的操作(如广泛传递)时,如何实现

2019-02-25 07:06

展开全部
选项1:支持html5webworker的最新浏览器解决方案。
代码1
我将大部分计算放在js文件中。
如下:*工作。
Jsonmessage = function(evt){// domassivejob。
这里我们做了很多耗时的计算。
postMessage(数据)。//计算结果的数据发送到主线程}您的页面代码!
DOCTYPEHTMLhtmlheadmetahttp-当量=内容Typecontent = text / html的;字符集= UTF-8 / scripttype =文本/ JavaScript的主线程varworker的// WEB页面= newWorker(工作)
Js); //创建一个Worker对象并将其传递给将在新线程中运行的脚本的URLworker。
postMessage(开始工人的计算。
Onmessage = function(evt){//接收工作人员批准的数据功能控制台。
记录(Evt。
数据); //为了获得大量的计算结果,我们将在这里生成工人发送的数据。
/ script / headbody / body / htmlScenario 2:适用于不支持WebWorker子流程的浏览器。
请考虑批处理。
也就是说,创建一个setInterval时间间隔。
每个短期都会处理一些大量数据。
这避免了许多会导致浏览器卡住的计算。
近似代码如下(这是一个简单的例子)。
具体情况具体分析
):您想要计算1000万数据的总和。
varjobData =[]; //考虑一个矩阵。
其中有1000万个数据。
functionsliceJob(){varnum =(jobData)
长度/ 100)+ 1。//将任务数据分成100份。
Variation = 100000; //每份100,000个数字
Varaddition = 0; //这用于保存最终结果。
从0开始。varintv = setInterval(function(){if(num - ){//每个结果)
Additoin + = every;}else{计算最后一个并生成结果。
警报(最终结果添加)窗口
clearInterval(intv);}},50);}另外。
jQuery的延迟对象无法满足您的请求。
延迟对象的目的是序列化异步进程。
然而,当异步进程的执行过程中的时间的时间太长,继续到浏览器的子进程被阻止,浏览器将无法运行(SNAP)。
唯一的例外是$。
阿贾克斯
$。
ajax方法还返回一个延迟对象。
但异步进程使用XMLHttpRequest。
xhr的默认值是异步执行的。由于这相当于另一个线程,因此不会阻止浏览器的县。

上一篇:强力霉素注射,流行病,疾病,牛,羊,猪,腐
下一篇:[帝国妄想]