@WD_KMS

Как отправить большой массив json по HTTP?

Есть запрос к API, который генерирует огромный массив данных и выдает "Allowed memory size of .. bytes exhausted" при работе обработчика. Необходимо в ответ передать эти данные в json. Как это возможно сделать в рамках одного запроса? Без увеличения memory_limit.
  • Вопрос задан
  • 389 просмотров
Решения вопроса 1
bigton
@bigton
Web-программист
Если не хватает памяти, то без выделения памяти никак не обойтись.

Допустим по /api/products/all вы хотите получить все товары магазина.

В таком случае реализация контроллера будет что-то типа "SELECT * FROM products > json_encode > response".
Если в вашем магазине миллион товаров, то уже на уровне запроса к БД будет исчерпан лимит памяти.
Как вариант, увеличивать лимит памяти именно под этот конкретный запрос.

Либо, можно попробовать отдавать частями по 1к позиций /api/products/all?offset=1000

Либо, можно раз в 5 минут в фоне запускать большой скрипт с максимальным кол-вом памяти, который будет выбирать все товары, сериализовать и класть в какой-то файл типа products_all.json и уже по запросу к /api/products/all выдавать этот файл (возможно выдавать ссылку на файл, чтобы переложить отдачу контента на nginx)
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
firedragon
@firedragon
Не джун-мидл-сеньор, а трус-балбес-бывалый.
Если так ставить вопрос, то запакуйте ваш запрос в zlib
https://github.com/nodeca/pako

И отправляйте на сервер
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы