Производительность wkhtmltopdf

Мы намерены использовать wkhtmltopdf для преобразования html в pdf, но мы обеспокоены масштабируемостью wkhtmltopdf. Кто-нибудь знает, как он масштабируется? Наше веб-приложение потенциально может попытаться преобразовать сотни тысяч (releively complex) html, поэтому для нас важно иметь какую-то идею. Кто-нибудь получил информацию об этом?

Ответы

Ответ 1

Прежде всего, ваш вопрос довольно общий; есть много переменных, которые следует учитывать при запросе о масштабируемости любого проекта. Очевидно, что существует разница между преобразованием "сотен тысяч" HTML файлов в течение недели и ожиданием сделать это через день или час. В дополнение к этому "относительно сложный" HTML может означать разные вещи для других людей.

Я сказал, что, поскольку я сделал что-то похожее на это, конвертируя приблизительно 450 000 html файлов, используя wkhtmltopdf; Я бы поделился своим опытом.

Вот мой сценарий:

  • 450 000 файлов HTML
    • 95% файлов были одной длиной страницы
    • обычно содержит 2 изображения (относительный путь, локальная система)
    • табличные данные (иногда содержащие вложенные таблицы)
    • простая разметка в другом месте (сильная, курсив, подчеркивание и т.д.)
  • Запасной настольный ПК
    • ОЗУ 8 ГБ
    • Двухъядерный процессор 2.4 ГГц
    • 7200RPM HD

Я использовал простой однопоточный script, написанный на PHP, для итерации по папкам и передачи пути файла html к wkhtmltopdf. Процесс потребовал около 2,5 дней для преобразования всех файлов с минимальными ошибками.

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

Ответ 2

В моем опыте производительность сильно зависит от ваших фотографий. В нем много больших снимков, которые могут значительно замедлить. Если это вообще возможно, я постараюсь провести тест с оценкой того, какая загрузка будет для ваших серверов. Некоторые люди используют его для интенсивных операций, но я никогда не слышал о тысячах людей. Я думаю, что все, это зависит от вашего контента и ресурсов.

Следующая цитата прямо из списка рассылки wkhtmltopdf:

Я использую wkHtmlToPDF для конвертации около 6000 электронных писем в день в PDF. Все это сделанный на четырехъядерном сервере с памятью 4 ГБ... это еще более что.

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


Изменить: Добавив к этому, я просто повеселился с wkhtmltopdf. В настоящее время на Intel Centrino 2 с памятью 4 ГБ я генерирую PDF с 57 страницами контента (смешанные p, ul, table), ~ 100 изображений, а toc последовательно принимает < 7 секунд. Я также запускаю визуальную студию, браузер, http-сервер и другое другое программное обеспечение, которое может замедлить его работу. Я использую stdin и stdout непосредственно вместо файлов.

Ответ 3

Мы пытаемся использовать 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, вызванный кодом С#.

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

Ответ 4

wkhtmltopdf --print-media-type быстро вспыхивает. Но вы теряете нормальный стиль CSS с этим.

Это не может быть идеальным решением для экспорта сложных html-страниц. Но это сработало для меня, потому что мое содержание html довольно простое и в табличной форме.

Протестировано на версии wkhtmltopdf 0.12.2.1