На данный момент у меня есть большое узкое место — создание PDF-файлов каждый раз, когда кто-то размещает заказ. Это не имеет большого значения для одного заказа, но когда их много за короткий промежуток времени, этот процесс очень медленный.
Файл PDF требует текстовой информации, QR-кода, штрих-кода, логотипа и 1 или более (до 20+) изображений шириной 1/4.
Текущий процесс с DOMPDF:
Новая мысль:
Теоретически это позаботится о изображениях QR и штрих-кода, но, тем не менее, остальные изображения делают его слишком медленным.
Делая это таким образом, без каких-либо изображений, кроме (QR и штрих-кода), PDF-файл может генерироваться за ~ 500 мс, но как только я начинаю добавлять изображения, он занимает до 2, 3, 4, 5+ секунд каждое.
При выполнении тестов и обработке ~ 10 тыс. Заказов (за несколько минут) он все еще обрабатывал PDF-файлы примерно через 12 часов, пока я просто не разочаровался.
PDF создается в отдельном процессе очереди, поэтому человеку не нужно ждать при оформлении заказа, но — тем не менее … им не может потребоваться более 5 часов, чтобы получить подтверждающий PDF во время большого трафика.
Вопросы / TLDR:
Как я могу ускорить процесс создания PDF-файлов с динамическим QR-кодом, динамическим штрих-кодом, динамическим текстом и 1-20 статическими изображениями (изображения одинаковы во всех PDF-файлах)?
Есть ли другие потенциальные вещи, о которых я не думал? Может быть, сделать шаблон PDF и каким-то образом использовать PHP, чтобы просто заполнить динамические места?
Я настоятельно рекомендую вам использовать библиотеку TCPDF. Это довольно быстро и может быть легко интегрировано в CakePHP. Вы можете найти много примеров того, как включить изображения, штрих-коды и QR-коды в PDF в примерах TCPDF. страница.
Для дальнейшего улучшения производительности используйте советы от этот страница:
Если это не повышает производительность до приемлемого уровня, вы можете установить приложение CakePHP (или просто скрипт, который запускает генерацию PDF-файлов, если он не использует CakePHP) на втором сервере с более доступными ресурсами и использовать этот сервер только для Генерация PDF.
Вы можете попробовать использовать JPEG вместо файлов PNG, если вам не нужна прозрачность.
Например, в TCPDF мне пришлось сгенерировать PDF с большим PNG в фоновом режиме (18см x 18см, 300 точек на дюйм). Мне пришлось ждать 11 секунд, прежде чем файл будет создан.
Я заменил изображение на JPEG такого же размера и DPI, и это заняло менее 1 секунды.
TCPDF также очень медленно работает с изображениями