淘先锋技术网

首页 1 2 3 4 5 6 7

近年来,Javascript 已经成为了现代前端开发的标配之一。在实际的Web应用开发中,我们通常会遇到需要分段传输数据的情况。这时候如何进行javascript的分段传输就成为了一个必须要解决的问题。

我们看一个例子,如果我们需要从后端服务器获取一份较为庞大的JSON格式的数据,一个简单的做法是使用Ajax技术对后端服务器发送请求,等到所有数据都返回过来之后再显示在我们的前端页面上。但是,这样就会存在一个让人非常头疼的问题,就是当数据过于庞大的时候,用户就需要等待太长时间才能看到数据。为了让用户更快地看到数据,我们需要进行数据的分段传输。

使用Javascript分段传输数据的基本思路是,把数据拆分成若干个小块,然后依次传输小块的数据,最后把所有小块的数据组合在一起,再显示在页面上。具体实现可以使用Html5中的Blob对象,或者使用XMLHttpRequest对象的onprogress事件。

下面是使用Blob对象的一个例子,我们假设有一份618MB的JSON数据需要从后端获取:

//http://some.url/big.json是后端Api地址,通过Ajax技术获取到数据
var xhr = new XMLHttpRequest();
xhr.open('GET', 'http://some.url/big.json');
xhr.responseType = 'blob';
xhr.onload = function() {
var fr = new FileReader();
fr.onload = function() {
//解析数据
var data = JSON.parse(this.result);
console.log(data);
};
fr.readAsText(this.response);
};
xhr.send();

在上面的代码中,我们使用XMLHttpRequest对象获取后端服务器的数据,然后使用Blob对象来解析数据。由于Blob对象无法直接读取数据内容,因此还需要使用FileReader对象来读取数据。

另外,我们还可以使用XMLHttpRequest对象的onprogress事件来实现Javascript的分段传输。onprogress事件在接收响应数据的过程中,会不断地触发,我们可以通过监听这个事件,来实现数据的分块传输。

下面是使用XMLHttpRequest对象的onprogress事件的一个例子:

var xhr = new XMLHttpRequest();
xhr.open('GET', 'http://some.url/big.json');
//监听onprogress事件
xhr.onprogress = function(event) {
if (event.lengthComputable) {
console.log(`已经下载的数据大小:${event.loaded}`);
console.log(`全部数据大小:${event.total}`);
}
};
xhr.onload = function() {
console.log('数据已经完全下载');
};
xhr.send();

上面的代码中,我们监听了XMLHttpRequest对象的onprogress事件,并在事件处理函数中打印了每个分块的数据大小。当全部分块数据都传输完毕之后,会触发XMLHttpRequest对象的onload事件,表示已经全部下载完整个数据。

从上面的例子中我们可以看到,Javascript分段传输数据是非常简单的。使用XMLHttpRequest对象的onprogress事件可以在获取数据的过程中精确地控制数据的分块大小,从而可以减少用户等待时间。 相信这个技巧将会让你的Web应用性能更佳!