Вопрос

Я должен генерировать некоторые отчеты о различных типах файла (Excel, PDF, PNG), на основе входов веб -приложения. Приложение записано в PHP на Apache Webserver.

ATM, когда пользователи посещают раздел отчетов, они запускают событие, которое проверяет, есть ли представлены новые данные в базе данных, и на основе этой информации генерируются новые файлы отчетов. Это заставляет пользователя ждать, пока файлы не будут сгенерированы (3-10 секунд), что не является хорошим подходом, поэтому мне нужен какой-либо совет, который вы можете дать мне.

Это было полезно?

Решение

Конечно, это действительно зависит от вашего приложения и вашей системы, но, как правило, то, что я делаю, - это задание Cron, которая выполняет сценарий PHP для периодического генерации отчетов. Вывод может быть сохранен в файловой системе или в базе данных. Таким образом, мои отчеты генерируются только один раз (а не каждый раз, когда пользователь пытается загрузить их), и его генерируются только тогда, когда это необходимо (ваш сценарий может проверить, необходимо ли ему генерировать отчет на основе любых критериев изменения, которые у вас есть, или вы могли бы Просто установите его на то, чтобы периодически генерировать новые отчеты). Чтобы сохранить это действительно просто, просто позвоните своей текущей веб -странице с помощью Wget или Curl, и создайте новую страницу на вашем веб -сервере для загрузки сохраненных отчетов.

Единственная проблема с этим подходом заключается в том, что пользователи могут загрузить «устаревшие» отчеты (данные изменились, но отчеты не были обновлены). Если это действительно проблема, другой подход будет поддерживать сценарий PHP, работающий в фоновой проверке для модифицированных данных и при необходимости генерировать отчеты.

Другим подходом вы можете просто продолжать генерировать отчеты, когда ваши пользователи пытаются загрузить их, но кэшируйте результаты. Опять же, используя свои собственные критерии, специфичные для приложения, вы бы проверили, достаточно ли отчет к кэшированию достаточно для немедленной загрузки, или генерировать новый отчет и кэшировать его. Вы можете даже объединить это с первым подходом, периодически генерируя новые отчеты, но если пользователь пытается загрузить отчет, который устарел, сразу же генерировать новый (заставляет пользователя ждать 3-10 секунд).

В конечном итоге это зависит от вашей системы и вашего приложения.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top