Tiếng Việt

Video và phụ đề · Direct Media Downloader

Mức độ tải xuống phương tiện lớn phù hợp với bộ nhớ trình duyệt: luồng, Blobs và giới hạn

· Cách thức hoạt động

lượt tải xuống hiệu suất trình duyệt

Các khối phương tiện tích lũy vào một trình duyệt bị giới hạn Blob bên cạnh thước đo bộ nhớ
Hình minh họa vector ToolAcre gốc

ToolAcre cho biết giới hạn kích thước là bộ nhớ thiết bị của bạn chứ không phải giới hạn tải lên. Bài đăng này giải thích ý nghĩa của việc tải xuống trực tiếp: cách đọc nội dung phản hồi, vị trí lưu trữ các byte và khi tab trình duyệt hết dung lượng.

Tệp có dung lượng vài gigabyte và quá trình tải xuống bị đình trệ giữa chừng — vấn đề do giới hạn bộ nhớ gây ra đối với quá trình tải xuống từ phía trình duyệt

Một bản ghi dài có thể tiến lên đều đặn và sau đó dừng lại vì quá trình lưu phía trình duyệt cần có chỗ cho các đoạn đã nhận và Blob đã hoàn thành. Chỉ riêng tỷ lệ phần trăm bị đình trệ không thể chẩn đoán được nguyên nhân: mạng có thể tạm dừng, máy chủ có thể đóng kết nối, quá trình hủy có thể kích hoạt hoặc quá trình có thể đạt tới áp suất bộ nhớ.

ToolAcre làm cho một ranh giới mang tính xác định. `downloadMedia` mặc định ở mức tối đa là 2 GiB và từ chối Độ dài nội dung được khai báo lớn hơn trước khi đọc nội dung. Nếu máy chủ bỏ qua hoặc đánh giá thấp tiêu đề đó, giới hạn tương tự sẽ được thực thi lại khi các khối đến, ngăn cản việc tích lũy không giới hạn. Giá trị được khai báo gần ranh giới cần được thận trọng vì quá trình tập hợp Blob, trạng thái trang và chi phí triển khai có thể yêu cầu nhiều tài nguyên hơn mức chỉ riêng tải trọng phản hồi gợi ý.

Cách đọc nội dung phản hồi: Các đoạn ReadableStream so với một bộ đệm lớn — trình duyệt đang làm gì trong khi tiến trình tăng dần

Tìm nạp hiển thị nội dung phản hồi dưới dạng ReadableStream khi trình duyệt cung cấp nội dung phản hồi. Quá trình triển khai nhận được một trình đọc, chờ đợi các khối, đếm từng `Uint8Array`, cập nhật tiến trình và lưu trữ các khối cho quá trình xây dựng Blob cuối cùng. Truyền phát thực hiện tiến trình và hủy bỏ chính hãng; nó không làm cho việc lưu trữ không đổi.

Khi Độ dài nội dung là giá trị hữu hạn dương, giao diện có thể hiển thị tổng số byte nhận được. Nếu không có nó, màn hình sẽ báo cáo số byte đã nhận được nhưng từ chối đưa ra tỷ lệ phần trăm. Nếu không tồn tại nội dung có thể đọc được, mã sẽ quay trở lại `response.blob()` và chỉ báo cáo kích thước cuối cùng. Mỗi đoạn được giữ lại giúp có thể lắp ráp sau này, trong khi thiết kế truyền phát đĩa thực sự sẽ cần một trình duyệt API khác, mô hình quyền và chiến lược xử lý lỗi không có ở đây.

Nơi Blob hoàn thiện hoạt động và tại sao không có lời hứa lưu trữ trình duyệt nào là an toàn

Blob được thu thập là một đối tượng trình duyệt biểu thị các byte bất biến có nhãn MIME. Thông số kỹ thuật không hứa hẹn liệu một trình duyệt cụ thể có giữ mọi byte sao lưu trong RAM, làm đổ một số dữ liệu hay sao chép bộ đệm trong quá trình tập hợp hay không. Do đó, hướng dẫn bài viết nên tránh yêu cầu về vị trí lưu trữ chung.

Điều ứng dụng chứng minh là nó giữ lại các tham chiếu đoạn cho đến khi luồng kết thúc, sau đó tạo một Blob và giữ nó ở trạng thái sẵn sàng cho tác vụ Lưu vào thiết bị của bạn. Bộ công việc đó cạnh tranh với trang và các tab khác, vì vậy các điều kiện của thiết bị và trình duyệt vẫn là những hạn chế thực tế dưới mức trần rõ ràng. Sự khác biệt đó là lý do tại sao tài liệu đặt tên cho áp lực tài nguyên thay vì hứa hẹn về hệ số nhân RAM cụ thể, ngưỡng tràn ổ đĩa hoặc kỹ thuật phân bổ phụ thuộc vào trình duyệt.

Tại sao không có giới hạn tải lên nhưng lại có trình bảo vệ tải xuống 2 GiB

Không có tệp nào được tải lên ToolAcre và không có chuyển tiếp nào nhận được phương tiện. GET di chuyển từ trình duyệt của khách truy cập tới máy chủ được cung cấp. Điều đó loại bỏ hạn ngạch tải lên máy chủ, nhưng không có nghĩa là "không giới hạn": nguồn thực thi mức tối đa hai gibibyte và yêu cầu các tác vụ lớn hơn sử dụng liên kết Lưu gốc thay thế.

Máy chủ có thể thông báo kích thước quá mức thông qua Độ dài nội dung, cho phép từ chối sớm. Nó cũng có thể phát trực tiếp mà không cần độ dài, trong trường hợp đó ToolAcre đếm các đoạn thực tế và dừng sau khi vượt quá giới hạn. Một phần byte không được cung cấp dưới dạng tải xuống bị cắt bớt sau lỗi này. Kiểm tra sớm và kiểm tra trực tuyến bao gồm các tiêu đề có độ dài trung thực và không có độ dài, trong khi tiêu đề nhỏ không chính xác chỉ được phát hiện khi phần thân được đo vượt qua cùng một mức trần.

Ví dụ hoạt động: một bản ghi bài giảng dài trên máy tính xách tay có giới hạn RAM — điều gì sẽ xảy ra và cách nhận biết áp lực bộ nhớ khi mạng ngừng hoạt động

Hãy tưởng tượng một tệp bài giảng trên máy tính xách tay đã chạy trình soạn thảo và nhiều tab. Đầu tiên nhấn Kiểm tra liên kết và so sánh kích thước đã nêu với tấm bảo vệ. Trong quá trình Tải xuống, các bản cập nhật byte ổn định không có tổng nghĩa là máy chủ đã bỏ qua độ dài có thể sử dụng; thay vào đó, một hàng yêu cầu bị đóng băng có thể hiển thị tạm dừng vận chuyển.

Áp suất bộ nhớ có thể ảnh hưởng đến tab ngay cả khi yêu cầu vẫn hoạt động nhưng ToolAcre không thể kiểm tra hệ điều hành và khai báo nguyên nhân. Các công cụ tác vụ của trình duyệt, chế độ xem bộ nhớ hệ thống và dòng thời gian yêu cầu cung cấp bằng chứng bổ sung. Việc thử lại một cách mù quáng có thể lặp lại nhu cầu phân bổ tương tự. Nếu yêu cầu kết thúc với trạng thái HTTP, trước tiên hãy điều tra phản hồi đó; áp lực bộ nhớ không phải là lời giải thích mặc định hữu ích cho mỗi lần truyền lớn bị gián đoạn.

Thói quen thực tế: đóng các tab khác và tải xuống từng tệp một - cách cung cấp cho tab khoảng trống cần thiết

Đóng các tab nặng không liên quan trước khi bắt đầu chuyển gần đến giới hạn, duy trì hoạt động một công việc lớn tại một thời điểm và tránh xóa kết quả cho đến khi hành động lưu bắt đầu. Những thói quen này làm giảm sự cạnh tranh nhưng không tăng mức tối đa được mã hóa hoặc đảm bảo thành công trên một thiết bị bị hạn chế.

Việc kiểm tra đầu tiên sẽ hữu ích khi máy chủ cung cấp Độ dài nội dung, tuy nhiên giá trị bị thiếu có nghĩa là “không xác định” chứ không phải “nhỏ”. Xem bộ đếm byte thô và hủy nếu việc chuyển giao không phải là nội dung dự kiến. Việc hủy sẽ loại bỏ một phần tệp và giải phóng khóa trình đọc thay vì hiển thị thành công các byte chưa hoàn chỉnh. Việc lưu kịp thời cũng làm giảm thời gian có thể truy cập Blob sẵn sàng ở trạng thái trang, mặc dù JavaScript không thể hứa hẹn thời điểm chính xác mà trình duyệt lấy lại bộ nhớ sao lưu.

Điều này không bao gồm những gì - tiếp tục tải xuống bị hỏng, chia tệp thành nhiều phần hoặc tải xuống vượt quá những gì thiết bị có thể chứa

Đường dẫn này không đưa ra các yêu cầu Phạm vi, tiếp tục quá trình truyền bị gián đoạn, chia đầu ra thành nhiều phần, truyền trực tiếp đến bộ xử lý tệp do người dùng chọn hoặc lên lịch xếp hàng. Mặc dù phản hồi HEAD báo cáo xem phạm vi byte có được hỗ trợ hay không nhưng trình tải xuống không chuyển kết quả tư vấn đó thành hành vi tiếp tục.

Các tệp nằm ngoài phạm vi bảo vệ thuộc về bản tải xuống trình duyệt gốc, ứng dụng khách dòng lệnh được phép hoặc một quy trình làm việc được ủy quyền khác ghi dần dần mà không giữ lại toàn bộ kết quả để lưu Blob. Lựa chọn đó là về kiến ​​trúc bộ nhớ chứ không phải giải pháp đăng nhập, CORS, DRM hoặc hạn chế quyền. Máy khách có thể nối lại có thể phù hợp hơn với các kết nối không đáng tin cậy, nhưng chỉ khi nguồn tệp và ủy quyền cho phép máy khách đó truy cập vào cùng một tài nguyên.

Takeaway: cả vấn đề bảo vệ rõ ràng và bộ nhớ thiết bị có sẵn

Tuyên bố giới hạn chính xác có hai lớp: ToolAcre từ chối nhiều hơn 2 GiB theo mặc định và các lần chuyển nhỏ hơn vẫn có thể bị hạn chế bởi tài nguyên sẵn có của trình duyệt. “Không có giới hạn tải lên” mô tả sự vắng mặt của rơle; nó không phải là từ đồng nghĩa với kích thước có thể tải xuống vô hạn.

Đối với các tệp phù hợp, trình đọc chunk cung cấp tiến trình trung thực, AbortController cung cấp tính năng hủy và tạo Blob cung cấp kết quả có thể lưu được. Direct Media Downloader giữ các byte trên tuyến trực tiếp từ máy chủ đến trình duyệt đồng thời thừa nhận rằng tab trình duyệt là một không gian làm việc bị giới hạn. Hai giới hạn này phải được lên kế hoạch cùng nhau trước khi bắt đầu truyền, đặc biệt là trên máy tính xách tay hoặc thiết bị di động được quản lý nơi tài nguyên sẵn có có thể thay đổi nhanh chóng.