Генератор сертификатов для студентов: оптимизация скорости работы при пакетной генерации

Интро

Заказчик пришел с просьбой доделать генератор сертификатов. Генератор уже был создан, но работал неоптимально. Нужно было поправить весь флоу выдачи уникальных номеров для студентов, добавить множественный выбор студентов, добавление новых и тд.

На нашей стороне клиентская часть (фронтенд).

Итого, перед командой стояла задача: доработать и оптимизировать генератор сертификатов, который позволяет создавать документы на клиентской части как для одного студента, так и для группы студентов выбранного учебного потока. Основная цель — ускорить работу генератора и улучшить пользовательский опыт при массовой генерации документов.

Стартовые вводные

Генерация сертификатов происходила на клиентской стороне. Пользователь мог выбрать одного или нескольких студентов и инициировать генерацию документов, с последующей отправкой на сервер. Ранее генерация сертификатов проходила без каких-либо индикаций. Экран оператора зависал на несколько минут без признаков жизни. После чего появлялось уведомление о том, что документы сформированы и отправлены. Проблема заключалась в том, что при массовой генерации происходило:

  • Множественное обращение к серверу: на каждого студента отправлялся отдельный запрос, хотя большинство данных повторялись.
  • Полное отсутствие информирования пользователя о процессе генерации. Интерфейс после нажатия кнопки «Отправить документы» зависал на несколько минут, после истечения которых появлялось уведомление «Документы отправлены».
  • Медленная работа интерфейса из-за повторной отрисовки большого количества Canvas (особенности взаимодействия двух библиотек html2canvas + jsPDF).
  • Высокая нагрузка на сеть и сервер из-за множественных запросов.

План решения включал два этапа, о них далее.

Оптимизация клиент-серверного взаимодействия

Как решали технически:

1. Клиент-серверное взаимодействие:

Кол-во документов = кол-во запросов. Уточнили у бэкендеров, есть ли возможность массовой обработки файлов. Нам ответили «да, а разве сейчас не так отправляется!?».

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

2. Работа с преобразованием верстки в pdf:

В исходной реализации каждый сертификат отрисовывался отдельно, через html2canvas, что занимало значительное время при большом объёме документов. Плюс каждый Canvas создавался заново, что увеличивало нагрузку на браузер.

Решение:

Переработка html (vue) компонента с обычной версткой на canvas, который один раз инициализируется и далее используется повторно для каждого нового документа.

Минимизация перерисовок за счет передачи полей для заполнения документа по ссылке, что не приводило к ререндеру.

Результат: генерация PDF стала происходить почти мгновенно и без визуальных артефактов, даже при большом количестве студентов.

Мы гибкие и очень ответственные

Любим работать с малым и средним бизнесом, понимая ваши проблемы и задачи. Умеем четко и в сроки работать с крупными и сложными проектами.

Если у вас остались вопросы

Оставьте свой номер телефона и мы перезвоним вам и обсудим вашу задачу

Оставляя заявку, вы соглашаетесь с условиями политики конфиденциальности