简体中文

视频和字幕·直接媒体下载器

大型媒体下载在浏览器内存中的容量:流、Blob 和限制

· 工作原理

下载 性能 浏览器

媒体块累积到内存量表旁边的有界浏览器 Blob 中
原始 ToolAcre 矢量图

ToolAcre 表示大小限制是设备的内存而不是上传上限。这篇文章解释了这对于直接下载意味着什么:如何读取响应正文、字节所在的位置以及浏览器选项卡何时耗尽空间。

文件有几G,下载中途停止——内存限制导致浏览器端下载的问题

长记录可以稳定地进行然后停止,因为浏览器端保存需要空间来容纳接收到的块和完成的 Blob。仅凭停滞百分比无法诊断原因:网络可以暂停,主机可以关闭连接,取消可以触发,或者进程可以接近内存压力。

ToolAcre 使一个边界具有确定性。 `downloadMedia` 默认最大为 2 GiB,并在读取正文之前拒绝更大的声明内容长度。如果主机省略或低估了该标头,则当块到达时会再次强制执行相同的限制,从而防止出现无界累加器。接近边界的声明值需要谨慎,因为 Blob 程序集、页面状态和实现开销可能需要比响应有效负载单独建议的资源更多的资源。

如何读取响应正文:ReadableStream 块与一个大缓冲区 — 当进度缓慢时浏览器正在做什么

Fetch 将响应正文公开为 ReadableStream。该实现获取一个读取器,等待块,对每个 `Uint8Array` 进行计数,更新进度,并存储用于最终 Blob 构建的块。流媒体使进度和取消变得真实;它不会使存储保持不变。

当 Content-Length 为正有限值时,接口可以显示接收到的字节数与总数的比值。如果没有它,显示器会报告接收到的字节,但拒绝发明百分比。如果不存在可读主体,代码将回退到 `response.blob()` 并仅报告最终大小。每个保留的块都使以后的组装成为可能,而真正的磁盘流设计将需要不同的浏览器 API、权限模型和此处不存在的故障策略。

已完成的 Blob 所在的位置以及为什么没有浏览器存储承诺是安全的

收集的 Blob 是一个浏览器对象,表示带有 MIME 标签的不可变字节。该规范不承诺特定浏览器是否将每个支持字节保留在 RAM 中、是否会溢出某些数据或在汇编期间复制缓冲区。因此,文章指南应避免通用存储位置声明。

应用程序确实证明它会保留块引用直到流完成,然后构造一个 Blob 并使其可用于“保存到设备”操作。该工作集与页面和其他选项卡竞争,因此设备和浏览器条件仍然低于明确上限的实际限制。这种区别就是为什么文档会提到资源压力,而不是承诺特定的 RAM 乘数、磁盘溢出阈值或依赖于浏览器的分配技术。

为什么没有上传上限,但有 2 GiB 下载防护

没有文件上传到 ToolAcre,并且没有中继接收媒体。 GET 从访问者的浏览器传输到提供的主机。这消除了服务器上传配额,但并不意味着“无限制”:源强制执行最大为 2 GB 的限制,并告诉较大的作业使用本机“保存”链接。

主机可以通过 Content-Length 宣布过大的大小,从而允许提前拒绝。它还可以在没有长度的情况下进行流式传输,在这种情况下,ToolAcre 会对实际块进行计数,并在超过限制后停止。在此失败后,部分字节不会作为截断的下载提供。早期和流式检查涵盖真实和缺失的长度标头,而仅当测量的主体通过相同的上限时才会捕获不准确的小标头。

工作示例:在 RAM 有限的笔记本电脑上录制长篇讲座 — 会发生什么以及如何判断网络停滞带来的内存压力

想象一下笔记本电脑上的一个讲座文件已经运行了一个编辑器和许多选项卡。首先按检查链接并将规定的尺寸与防护罩进行比较。在下载期间,稳定的字节更新没有总数意味着主机遗漏了可用长度;冻结的请求行可能会显示传输暂停。

即使请求保持活动状态,内存压力也会影响选项卡,但 ToolAcre 无法检查操作系统并声明原因。浏览器任务工具、系统内存视图和请求时间线提供了补充证据。盲目重试可能会重复相同的分配需求。如果请求以 HTTP 状态终止,请首先调查该响应;对于每个中断的大型传输来说,内存压力并不是一个有用的默认解释。

实用习惯:关闭其他选项卡并一次下载一个文件 - 如何为选项卡提供所需的空间

在开始接近限制的传输之前关闭不相关的繁重选项卡,一次保持一项大型作业处于活动状态,并避免在保存操作开始之前清除结果。这些习惯会减少竞争,但不会提高编码最大值或保证在受限设备上取得成功。

当主机提供内容长度时,首先检查很有用,但缺失值意味着“未知”,而不是“小”。观察原始字节计数器,如果传输不是预期资产,则取消。取消会丢弃部分文件并释放读取器锁,而不是显示不完整的字节作为成功。及时保存还可以减少就绪 Blob 在页面状态下保持可达状态的时间,尽管 JavaScript 无法保证浏览器回收后备存储的确切时间。

这不包括什么 - 恢复损坏的下载、将文件分割成多个部分或超出设备容量的下载

此路径不会发出范围请求、恢复中断的传输、将输出拆分为多个部分、直接流式传输到用户选择的文件句柄或调度队列。尽管 HEAD 响应报告字节范围是否受支持,但下载程序不会将该建议结果转换为恢复行为。

超出保护范围的文件属于本机浏览器下载、允许的命令行客户端或其他授权的工作流程,该工作流程逐步写入而不保留 Blob 保存的整个结果。该选择与内存架构有关,而不是登录、CORS、DRM 或权限限制的解决方法。可恢复的客户端可能更适合不可靠的连接,但前提是文件源和授权允许该客户端访问相同的资源。

要点:显式保护和可用设备内存都很重要

准确的限制声明有两层:ToolAcre 默认拒绝超过 2 GiB,较小的传输仍然会受到浏览器可用资源的限制。 “无上传上限”描述的是缺少中继;它不是无限可下载大小的同义词。

对于合适的文件,块读取器提供真实的进度,AbortController 提供取消,Blob 创建提供可保存的结果。直接媒体下载器在直接主机到浏览器路由上保留字节,同时确认浏览器选项卡是有界工作区。应在传输开始之前一起规划这两个限制,尤其是在可用资源可能快速变化的托管笔记本电脑或移动设备上。