2013-07-24 19 views
5

Sono un po 'confuso qui. Do ArrayBuffer assegna una nuova area di memoria per questo? In tal caso, quale sarebbe la dimensione massima sicura del BLOB da applicare?Do ArrayBuffers hanno una lunghezza massima?

+0

Non sono sicuro di capire perché lo chiedi in primo luogo. Hai trovato un problema? Per quanto riguarda il limite della dimensione di Blob, non sono riuscito a trovarne, quindi penso che potrebbe essere la memoria del computer del client e il limite di caricamento del server. –

+0

Sì, in un test di base, un tentativo di allocare un buffer di grandi dimensioni come 512 MB (I limiti di test) in Firefox e si è appena schiantato. – cavila

+0

Ho provato anche ad allocare qualcosa di simile su una variabile di controllo in chrome inspector e croma crollo anche ora quando apro il pannello di controllo. Mi aspettavo che i browser lanciassero qualche tipo di errore come OUT_OF_MEMORY. Sono interessato all'uso di lettori di file per elaborare file di grandi dimensioni sul client. Attualmente potrei evitare gli arresti anomali tagliando la lettura di file di grandi dimensioni (immagini enormi) in buffer più piccoli. – cavila

risposta

4

Questo dipende solo dal sistema in uso e non sembra esserci un limite.

Secondo the specification:

Se il numero richiesto di byte non può essere allocata un'eccezione viene sollevata.

+0

Il documento a cui punta il link non contiene parole che citi. Intendi ["Se è impossibile creare un blocco dati di questo tipo, genera un'eccezione RangeError."] (Https://www.ecma-international.org/ecma-262/6.0/#sec-createbytedlocklock)? – Daerdemandt

+0

@Daerdemandt Il mio link punta alla versione "più recente" delle specifiche, quindi suppongo che si sia appena evoluto, ma sì, la frase che citate suona come la nuova equivalente a quella della mia risposta. –

1

Mi stavo anche ponendo la stessa domanda. Sembra che il buffer sia limitato dalla memoria di sistema disponibile e dalla capacità del GC del motore JavaScript sottostante di gestire grandi quantità di memoria. Puoi testarlo facilmente per la tua piattaforma creando buffer di grandi dimensioni nella console del browser e dall'altra lato monitorando il processo del browser e l'ingombro di memoria complessivo.

Sono appena riuscito a creare buffer superiori a 512 MB su Chrome 37. Tuttavia, ho 4 GB di memoria di sistema, quindi potrebbe ovviamente causare un arresto anomalo dopo una maggiore allocazione. Non sono interessato a trovare punti di rottura dal momento che sto bene con allocazioni fino a 100 MB, ma puoi ovviamente testarlo facilmente per te stesso.

1

quale sarebbe la dimensione massima Blob sicuro per mettere su di esso

Non sembra essere un limite rigido, solo quello restrizioni vostra piattaforma impone.

Tuttavia, se si utilizza una sorta di accesso indicizzato, gli indici non devono essere maggiori di Number.MAX_SAFE_INTEGER, perché potrebbero verificarsi errori interessanti.

Fortunatamente, 2^53-1 byte è di circa 8 petabyte, quindi non è una preoccupazione se non si sta facendo qualcosa di veramente strano.

Problemi correlati