Как в Yii2обеспечить текущую работу в соседних вкладках, если пользватель запустил «тяжелый» (долгий) запрос?
Yii2. Пользователь запускает отчет, который генерируется несколько минут. Пока формируется отчет в соседних вкладках работать невозможно, пока не отработает отчет. В другом браузере или в "инкогнито" параллельно всё работает.
Проблема не в нагрузке на сервере.
Может имеет смысл вынести эту операцию в фон? через очереди + оповещение "отчет сгенерирован, можно скачивать" после, чем держать долгое соединение? Это точно проблему уберет
И смотрели ли профайлер браузера, что по потреблению ресурсов вкладкой с отчетом?
vnpp, вариантов несколько
Если нет желания раздувать стек, то
1) оповещение на email, если в приложении уже есть такая практика (т.е flow - нажать кнопку - оповещение "отчет генерируется, и иконка "in progress", потом как готово - менять иконку на "ready" - и по клику скачивание, + уведомление на почту
2) либо без уведомления, просто иконку менять, после перезагрузки страницы (не очень user friendly)
если чуть раздуть стек - то:
3) уведомление по websockets (server push), выводить прям в браузер алертом. Либо даже скачивание инициировать - тогда визуально не поменяется процесс. Нажал, подождал, получил пуш из сокетов - начало качаться. Тут обязательно добавить fallback к пункту 2 (чтобы если страницу закрыл человек, или сбой сети - сгенерированный отчет можно было скачать после восстановления)
4) browser notifications через Notifications API с тем же откатом к сценарию 2
Если сессии хранятся в файлах, то перед началом тяжелого запроса закрывайте сессию, так как PHP не может открыть новую сессию, если не закрыта предыдущая