更新时间:2024-11-09 08:54:20点击:
大家好,今天小编关注到一个比较有意思的话题,就是关于html5批量文件上传的问题,于是小编就整理了1个相关介绍html5批量文件上传的解答,让我们一起看看吧。
摘要:这里,我们看看如何浏览器对于J*aScript中处理大量数据。
在之前的文章中,我们讲了浏览器对于J*aScript***码执行的限制和基于计时器的伪线程机制。这里,我们再看看如何在J*aScript中处理大量数据。
在几年之前,开发人员不会去考虑在服务端之外处理大量的数据。现在这种观念已经改变了,很多Ajax程序需要在客户端和服务器端传输大量的数据。此外,更新DOM节点的处理在浏览器端来看也是一个很耗时的工作。而且,需要对这些信息进行分析处理的时候也很可能导致程序无响应,浏览器抛出错误。
将需要大量处理数据的过程分割成很多小段,然后通过J*aScript的计时器来分别执行,就可以防止浏览器******。先看看怎么开始:
function ProcessArray(data,handler,callback){
ProcessArray()方***支持三个参数:
data:需要处理的数据
handler:处理每条数据的函数
callback:回调函数
然后定义一些变量:
var maxtime = 100;var delay = 20;var queue = data.concat();
maxtime表示每个处理进程的最大毫秒数。delay表示每个程序块之间的毫秒数。queue是源数据的**,虽然不是在所有情景下都必要,但是我们是通过传递引用修改的,所以最好还是备份一下。
然后就可以使用setTimeout()方***来处理了:
setTimeout(function(){ var endtime = new Date() + maxtime; do{ hanler(queue.shift()); }while(queue.length>0 && endtime > new Date());
首先,先计算endtime,这是程序处理的最大时间。do.while 循环用来处理每一个小块的数据,直到循环全部完成或者超时。
为什么使用do..while循环呢? J*aScript支持while和do…while循环。不同之处在于do..while循环回至少执行一次。如果使用while循环,那么当开发者设置一个很小或者很低的endtime值的时候,那么处理就根本不会执行了。
最后,我们再决定是否需要处理其他的数据,如果需要,那么就再调用一次:
if (queue.length > 0) { setTimeout(arguments.callee, delay); } else { if (callback) callback(); } }, delay);}
这样回调函数会在每一个数据都处理结束的时候执行。我们可以通过ProcessArray()来测试一小组数据:
// process an individual data itemfunction Process(dataitem) { console.log(dataitem);}// processing is completefunction Done() { console.log("Done");}// test dat*ar data = [];for (var i = 0; i < 500; i++) data[i] = i;// process all itemsProcessArray(data, Process, Done);
这个方***在任何浏览器中都可以执行,不过HTML5提供了更好的办***,Rockux在以后的文章中会提到。
-----------河南新华
到此,以上就是小编对于html5批量文件上传的问题就介绍到这了,希望介绍关于html5批量文件上传的1点解答对大家有用。
[免责声明]本文来源于网络,不代表本站立场,如转载内容涉及版权等问题,请联系邮箱:83115484#qq.com,#换成@即可,我们会予以删除相关文章,保证您的权利。 转载请注明出处:http://www.zzbaijie.cn/guonaxinwen/43019.html