近年来,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应用性能更佳!