快捷搜索: 王者荣耀 脱发

JS实现多线程数据分片下载

在大数据开发过程中,为了提高大文件的上传速度,往往需要将大文件切割为小的数据分片,这样小分片数据可以充分利用有限的带宽,加快上传速度。

上传完成后,通常做法是在后端进行合并,而我的做法是后台保持分片存储,数据使用时候,前端JS开启多线程下载,再合并为完整的文件。这样的好处和上传一样,可以提高下载速度很多倍。下载效率和分片算法相关。

以下是多线程分片下载聚合的实现。

function concatenate(arrays) {
    if (!arrays.length) return null;
    let totalLength = arrays.reduce((acc, value) => acc + value.length, 0);
    let result = new Uint8Array(totalLength);
    let length = 0;
    for (let array of arrays) {
        result.set(array, length);
        length += array.length;
    }
    return result;
}

function getContentLength(url) {
    return new Promise((resolve, reject) => {
        let xhr = new XMLHttpRequest();
        xhr.open("HEAD", url);
        xhr.send();
        xhr.onload = function () {
            resolve(
                // xhr.getResponseHeader("Accept-Ranges")
经验分享 程序员 微信小程序 职场和发展