Столкнулся с зависанием приложения на Electron, когда стал передавать через ipcRenderer массив размером 1,5Мбайт. Приложение просто клинится. Дебаг в Visual Studio Code залипает. Никакого исключения не выбрасывается.
Перечитал документацию на ipcMain, ipcRenderer, EventEmitter, - нигде нет ничего про ограничение. Гугление не помогло. Это баг, или где-то всё таки написано про ограничение?
-----
Видимо придётся резать массив на куски и пихать их поотдельности, но и тогда суммарный размер "пакета" будет разниться от раза к разу, плюс всё это оборачивается самим ipcRenderer-ом в JSON-строку с непредсказуемой конечной длиной.
UPD.
После аналогичной проблемы с массивами провёл тесты. Как видно, переполнение стека возникает не от общего объёма данных, а от их количества.
// количество элементов, размер элемента
function test(itemsCount, itemSize) {
const str = '1'.repeat(itemSize)
let arr2 = []
let i = itemsCount
while (i--) {
arr2.push(str)
}
let arr1 = []
Array.prototype.push.apply(arr1, arr2)
}
// test(1000000000, 100) // 100.000.000.000 - 1 млрд * 100 - просто закрывается без ошибки
// test(100000000, 100) // 10.000.000.000 - 100 млн * 100 - зависает, потом просто закрывается без ошибки
// test(10000000, 100) // 1.000.000.000 - 10 млн * 100 - вылетает окно о переполнении стека
// test(1000000, 100) // 100.000.000 - 1 млн * 100 - вылетает окно о переполнении стека
// test(100000, 100) // 10.000.000 - 100 тыс * 100 - ok
// test(10000, 1000) // 10.000.000 - 10 тыс * 1000 - ok
// test(100000, 1000) // 100.000.000 - 100 тыс * 1000 - ok !
// test(100000, 10000) // 1.000.000.000 - 100 тыс * 10.000 - ok !
// test(100000, 100000) // 10.000.000.000 - 100 тыс * 100.000 - ok !
// test(100000, 1000000) // 100.000.000.000 - 100 тыс * 1.000.000 - ok !