Я полагаю, что проблема в вычислительных ресурсах или сценарий обрабатывает много данных из базы данных, поэтому попробуйте некоторые из этих подходов:
- Попробуйте разбить данные на страницы, попробуйте извлечь данные в более мелкие куски.
- Невозможно попытаться спрятать и переместить вычисление в другое место:
- Сначала загрузите html, а затем загрузите данные через ajax
- Попробуйте обработать данные в процедуре базы данных (quessing mysql, посмотрите https://dev.mysql.com/doc/refman/5.7/en/create-procedure.html)
- Создайте сервис с асинхронной связью, например, скрипт, который связывается с rabbit mq. Обработайте данные о сервисе и отправьте их обратно в основное приложение. В случае php вам может понадобиться другое приложение, которое поддерживает websockets и node.js для этой части.
- Попробуйте кэшировать данные, которые вычисляются не так часто. Например. при извлечении некоторых данных после обработки они кэшируют результат в mongodb, поэтому, если это не затронуто, сначала извлеките их из mongo и не пересчитывайте их.
- Рассмотрите возможность предварительного расчета как можно большего количества данных и сохраняйте их либо в реляционной базе данных (mysql postgresql), либо в нереляционной (mongodb, couchbase).
- Также некоторые части приложения пытаются использовать другие технологии помимо реляционных баз данных, чтобы сделать их эффективными (например, упругий поиск для поиска или neo4j для отображения отношений).
- Попробуйте разделить вычисления на более мелкие куски и либо с помощью триггеров db во время записи, либо выполнить их обновление. Альтернативный подход заключается в том, что при выполнении записи с использованием служб или самой логики записи выполняются вычисления меньшими частями.
Также ДО Делая что-либо выше, попытайтесь проанализировать, где код замедляется, сколько требуется для обработки данных и сколько данных извлекается.
Кроме того, в случае выполнения фонового процесса вам потребуются некоторые дополнительные данные и способ отслеживания процесса. Также вы можете запустить следующее:
<?php
system("php someheavyprocessingscript.php &");
//Load Html do some stuff here
?>
Через систему и окончание &
при выполнении команды вы запускаете процесс в фоновом режиме. Обычно я предпочел бы больше использовать сервисный подход и через некоторые веб-сокеты для извлечения результата во внешний интерфейс через соединение RabbitMq.
Также рассмотрите возможность прибегнуть к поиску и поиску следующих ключевых слов: xdebug-profiler
, service-oriented architecture
, это даст вам несколько советов о том, как ее решить + некоторые дополнительные знания.