#javascript #php #json #vue.js #ecmascript-6
#javascript #php #json #vue.js #ecmascript-6
Вопрос:
Огромные запросы сервера json: например, около 50 МБ — 100 МБ.
Из того, что я знаю, это может привести к сбою при загрузке огромных запросов данных в таблицу (я обычно использую datatables), результат: объем памяти достигает почти 8 ГБ, и сбой браузера. Chrome может не возвращать результат, Firefox обычно спрашивает, хочу ли я подождать или завершить процесс.
Я собираюсь начать работать над проектом, который будет отправлять запросы на огромные json-файлы, все сжатые (выполняемые серверной частью PHP). Цель моего отчета — извлечь данные и отобразить все в таблице, которую легко фильтровать и упорядочивать. Поэтому я не могу найти использование «отложенной загрузки» для этого конкретного случая.
На этот раз я мог бы использовать библиотеку данных vue-js (не уверен, какую конкретно).
-
Что именно использует так много моей памяти? Я точно знаю, что результат в формате json получен. Это рендеринг / синтаксический анализ json в DOM? (Пока я имею в виду пример с данными:https://datatables.net/examples/data_sources/ajax )
-
Каковы наилучшие методы в подобных ситуациях? Я начал исследовать эту проблему и заметил, что есть сообщения 2010 года, которые кажутся совсем не актуальными.
Комментарии:
1. ‘ Что именно использует так много моей памяти? ‘ — Мы не можем сказать наверняка, не увидев некоторый код, однако, обратите внимание на потенциальные утечки памяти (рекурсивные функции, запросы и т.д.). ‘ Каковы наилучшие методы в подобных ситуациях? ‘ — Вы могли бы попробовать разбить файлы?
2. вставка таблицы с данными из файла json, как упоминалось. пример: datatables.net/examples/data_sources/ajax
Ответ №1:
Размер HTTP-ответа не ограничен. Существует ограничение на другие вещи, такие как:
- локальное хранилище
- хранилище сеанса
- Кэш
- файлы cookie
- длина строки запроса
- объем памяти (в соответствии с ограничениями вашего процессора или выделением браузера)
Вместо этого проблема, скорее всего, связана с вашей реализацией вашего datatable. Вы не можете просто вставить 100 000 узлов в DOM и не ожидать какого-либо влияния на производительность. Кроме того, если datatable выполняет логику для каждого из этих данных по мере их поступления и обрабатывает их перед вставкой узла, это также будет большим отказом.
То, что вы здесь сделали, по сути, передает основную работу по разбиению на страницы с сервера клиенту, и с ужасными последствиями.
Если вам необходимо вернуть ответ такого размера, рассмотрите возможность использования одного из вариантов хранения, предоставляемых браузерами (несколько упомянутых выше). Затем разбейте сохраненный ответ JSON на страницы.
Комментарии:
1. Хранить переменные json в локальном хранилище / сеансе / кэше / файлах cookie? Это вообще возможно? Не могли бы вы, пожалуйста, добавить больше деталей? Я даже не знал, что это возможно.
2. @RickSanchez Уверен.
localStorage.setItem('key', 'value')
, тогдаlocalStorage.getItem('key')
выдастvalue
.3. Я начал изучать эту тему, сначала я прочитал о кэшировании объектной переменной (с помощью
localStorage
). Я понял, что не могу кэшировать объект размером более 2 МБ (я использую 50 МБ-100 МБ). Я не получил разрешения сохранять данные на локальном компьютере каким-либо постоянным способом или с помощью файлов cookie, поэтому файлы cookie не являются вариантом. и сохранение в памяти — это проблема, которой я пытаюсь избежать (сбои браузера). Что наиболее рекомендуется проверить в нашем? хранилище сеанса?4. @RickSanchez Если быть совсем откровенным, если ваша главная цель здесь — вставить все эти строки в таблицу и сделать это с разбиением на страницы на стороне клиента, то моя рекомендация
ag-grid
. По большому счету, это самая производительная таблица, с которой я сталкивался, и я вставил в таблицу абсолютную метрическую кучу строк, не испытывая слишком большого ухудшения качества.5. Tnx я думаю, что наткнулся на эту библиотеку, но супервайзер решил использовать
vuejs-datatable
по неизвестной причине… в любом случае, основная причина в том, что я загружаю огромный объем данных при входе в систему. и у меня есть несколько отчетов, в которых используются некоторые из этих данных. поэтому вместо того, чтобы загружать одни и те же данные несколько раз в разные отчеты (и это чертовски много данных), я предпочитаю загружать их все в разные переменные, а затем организовывать только то, что мне нужно в таблицах и диаграммах