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