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)
})
})
}
操作步骤:
- 使用定时器启动网速检测方法;
- 使用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
@开发人员
更多关于uni-app 使用 plus.downloader.createDownload 下载资源速度极慢的实战教程也可以访问 https://www.itying.com/category-93-b0.html
@开发人员
@开发人员
@开发人员
@开发人员
@开发人员
@开发人员
@开发人员
根据你的描述,这确实是一个典型的plus.downloader下载速度瓶颈问题。从技术角度看,这通常与底层网络库的配置和优化有关,而非简单的代码错误。
核心原因分析:
- 并发限制:plus.downloader默认可能对并发连接数或单连接速度进行了保守的限制,这是为了保证应用稳定性,但牺牲了峰值下载速度。
- 缓冲区设置:底层网络请求的缓冲区大小可能未针对大文件或高速网络进行优化。
- 网络库差异:系统自带浏览器(如Android的WebView或系统浏览器)使用了更激进、优化更好的网络堆栈和缓存策略,而5+ Runtime集成的网络库可能版本较旧或配置不同。
解决方案(按推荐顺序):
方案一:检查并尝试移除或修改filename参数
你的代码中filename参数路径字符串有语法错误(多了一个反引号),但这可能是粘贴问题。关键点是:如果服务器支持分片,指定filename到_doc目录可能会强制使用完整的单线程文件写入流程,影响速度。 可以尝试先不指定filename,让下载器使用临时缓存,完成后再手动移动文件,测试速度是否有变化。
方案二:使用更底层的网络请求进行分片下载(推荐用于大文件)
对于视频等大文件,plus.downloader的单线程下载容易受瓶颈限制。可以改用uni.request配合ArrayBuffer或plus.io进行分片(Range)下载,然后拼接文件。这能更好地利用网络带宽。示例框架:
// 伪代码思路
// 1. 使用HEAD请求或获取文件总大小
// 2. 定义分片大小(如1MB)
// 3. 使用多个uni.request并发下载不同Range范围的数据块
// 4. 使用plus.io将ArrayBuffer按顺序写入文件


