Информация об изменениях

Сообщение Re[5]: base64 from js download as binary от 27.03.2023 14:33

Изменено 27.03.2023 14:35 Igorxz

Re[5]: base64 from js download as binary
Здравствуйте, vaa, Вы писали:
I>>странно. ну, у меня, вот такой код отрабатывает без ошибок. прям в консоли.
I>>
I>>const byteNumbers = new Array(Math.pow(2, 30))
I>>

I>>тему надо исследовать глубжее.
vaa>непонятно, размер логирую, не отличается от предыдущих порций
vaa>взял другой файл чуть большего размера, примерно в том же месте упало.
vaa>Переписал
vaa>
vaa>    var add = _base64ToArrayBuffer(data);
vaa>                for (let i = 0; i < add.length; i++) {
vaa>                    arr.push(add[i]);
vaa>                }
vaa>arr.push(...add); // <= вот так не работает при даже при data = 0.5МБ
vaa>


ну, собсно, сам ресурс оперативной памяти ограничен. это понятно. теперь нужно понять: а есть какое-то ограничение именно со стороны браузеров.
судя по докам — его явного нет.
тоесть, выделяя память вот так:
const byteNumbers = new Array(Math.pow(2, 30))

мы на самом деле ничего не выделяем. пока не начинаем лезть уже непосредственно к это памяти.
не забываем, что джаваскрипт в браузере — это хрен знает какой уровень абстракции. чем выше по абстракции — тем больше сюрпризов/зависимостей.
(в т.ч. поэтому на всяких а-ля сях всегда можно будет сделать то, что нельзя на джаваскриптах) вощем, долго писать))
вот так работает:
let finita_arrays = new Array(250*1024);
for (let i = 0; i < finita_arrays.length; i++) {
 let arr = new Array(1024);
 for (let j = 0; j < arr.length; j++) {
    arr[ j ] = j;
 }
 finita_arrays[i] = arr;
}
const blob = new Blob(finita_arrays, { type: 'x/z' });
console.log(blob.size/(1024*1024));

=>
978.759765625 (мб)

в пике вкладка хрома сжирает > 4GB. ну и ясно, что все это машино-индивидуально.
Re[5]: base64 from js download as binary
Здравствуйте, vaa, Вы писали:
I>>странно. ну, у меня, вот такой код отрабатывает без ошибок. прям в консоли.
I>>
I>>const byteNumbers = new Array(Math.pow(2, 30))
I>>

I>>тему надо исследовать глубжее.
vaa>непонятно, размер логирую, не отличается от предыдущих порций
vaa>взял другой файл чуть большего размера, примерно в том же месте упало.
vaa>Переписал
vaa>
vaa>    var add = _base64ToArrayBuffer(data);
vaa>                for (let i = 0; i < add.length; i++) {
vaa>                    arr.push(add[i]);
vaa>                }
vaa>arr.push(...add); // <= вот так не работает при даже при data = 0.5МБ
vaa>


ну, собсно, сам ресурс оперативной памяти ограничен. это понятно. теперь нужно понять: а есть какое-то ограничение именно со стороны браузеров.
судя по докам — его явного нет.
теперь дальше: выделяя память вот так:
const byteNumbers = new Array(Math.pow(2, 30))

мы на самом деле ничего не выделяем. пока не начинаем лезть уже непосредственно к это памяти.
не забываем, что джаваскрипт в браузере — это хрен знает какой уровень абстракции. чем выше по абстракции — тем больше сюрпризов/зависимостей.
(в т.ч. поэтому на всяких а-ля сях всегда можно будет сделать то, что нельзя на джаваскриптах) вощем, долго писать))
вот так работает:
let finita_arrays = new Array(250*1024);
for (let i = 0; i < finita_arrays.length; i++) {
 let arr = new Array(1024);
 for (let j = 0; j < arr.length; j++) {
    arr[ j ] = j;
 }
 finita_arrays[i] = arr;
}
const blob = new Blob(finita_arrays, { type: 'x/z' });
console.log(blob.size/(1024*1024));

=>
978.759765625 (мб)

в пике вкладка хрома сжирает > 4GB. ну и ясно, что все это машино-индивидуально.