本文档说明当前站点前端实际生效的上传性能参数,基于 VXUI 上传模块实现整理。
- 当前生效实现:
js/vxui/vxui-uploader.js - 旧版
js/core/uploader.js仍保留历史可配置逻辑,但不是当前 VXUI 文件列表上传的主实现
| 项目 | 当前值 | 说明 |
|---|---|---|
| 上传服务器选择 | 服务器列表接口返回后,默认选中本地已保存服务器;若无或失效则回退到第一个服务器 | 非赞助者前端不可手动切换服务器 |
| 分片大小 | 默认 80 MB,可由后端配置下发;赞助者可在“设定”页调整 | 当前通过 pf_upload_get 读取,变更通过 pf_upload_set 保存 |
| 同时上传文件数 | 默认 10 个,可由后端配置下发;赞助者可在“设定”页调整 | 当前通过 pf_upload_get 读取,变更通过 pf_upload_set 保存 |
| 单文件内部并发分片数 | 1 | 当前 VXUI 为单文件串行分片上传,不做多线程分片并发 |
| 单文件大小上限 | 50 GB | 超过会直接拒绝加入上传队列 |
当前 VXUI 上传模块的服务器选择逻辑如下:
- 初始化上传模块时,请求
upload_request_select2获取可用上传服务器列表。 - 如果本地
localStorage.app_upload_server有值,并且仍在服务器列表中,则继续使用该服务器。 - 如果本地没有保存值,或保存值已经失效,则自动回退到服务器列表中的第一个服务器。
- 非赞助者虽然也会拿到服务器列表,但前端会禁用服务器选择框,因此通常只能使用默认选中的服务器。
- 实际上传分片时,请求地址为“选中服务器 URL +
/app/upload_slice”。
补充说明:
- 在真正开始上传前,前端还会再次调用
upload_request_select2获取本次上传所需的utoken。 - 服务器列表的用途主要是确定实际分片上传落到哪个上传节点。
当前 VXUI 会在初始化或打开上传弹窗时,请求 pf_upload_get 读取上传性能配置:
- 读取
upload_slice_size作为当前分片大小。 - 读取
upload_slice_queue_max作为当前同时上传文件数。 - 非赞助者也会应用后端返回值,但前端会禁用相关输入框。
- 赞助者可在 VXUI 的“设定”页面中直接修改这两个参数,前端通过
pf_upload_set保存到后端。 - 新设置会影响之后新加入队列的上传任务;已经开始上传的任务会继续使用自己的既有分片设置。
当前分片策略是“任务级固定分片”:
- 默认值是
80 * 1024 * 1024 - 运行时可由
pf_upload_get下发新的分片大小 - 一个上传任务入队时会冻结自己的
slice_size - 总分片数按“文件大小 ÷ 当前任务分片大小,向上取整”计算
- 每次只上传当前分片,完成后再继续请求下一个分片
这意味着当前实现依然是“稳定串行分片”,但已经恢复了分片大小可配置。
当前 VXUI 上传并发分两层理解:
- 默认最多同时上传 10 个文件
- 实际并发上限由
upload_slice_queue_max决定 - 当某个文件上传完成、失败或取消后,队列才会补位启动下一个文件
- 当前是 1
- 一个文件在任意时刻只会有一个分片 XHR 在传输
- 当前代码不会为同一个文件同时发多个分片请求
因此,当前实现实际含义是:
- 最多按当前配置值并行上传多个文件
- 每个文件内部 1 个分片串行上传
旧版 js/core/uploader.js 中保留了以下可配置能力:
- 分片大小可配置
- 上传队列并发数可配置
- 单文件分片线程数可配置
当前 VXUI 已恢复其中两项:
- 分片大小可配置
- 文件级并发可配置
- 单文件分片并发仍固定为 1
当前尚未恢复旧版的“单文件分片线程数”能力,因此 VXUI 仍没有多线程并行上传同一文件的设计。
当前前端上传性能参数可以概括为:
- 服务器:优先使用本地已保存且仍有效的服务器,否则退回第一个可用服务器
- 分片:默认 80 MB,可由后端下发,赞助者可在“设定”页调整
- 同时上传:默认 10 个文件,可由后端下发,赞助者可在“设定”页调整
- 单文件分片:串行上传,不做并行分片