2012-07-24 1078 views
16

Tenemos la intención de utilizar wkhtmltopdf para convertir html a pdf, pero nos preocupa la escalabilidad de wkhtmltopdf. ¿Alguien tiene alguna idea de cómo se escala? Nuestra aplicación web podría intentar convertir cientos de miles de html (complejos) por lo que es importante que tengamos alguna idea. ¿Alguien tiene información sobre esto?Rendimiento de wkhtmltopdf

+0

redondeadas CSS esquinas estaba causando mi renders para aumentar en el tiempo por 20X. La eliminación de estos dejó caer mi representación de ~ 6 segundos a ~ 0.3 segundos en una página HTML relativamente simple. p.ej. 'border-radius: 8px;' y 'border-top-left-radius: 6px;' –

+0

En mi caso, después de mucha investigación, tenía url para buscar QRcode de un tercero que estaba sosteniendo la creación de mis tickets. – shareef

Respuesta

5

En mi experiencia, el rendimiento depende en gran medida de tus imágenes. Hay muchas imágenes grandes que pueden ralentizar significativamente. De ser posible, trataría de realizar una prueba con una estimación de cuál sería la carga para sus servidores. Algunas personas lo usan para operaciones intensivas, pero nunca he oído hablar de cientos de miles. Supongo que como todo, depende de tu contenido y recursos.

La siguiente cita es directamente de la wkhtmltopdf mailing list:

estoy usando wkhtmltopdf para convertir unos 6.000 correos electrónicos al día a PDF. Todo es hecho en un servidor quadcore con 4GB de memoria ... es incluso más que suficiente para eso.

Hay algunos consejos de rendimiento, pero le sugiero que pruebe cuáles son sus cuellos de botella antes de optimizar el rendimiento. Por ejemplo, recuerdo que alguna persona dijo que si era posible, cargar imágenes directamente desde el disco en lugar de tener un servidor web entre ellas puede acelerarlo de manera concisa.


Editar: Agregando a esto que acaba de tener un poco de diversión jugando con wkhtmltopdf. Actualmente en un Intel Centrino 2 con memoria de 4 Gb genero PDF con 57 páginas de contenido (mixto p, ul, tabla), ~ 100 imágenes y un toc toma consistentemente < 7 segundos. También estoy ejecutando Visual Studio, navegador, servidor http y varios otros programas que pueden ralentizarlo. Uso stdin y stdout directamente en lugar de archivos.


Editar: No he probado esto, pero si usted ha ligado CSS, tratar incrustarlo en el archivo HTML (recuerde hacer un antes y después de la prueba para ver los efectos correctamente!). La mejora aquí probablemente dependa de cosas como el almacenamiento en caché y dónde se sirve el CSS: si se lee desde el disco cada vez o Dios no lo permite regenerado desde scss, podría ser bastante lento, pero si el servidor web almacena en caché el resultado (no pienso wkhtmltopdf almacena en caché cualquier cosa entre instancias) podría no tener un gran efecto. YMMV.

+1

PLUS ONE para las imágenes del disco en lugar de servidor web en el medio. ¡Acabo de probarlo y ahorré el 70% del tiempo de generación! – np87

+1

Una cosa que agregaría a esta respuesta es que si ha vinculado CSS, intente incrustarlo en el archivo HTML. Eso también debería ahorrar algo de tiempo. – xyres

+0

@xyres buena llamada! Se agregó – Nenotlep

18

En primer lugar, su pregunta es bastante general; hay muchas variables a considerar al preguntar sobre la escalabilidad de cualquier proyecto. Obviamente, hay una diferencia entre convertir "cientos de miles" de archivos HTML en una semana y esperar hacerlo en un día o una hora. Además de ese HTML "relativamente complejo" puede significar cosas diferentes para otras personas.

Dicho esto, pensé que ya que he hecho algo similar a esto, convirtiendo aproximadamente 450,000 archivos html, utilizando wkhtmltopdf; Yo compartiría mi experiencia.

Aquí fue mi escenario:

  • 450.000 archivos HTML
    • 95% de los archivos eran una página de longitud
    • que contiene generalmente de 2 imágenes (ruta relativa, sistema local)
    • tabular datos (a veces contenían tablas anidadas)
    • marcado simple en otro lugar (fuerte, cursiva, subrayado, etc.)
  • Un escritorio repuesto PC
    • 8 GB de RAM Procesador
    • de 2,4 GHz de doble núcleo
    • 7200 HD

he usado un simple script de un solo subproceso escrito en PHP, para repetir las carpetas y pasa la ruta del archivo html a wkhtmltopdf. El proceso tomó aproximadamente 2.5 días para convertir todos los archivos, con errores mínimos.

Espero que esto le brinde información sobre lo que puede esperar al utilizar wkhtmltopdf en su aplicación web. Algunas mejoras obvias vendrían al ejecutar esto en un hardware mejor pero principalmente al utilizar una aplicación de subprocesos múltiples para procesar archivos simultáneamente.

+27

FYI para cualquier persona que no le gusta hacer cálculos matemáticos, que promedia a 480ms por doc –

+0

O 2 páginas por segundo. – xyres

2

Intentamos usar wkhtmltopdf en cualquier implementación. Mis objetos son tablas enormes para los puntos de coordenadas generados. Típicamente volumen de mi pdf = 500 páginas

Intentamos usar el puerto de wkhtmltopdf a .net. Los resultados son

- 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) 

Intentamos usar wkhtmltopdf binario invocado desde el código 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 
+1

En cuanto a NReco.PdfGenerator, no tengo idea de cómo puede ser más lento que WkHtmlToPdf puro (internamente invoca WkHtmlToPdf.exe en un proceso separado).Además, NO requiere WkHtmlToPdf instalado: todos los archivos están incrustados en la DLL y se extraen automáticamente si se pierden. –

3

wkhtmltopdf --print-media-type es blazing fast. Pero pierdes el estilo CSS normal con eso.

Esto NO es una solución ideal para la exportación de páginas html complejas. Pero funcionó para mí porque mis contenidos html son bastante simples y en forma de tabla.

probado en la versión wkhtmltopdf 0.12.2.1

Cuestiones relacionadas