在之前的文章中,我们讲了浏览器对于JavaScript代码执行的限制和基于计时器的伪线程机制。这里,我们再看看如何在JavaScript中处理大量数据。
在几年之前,开发人员不会去考虑在服务端之外处理大量的数据。现在这种观念已经改变了,很多Ajax程序需要在客户端和服务器端传输大量的数
据。此外,更新DOM节点的处理在浏览器端来看也是一个很耗时的工作。而且,需要对这些信息进行分析处理的时候也很可能导致程序无响应,浏览器抛出错误。
将需要大量处理数据的过程分割成很多小段,然后通过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 individual 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在以后的文章中会提到。
分享到:
相关推荐
随着Web应用程序对数据处理能力的需求提升,前端工程师必须找到有效地处理大量数据的方法,而不仅仅是依赖后端服务器。本主题将深入探讨如何使用JavaScript来处理Excel文件,尤其是面对大数据量时的策略。 首先,...
在处理大量数据时,分页是一种常见的优化策略,可以提高网页性能并提升用户体验。在这个场景中,我们将讨论如何使用JavaScript从JSON数据源中读取数据,并实现支持键盘和滚轮翻页的功能。 首先,JSON(JavaScript ...
异步编程是JavaScript处理耗时操作的方式,常见的有回调函数、Promise和async/await等。 ES6(ECMAScript 2015)引入了许多新特性,如类(class)、模块(import/export)、箭头函数(=>)、解构赋值、let/const...
例如,在车载信息娱乐系统中,可以利用JavaScript引擎实时处理车辆状态数据,并根据驾驶者的需求动态展示信息,同时,还可以实现与云端服务的交互,获取最新的导航信息或天气数据。 总结来说,基于JavaScript引擎的...
6. **性能优化**:实时处理拼音和候选词可能会带来性能问题,特别是在处理大量汉字时。因此,优化算法和数据结构,如使用前缀树(Trie树)来快速查找拼音对应的汉字,是必要的。 7. **自定义词库**:为了提高输入...
数组作为JavaScript中重要的数据结构,其章节详述了数组的定义、length属性、数组的空位处理以及ECMAScript 5中新增的数组方法(如map、forEach等),这些方法极大地增强了数组操作的灵活性和功能性。 函数章节讲解...
在JavaScript中,JSON是原生支持的,这使得在JavaScript中处理JSON数据非常方便。在无限画布的场景中,使用JSON存储画布状态可以确保数据的可移植性,当用户保存或加载他们的工作时,这些数据可以被轻松地序列化和反...
作者通过打开任务管理器查看,发现刷新浏览器后内存使用量有所下降,这提示了在处理大量数据时,浏览器可能会延迟释放内存,特别是在JavaScript中操作DOM或者进行大量数据处理时需要注意内存的管理问题。 4. 内存...
6. **性能优化**:当处理大量数据时,效率问题不容忽视。json-table-converter库可能会采取一些优化措施,如延迟渲染、分页显示等,以确保在大型数据集上的流畅性能。 7. **兼容性**:作为JavaScript库,json-table...
在JavaScript中,理解这些算法能帮助优化搜索性能,尤其是在大量数据中寻找特定值时。 3. **数据结构**: - **数组**:JavaScript中的数组是最基本的数据结构,可以存储任意类型的元素。 - **链表**:链表在...
1. Kafka 数据采集:Kafka 是一种流行的开源分布式流处理平台,能够高效地处理大量的数据流。通过 Kafka 系统集中采集不同信号专业的运维数据。 2. JavaScript 脚本处理:JavaScript 是一种广泛应用于 Web 开发的...
在描述中提到,“最近流行的网络游戏(FLASH)数据传输都是用GZIP进行压缩与解压缩的”,这是因为网络游戏往往需要大量数据交换,如图像、音频和游戏状态等,GZIP压缩可以显著减少这些数据在网络中传输的时间,提高...
8. 处理大量数据 - 大量数据处理通常需要借助数据库、数据仓库和大数据处理框架,比如Hadoop和Spark。 - 这部分还可能涉及数据挖掘算法的应用,以及机器学习技术。 9. 实践数据分析 - 数据分析是使用统计学方法...
5. **模板引擎**:如Handlebars或Mustache等JavaScript库,可以帮助开发者更方便地生成动态HTML,尤其在处理大量数据时,能提高效率和可读性。 6. **前端路由**:对于单页应用(SPA),JavaScript可以实现前端路由...
传统的线性搜索效率低下,而位置空间索引如R树、kd树、Quadtree等,能够以较高的效率处理大量的二维空间数据。 JavaScript是一种广泛用于Web开发的脚本语言,特别是在前端交互和地图应用中。由于JavaScript的运行...
“Dealing with huge data files”和“Working with a mountain of data”章节可能涉及大量数据的处理。当数据集非常庞大时,传统的数据处理方法可能不再适用,因此这部分内容可能会介绍如何使用流处理、数据分片等...
在探讨JavaScript处理本地文件的能力时,我们主要关注的是在客户端(即用户浏览器)与服务器端进行文件操作的不同方法。由于安全限制,纯JavaScript在浏览器环境中直接读写用户计算机上的文件受到严格限制。然而,...
JavaScript 和 AJAX 是 web 开发中的两个重要概念,它们在创建动态和交互式的网页方面起着至关重要的作用。这个"Javascript & Ajax 中文手册"是由知名的在线学习平台 w3school 提供的,它为学习者提供了丰富的教程和...
《JavaScript语言精粹》还提供了大量实战案例,涵盖了从简单的代码片段到复杂的Web应用开发,帮助读者将理论知识应用于实际场景中,加深理解和记忆。 ### 总结 《JavaScript语言精粹》是一部深入剖析JavaScript语言...
在学习过程中,你可以通过分析和运行这些示例,深入了解JavaScript在数据库操作中的应用,并提升在实际项目中的数据管理能力。同时,"qingyuan"这个标签可能代表这是一个开源项目或者社区资源,鼓励大家共同学习和...