JavaScript如何处理大量数据?
发布网友
发布时间:2022-04-20 03:34
我来回答
共1个回答
热心网友
时间:2022-04-13 12:37
将需要大量处理数据的过程分割成很多小段,然后通过JavaScript的计时器来分别执行,就可以防止浏览器假死。先看看怎么开始:
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循环呢?
JavaScript支持while和do…while循环。不同之处在于do..while循环回至少执行一次。如果使用while循环,那么当开发者设置一个很小或者很低的endtime值的时候,那么处理就根本不会执行了。
最后,我们再决定是否需要处理其他的数据,如果需要,那么就再调用一次:
if (queue.length > 0) {
setTimeout(arguments.callee, delay);
}
else {
if (callback) callback();
}
}, delay);
}
这样回调函数会在每一个数据都处理结束的时候执行。我们可以通过ProcessArray()来测试一小组数据:
// process an indivial data item
function Process(dataitem) {
console.log(dataitem);
}
// processing is complete
function Done() {
console.log("Done");
}
// test data
var data = [];
for (var i = 0; i < 500; i++) data[i] = i;
// process all items
ProcessArray(data, Process, Done);
这个方法在任何浏览器中都可以执行,不过HTML5提供了更好的办法,Rockux在以后的文章中会提到。
JavaScript当数据过大而无法计算时会显示?
可以尝试用1除以0,这其实在很多语言是不允许的,但是js计算会显示为无穷大。
javascriptjavascript成熟的几个方面
3. 数据处理:JavaScript具有强大的数据处理能力,可以进行各种数据操作和计算。它支持变量、数组、对象等数据类型,提供了丰富的内置方法和函数,方便开发人员对数据进行处理、转换和分析等操作。4. 异步编程:JavaScript天生支持异步编程,通过使用回调函数、Promise、async/await等机制,可以处理网络请求、文件...
几种常见的排序算法及JavaScript实现
1.“待排序数据”的第1个数据和第2个数据相互比较。 2.如果第1个数据>第2个数据,那么交换两个数据的位置。 3.进行比较的数据位置向后移动一位。 4.直到比较到最后2个数据,那么末尾的数据就是最大值。 5.在“待排序数据”里面除去末尾的最大值,在新的“待排序数据”继续上述操作。 下图展示了进行冒泡排序...
JavaScript执行机制三-深入之垃圾回收器
使用增量标记算法,可以把一个完整的垃圾回收任务拆分成若干个小的任务,每个任务耗时很短,将这些任务穿插在JavaScript代码中间执行,这样就避免了全停顿问题。总结 本文开始讲了声明变量在内存中是如何存储的,基础类型存在栈空间中,引用类型存在堆空间中。 栈空间的垃圾回收器,JavaScript会通过向下移动ESP的方式来销毁该函数...
如何用javascript代码删除数据库里的数据?
IE 浏览器可以使用ActiveX adodb function connection(){ var i=2;var dbname=name;var url = "property.xml";var xmldoc = new ActiveXObject("Microsoft.XMLDOM");xmldoc.load(url);var property=xmldoc.getElementsByTagName("provider");var dbpath=property[i].getElementsByTagName("dbpath")...
如何用javascript在网页上实现实时数据更新,就像股市行情那样。我是想...
function setInfo() { setInterval(new function () { ('#dinfo').html("");//清空显示区域 var s="工厂DCS的数据";//这个可以通过异步调用服务器端发过来的数据 ('#dinfo').html(s);//将新数据填充到网页中(具体为 id=dinfo 的div中)}, 10000);//每隔10秒刷新一次,你可以改这...
什么时候你应该在JavaScript中更喜欢Map而不是Object
在大多数情况下,JavaScript社区似乎普遍认为Map比Object.?有些人声称通过切换Object到Map. 我磨练Leetcode的经验似乎证实了这个信念:Leetcode将大量数据作为测试用例提供给您的解决方案,如果您的解决方案耗时过长,它就会超时。像这样的问题只有在你使用时才会超时Object,而不是在Map. 但是,我相信只是说“Map比对象更快...
请问处理数据是多用sql好还是用javascript处理好?
当然是用SQL,javascript只是为了增加用户体验,传入后台的数据都要进行验证之后才能写进数据库 javascript很不安全
JavaScript基础篇(一):数据类型
数据类型结果Undefined"undefined"Boolean"boolean"Number"number"String"string"Symbol"symbol"BigInt"bigint"Null"object'Function"funciton"Object"object"其他引用类型"object" 那么为什么null会被判断为object呢?答:不同的对象在底层都表示为二进制,在JavaScript中二进制前三位都为0的话会被判断为object类型,null的二...
javascript中如何保存多个数据
'_1':[1, 'c:/1.jpg', '...', 'title1'],'_2':[2, 'c:/2.jpg', '...', 'title2']} 这样子有一个好处,你可以这样子判断一个数据是否存在:var id='_'+1; // 假设第一个数据是 id if(data[id]) { // 数据 1 存在 } 要遍历对象的话,就用 for in 即可。如果...