3,6 миллиона строк. Предположим, что каждая строка содержит 128 байт данных, что составляет 460 800 000 байт - 439 МБ необработанных данных, которые вы пытаетесь выбрать, что не звучит очень плохо. Но эти данные будут обернуты в объекты / модели / превращены в json, так что ваше требование к памяти получается, по крайней мере, примерно в десять раз. 4.3Гб .
Хорошо, все еще не так уж плохо. Теперь нам нужно добавить sh в браузер, стилизовать его, обернуть в html, json и c ... Мы собираемся сделать pu sh примерно 1.4GB в json клиенту. клиент скачивает счастливо. json находится в браузере. Это превращается в объект. Памяти раз 4 примерно. 5.6GB . Не слишком потрепанный, но браузер справится, потому что у него есть ограничение памяти 256 МБ на вкладку ( Я сталкивался с этим при кодировании игры, будет варьироваться в зависимости от браузера ).
Но допустим, что это собственный неограниченный браузер, который может просто сделать это Итерация по json и создание электронной таблицы, такой как отображение, создание всех узлов DOM, присоединение их к дереву DOM, присоединение обработчиков событий и т. Д. c .. Время памяти 20: 112GB .
Таким образом, у клиента есть большая игровая установка с невероятным количеством оперативной памяти, браузер, который может обрабатывать адресные пространства, и операционная система. с этим можно справиться. Теперь вы попадаете на забавную территорию пейджинга. ОС должна постраничать в этой оперативной памяти, потому что слишком много остается неиспользованным, а ОС имеет задачи с более высоким приоритетом для запуска, пока пользователь смотрит на экран. Никакая микросекунда не остается неизрасходованной. Пишите в dis c, читайте из dis c при каждой прокрутке, убивая жесткий диск вашего клиента.
Короче говоря, браузер не допустит этого, потому что у него есть ограничение памяти. Объясните вашему клиенту, что он хочет, требует настраиваемой ОС, настраиваемого браузера, настраиваемого компьютера и все равно будет медленным из-за ограничений процессора
Просто делайте то, что делает Google Docs, загружайте по мере необходимости. Когда пользователь прокручивает, загружает необходимые данные дисплея, не больше и не меньше, и выгружает данные, которые не отображаются на экране, в течение 5 минут, чтобы оставаться ниже предела 256MB . Когда у вас есть готовый запрос, это просто вопрос установки смещения и ограничения количества результатов, которые вы хотите. Все остальное работает так же.
Реальный мир имеет ограничения, а ваши клиенты не желают. Приведите их в равновесие.