上一篇
hyperdown.js
- 行业动态
- 2025-04-27
- 4229
HyperDown.js 是一款轻量级 JavaScript 下载加速工具,支持多线程并发、断点续传及主流协议(HTTP/HTTPS/FTP),可提升大文件下载效率,适用于浏览器端与 Node.js 环境,兼容多平台使用
HyperDown.js 核心功能与使用指南
简介
HyperDown.js 是一个轻量级的 JavaScript 下载管理库,支持浏览器和 Node.js 环境,它提供多任务并行下载、断点续传、下载进度监控等功能,适用于大文件下载、多资源批量获取等场景。
核心功能
功能 | 描述 |
---|---|
多任务并行下载 | 支持同时发起多个下载任务,可配置并发数量 |
断点续传 | 自动记录下载进度,中断后可从中断处继续下载 |
下载优先级控制 | 支持为不同任务设置优先级,优先下载高优先级任务 |
文件分片下载 | 将大文件拆分为多个小块并行下载,提升下载速度 |
下载限速 | 可限制单个任务或全局的下载速度 |
错误重试机制 | 网络错误时自动重试,可配置重试次数和间隔时间 |
安装方式
npm 安装(Node.js 环境)
npm install hyperdown
浏览器直接引入
<script src="https://unpkg.com/hyperdown/dist/hyperdown.min.js"></script>
快速开始
基础用法(Node.js)
const HyperDown = require('hyperdown'); // 创建下载管理器 const downloader = new HyperDown(); // 添加下载任务 downloader.addTask({ id: 'file1', // 任务唯一标识 url: 'https://example.com/file.zip', // 下载地址 targetPath: './file.zip' // 保存路径(仅 Node.js 可用) }); // 开始下载 downloader.start(); // 监听下载完成事件 downloader.on('complete', (task) => { console.log(`${task.id} 下载完成`); });
浏览器环境用法
// 假设已通过 <script> 引入 HyperDown.js const downloader = new HyperDown(); downloader.addTask({ id: 'image1', url: 'https://example.com/image.png', onProgress: (progress) => { console.log(`下载进度:${progress}%`); } }); downloader.start();
配置参数说明
参数 | 类型 | 默认值 | 说明 |
---|---|---|---|
concurrentTasks | Number | 3 | 最大并行下载任务数 |
retries | Number | 3 | 任务失败后重试次数 |
retryDelay | Number | 2000 | 重试间隔时间(毫秒) |
timeout | Number | 60000 | 单个任务超时时间(毫秒) |
speedLimit | Number | 0 | 下载速度限制(字节/秒),0 表示不限制 |
autoStart | Boolean | true | 是否添加任务后自动开始下载 |
错误处理
常见错误类型及处理方法:
| 错误类型 | 触发场景 | 处理方法 |
|———————|———————————-|————————————–|
| NetworkError
| 网络中断或跨域请求被阻止 | 检查网络连接,配置代理或 CORS |
| FileAccessError
| 无写入权限(Node.js) | 检查目标路径权限 |
| HashMismatch
| 文件校验失败(启用校验时) | 重新下载或检查服务器文件完整性 |
示例代码:
downloader.on('error', (err, task) => { if (err.type === 'NetworkError') { console.error(`${task.id} 网络错误,正在重试...`); } else if (err.type === 'FileAccessError') { console.error(`无法写入文件:${task.targetPath}`); } });
高级特性
暂停与恢复任务
// 暂停所有任务 downloader.pauseAll(); // 恢复指定任务 downloader.resumeTask('file1');
优先级队列管理
downloader.addTask({ id: 'low', url: '...', priority: 1 }); // 低优先级 downloader.addTask({ id: 'high', url: '...', priority: 5 }); // 高优先级
文件分片下载(Node.js)
const fs = require('fs'); const downloader = new HyperDown(); downloader.addTask({ id: 'large-file', url: 'https://example.com/large-file.tar.gz', chunkSize: 1024 1024, // 每片 1MB onChunkDownloaded: (chunkData, index) => { fs.appendFileSync('./large-file.part', chunkData); // 自定义分片存储逻辑 } });
相关问题与解答
Q1:如何配置代理服务器?
A:在 Node.js 环境中,可以通过设置 proxy
选项:
const downloader = new HyperDown({ proxy: 'http://127.0.0.1:8080' // 代理地址 });
浏览器环境需通过 fetch
代理配置或自行封装请求。
Q2:如何下载需要身份验证的资源?
A:在任务配置中添加认证信息:
downloader.addTask({ url: 'https://private-repo/file.zip', headers: { 'Authorization': 'Bearer YOUR_TOKEN' // 或 Basic 认证头 } });