Самый надежный способ создания «отчета», будь то изображение, PDF или любая последовательность байтов, которую браузер должен загрузить в ответ на действие пользователя, состоит в том, чтобы вернуть клиентский вызов RPCсразу с URL или токеном, по которому содержимое отчета будет доступно позже.Позже, в этом контексте, просто означает, что последующий запрос будет необходим для получения содержимого отчета, но шаблон хорошо масштабируется для использования в тех случаях, когда создание отчета может занять не тривиальное время.
- Клиент отправляет запрос RPC на сервер с параметрами отчета.
- Сервер добавляет параметры в очередь отчетов и отвечает некоторым токеном, который можно использовать для получения содержимого.отчета позже.
- Содержимое отчета генерируется в отдельном потоке или, возможно, на отдельном компьютере, если отчет требует больших вычислительных ресурсов.
- Если отчет гарантированно займет очень мало времени,завершено, он может быть сгенерирован немедленно, но в любом случае содержимое отчета должно быть записано в механизм хранения для последующего извлечения.
- (Опционально) Клиент опрашивает некоторую службучтобы определить, готов ли отчет.
- Клиент представляет отчет пользователю.
Если выбор идентификатора отчета является функцией параметров отчета и имеет стабильную семантику, вы можете получить кэширование иДедупликация работы без особых дополнительных усилий.
Что касается выбора использования data:
URL-адресов, то это имеет смысл, только если ваши пользователи используют современные браузеры и размер изображения крошечный.Это не подходит для общего случая.