Мы собираемся использовать wkhtmltopdf для преобразования html в pdf, но нас беспокоит масштабируемость wkhtmltopdf. Кто-нибудь знает, как он масштабируется? Наше веб-приложение потенциально может попытаться преобразовать сотни тысяч (относительно сложных) html, поэтому нам важно иметь какое-то представление. У кого-нибудь есть информация по этому поводу?
Производительность wkhtmltopdf
Ответы (5)
Прежде всего, ваш вопрос довольно общий; есть много переменных, которые следует учитывать, когда вы спрашиваете о масштабируемости любого проекта. Очевидно, что есть разница между преобразованием «сотни тысяч» файлов HTML в течение недели и ожиданием сделать это за день или час. Кроме того, «относительно сложный» HTML может означать разные вещи для других людей.
При этом я подумал, что, поскольку я сделал что-то подобное, преобразовав примерно 450 000 html-файлов, используя wkhtmltopdf; Я бы поделился своим опытом.
Вот мой сценарий:
- 450,000 HTML files
- 95% of the files were one page in length
- обычно содержит 2 изображения (относительный путь, локальная система)
- табличные данные (иногда содержащие вложенные таблицы)
- простая разметка в другом месте (сильный, курсив, подчеркивание и т. д.)
- A spare desktop PC
- 8GB RAM
- Двухъядерный процессор с тактовой частотой 2,4 ГГц
- 7200 об/мин HD
Я использовал простой однопоточный скрипт, написанный на PHP, для перебора папок и передачи пути к файлу html в wkhtmltopdf. Процесс преобразования всех файлов занял около 2,5 дней с минимальным количеством ошибок.
Я надеюсь, что это даст вам представление о том, что вы можете ожидать от использования wkhtmltopdf в своем веб-приложении. Некоторые очевидные улучшения были бы достигнуты за счет запуска этого на более качественном оборудовании, но в основном за счет использования многопоточного приложения для одновременной обработки файлов.
По моему опыту, производительность во многом зависит от ваших фотографий. Если есть много больших изображений, это может значительно замедлить работу. Если это вообще возможно, я бы попытался провести тест с оценкой нагрузки на ваши серверы. Некоторые люди используют его для интенсивных операций, но я никогда не слышал о сотнях тысяч. Я думаю, как и все, это зависит от вашего контента и ресурсов.
Следующая цитата взята из списка рассылки wkhtmltopdf а>:
Я использую wkHtmlToPDF для преобразования около 6000 электронных писем в день в PDF. Все это делается на четырехъядерном сервере с 4 Гб памяти... этого более чем достаточно.
Есть несколько советов по повышению производительности, но я бы посоветовал проверить, в чем ваши узкие места, прежде чем оптимизировать производительность. Например, я помню, как кто-то сказал, что, если возможно, загрузка изображений непосредственно с диска вместо использования веб-сервера между ними может значительно ускорить процесс.
Изменить: добавив к этому, я просто повеселился, играя с wkhtmltopdf. В настоящее время на Intel Centrino 2 с памятью 4 ГБ я генерирую PDF-файл с 57 страницами контента (смешанный p, ul, table), ~ 100 изображений, а toc постоянно занимает ‹ 7 секунд. Я также использую визуальную студию, браузер, http-сервер и другое программное обеспечение, которое может замедлить его работу. Я использую stdin и stdout напрямую вместо файлов.
Редактировать: я не пробовал это, но если вы связали CSS, попробуйте встроить его в файл HTML (не забудьте выполнить тест до и после, чтобы правильно увидеть эффекты!). Улучшение здесь, скорее всего, зависит от таких вещей, как кеширование и где обслуживается CSS - если он читается с диска каждый раз или, не дай Бог, регенерируется из scss, это может быть довольно медленным, но если результат кешируется веб-сервером (я не думаю wkhtmltopdf кэширует что-либо между экземплярами), это может не иметь большого эффекта. YMMV.
wkhtmltopdf --print-media-type
быстро вспыхивает. Но при этом вы теряете обычный стиль CSS.
Это НЕ может быть идеальным решением для экспорта сложных html-страниц. Но это сработало для меня, потому что мое html-содержимое довольно простое и имеет табличную форму.
Проверено на версии wkhtmltopdf 0.12.2.1
Мы стараемся использовать wkhtmltopdf в любых реализациях. Мои объекты представляют собой огромные таблицы для сгенерированных координатных точек. Обычно объем моего pdf = 500 страниц
Мы пытаемся использовать порт wkhtmltopdf для .net. Результаты
- Pechkin - Pro: don't need other app. Contra: slow. 500 pages generated about 5 minutes
- PdfCodaxy - only contra: slow. Slower than pure wkhtmltopdf. Required installed wkhtmltopdf. Problems with non unicode text
- Nreco - only contra: slow. Slower than pure wkhtmltopdf. Required installed wkhtmltopdf. Incorrect unlock libs after use (for me)
Мы пытаемся использовать бинарный wkhtmltopdf, вызываемый из кода C#.
Pro: easy to use, faster that libs
Contra: need temporary files (cannot use Stream objects). Break with very huge (100MB+)html files as like as other libs
Вы можете создать собственный пул движков wkhtmltopdf. Я сделал это для простого варианта использования, вызывая API напрямую вместо того, чтобы каждый раз запускать процесс wkhtmltopdf.exe. API wkhtmltopdf не является потокобезопасным, поэтому сделать это непросто. Также не стоит забывать о совместном использовании нативного кода между AppDomains.
border-radius: 8px;
иborder-top-left-radius: 6px;
- person T. Brian Jones   schedule 01.09.2016