uni-app 使用 plus.downloader.createDownload 下载资源速度极慢

uni-app 使用 plus.downloader.createDownload 下载资源速度极慢

开发环境 版本号 项目创建方式
HBuilderX 3.2.5 云端
## 示例代码:

```javascript
plus.downloader.createDownload(option.url, {  
    method: "GET",  
    filename: '_doc/playList/21/'play_info.mp4`  
}, (d, status) => {  
    if (status == 200) {  

    } else {  
        this.showMsg(`文件下载失败[ID-${option.itemInfo.id}],状态${status},地址${option.url}`,  
            null, 'error')  
    }  
}).start();
init() {  
    if (this.obj) {  
        return  
    }  
    console.log("init traffic_stats")  
    this.obj = plus.android.importClass("android.net.TrafficStats");  
}  
getNetSpeed() {  
    this.init()  
    return new Promise((resolve,rejact)=>{  
        var total_data1 = this.obj.getTotalRxBytes();  
        util.sleep(1000).then(()=>{  
            var total_data2 = this.obj.getTotalRxBytes();  
            var speed = util.bytesToSize(total_data2 - total_data1)  
            resolve(speed)  
        })  
    })  
}

操作步骤:

  1. 使用定时器启动网速检测方法;
  2. 使用plus.downloader.createDownload下载文件 : https://test-play-list.oss-cn-hangzhou.aliyuncs.com/play-item/120.mp4

预期结果:

资源存储在阿里云oss, 本地网速正常的情况下, 下载速度肯定是高于1M/s的速度

实际结果:

测试过一个星期, 下载速度不会高于600kb/s

bug描述:

BUG描述

使用plus.downloader.createDownload下载资源速度极慢.

同样的资源链接, 在自带浏览器上下载速度为5M/s, 用5+plus下载速度最高为500kb/s

下载资源链接

https://test-play-list.oss-cn-hangzhou.aliyuncs.com/play-item/120.mp4


更多关于uni-app 使用 plus.downloader.createDownload 下载资源速度极慢的实战教程也可以访问 https://www.itying.com/category-93-b0.html

11 回复

@开发人员

更多关于uni-app 使用 plus.downloader.createDownload 下载资源速度极慢的实战教程也可以访问 https://www.itying.com/category-93-b0.html


@开发人员

@开发人员

@开发人员

@开发人员

@开发人员

@开发人员

@开发人员

@开发人员

@开发人员

根据你的描述,这确实是一个典型的plus.downloader下载速度瓶颈问题。从技术角度看,这通常与底层网络库的配置和优化有关,而非简单的代码错误。

核心原因分析:

  1. 并发限制:plus.downloader默认可能对并发连接数或单连接速度进行了保守的限制,这是为了保证应用稳定性,但牺牲了峰值下载速度。
  2. 缓冲区设置:底层网络请求的缓冲区大小可能未针对大文件或高速网络进行优化。
  3. 网络库差异:系统自带浏览器(如Android的WebView或系统浏览器)使用了更激进、优化更好的网络堆栈和缓存策略,而5+ Runtime集成的网络库可能版本较旧或配置不同。

解决方案(按推荐顺序):

方案一:检查并尝试移除或修改filename参数 你的代码中filename参数路径字符串有语法错误(多了一个反引号),但这可能是粘贴问题。关键点是:如果服务器支持分片,指定filename到_doc目录可能会强制使用完整的单线程文件写入流程,影响速度。 可以尝试先不指定filename,让下载器使用临时缓存,完成后再手动移动文件,测试速度是否有变化。

方案二:使用更底层的网络请求进行分片下载(推荐用于大文件) 对于视频等大文件,plus.downloader的单线程下载容易受瓶颈限制。可以改用uni.request配合ArrayBufferplus.io进行分片(Range)下载,然后拼接文件。这能更好地利用网络带宽。示例框架:

// 伪代码思路
// 1. 使用HEAD请求或获取文件总大小
// 2. 定义分片大小(如1MB)
// 3. 使用多个uni.request并发下载不同Range范围的数据块
// 4. 使用plus.io将ArrayBuffer按顺序写入文件
回到顶部