2013-07-24 39 views
5

Tôi ít bối rối ở đây. Do ArrayBuffer cấp phát vùng bộ nhớ mới cho nó? Nếu vậy, kích thước Blob tối đa an toàn để đặt trên đó là gì?Do ArrayBuffers có độ dài tối đa không?

+0

Tôi không chắc tôi hiểu tại sao bạn hỏi điều này ngay từ đầu. Bạn đã tìm thấy một vấn đề? Đối với giới hạn kích thước Blob, tôi không thể tìm thấy bất kỳ, vì vậy tôi nghĩ rằng nó có thể là vào bộ nhớ của máy tính của khách hàng và giới hạn tải lên của máy chủ. –

+0

Có, trên một thử nghiệm cơ bản, một cố gắng để phân bổ một bộ đệm lớn như 512MB (tôi thử nghiệm giới hạn) trong Firefox và nó chỉ bị rơi. – cavila

+0

Cũng cố gắng phân bổ một cái gì đó tương tự trên một biến đồng hồ tại thanh tra chrome và chrome crashing quá bây giờ khi tôi mở cửa sổ thanh tra. Mong trình duyệt khởi chạy một số loại lỗi như OUT_OF_MEMORY. Tôi quan tâm đến việc sử dụng các trình đọc tệp để xử lý các tệp lớn trên máy khách. Hiện tại tôi có thể tránh các sự cố bằng cách cắt đọc các tệp lớn (hình ảnh lớn) thành các bộ đệm nhỏ hơn. – cavila

Trả lời

4

Điều đó chỉ phụ thuộc vào hệ thống của bạn và có vẻ như không có giới hạn.

Theo the specification:

Nếu số yêu cầu của byte không thể được phân bổ một ngoại lệ được nâng lên.

+0

Tài liệu liên kết của bạn trỏ đến không chứa các từ bạn trích dẫn. Bạn có nghĩa là ["Nếu không thể tạo một Khối dữ liệu như vậy, hãy ném ngoại lệ của RangeError."] (Https://www.ecma-international.org/ecma-262/6.0/#sec-createbytedatablock)? – Daerdemandt

+0

@Daerdemandt Liên kết của tôi chỉ đến phiên bản "mới nhất" của các thông số, vì vậy tôi đoán nó đã phát triển, nhưng có, câu bạn trích dẫn giống như câu trả lời mới tương đương với câu trả lời của tôi. –

1

Tôi cũng đã tự hỏi mình cùng một câu hỏi. Dường như bộ đệm bị giới hạn bởi bộ nhớ hệ thống có sẵn và khả năng của GC của công cụ JavaScript cơ bản để xử lý một lượng lớn bộ nhớ. Bạn có thể dễ dàng kiểm tra nó cho nền tảng của bạn bằng cách tạo bộ đệm lớn trong giao diện điều khiển của trình duyệt của bạn và ở phía bên kia theo dõi quá trình của trình duyệt và dấu chân bộ nhớ tổng thể.

Tôi vừa quản lý để tạo bộ đệm lớn hơn 512MB trên Chrome 37. Tuy nhiên, tôi có 4GB bộ nhớ hệ thống để có thể dẫn đến sự cố sau khi phân bổ nhiều hơn. Tôi không quan tâm đến việc tìm điểm phá vỡ kể từ khi tôi tốt với phân bổ lên đến 100MB, nhưng bạn rõ ràng có thể kiểm tra nó một cách dễ dàng cho chính mình.

1

những gì sẽ là an toàn kích thước Blob tối đa để đưa vào nó

Có vẻ như không phải là một giới hạn cứng, chỉ cần bất cứ điều gì hạn chế nền tảng của bạn áp đặt.

Tuy nhiên, nếu sử dụng một số loại truy cập được lập chỉ mục, chỉ mục không được lớn hơn Number.MAX_SAFE_INTEGER, vì các lỗi thú vị sẽ xảy ra khác.

May mắn thay, 2^53-1 byte là khoảng 8 petabyte vì vậy nó không phải là mối quan tâm trừ khi bạn đang làm điều gì đó thực sự kỳ lạ.

Các vấn đề liên quan