2012-07-24 13 views
16

Wir beabsichtigen, wkhtmltopdf verwenden, um HTML in PDF zu konvertieren, aber wir sind besorgt über die Skalierbarkeit von wkhtmltopdf. Hat jemand eine Idee, wie es skaliert? Unsere Web-App könnte möglicherweise versuchen, Hunderttausende (repelively complex) html zu konvertieren, deshalb ist es wichtig für uns, eine Idee zu haben. Hat jemand Informationen dazu?Leistung von wkhtmltopdf

+0

Abgerundete CSS Corners verursacht wurde meine macht von 20X in der Zeit zu erhöhen. Durch das Entfernen dieser Elemente wurde mein Rendering von ~ 6 Sekunden auf ~ 0,3 Sekunden auf einer relativ einfachen HTML-Seite gelöscht. z.B. 'border-radius: 8px;' und 'border-top-left-radius: 6px;' –

+0

In meinem Fall hatte ich nach vielen Untersuchungen QR-Code von einer Drittpartei zu holen, die gerade an der Erstellung meiner Tickets beteiligt war. – shareef

Antwort

5

In meiner Erfahrung hängt die Leistung sehr von Ihren Bildern ab. Es gibt viele große Bilder, die es deutlich verlangsamen kann. Wenn überhaupt, würde ich versuchen, einen Test mit einer Schätzung der Last für Ihre Server durchzuführen. Einige Leute benutzen es für intensive Operationen, aber ich habe noch nie von Hunderttausenden gehört. Ich schätze, alles hängt von deinen Inhalten und Ressourcen ab.

Das folgende Zitat ist gerade aus dem wkhtmltopdf mailing list:

ich wkhtmltopdf bin mit etwa 6000 E-Mails pro Tag zu PDF konvertieren. Es ist alles getan auf einem Quadcore-Server mit 4GB Speicher ... es ist sogar mehr als genug für das.

Es gibt ein paar Performance-Tipps, aber ich würde vorschlagen, zu testen, was ist Ihre Engpässe vor der Optimierung für die Leistung. Zum Beispiel erinnere ich mich an eine Person, die sagte, dass das Laden von Bildern direkt von der Platte, anstatt einen Webserver dazwischen zu haben, wenn möglich, dies beträchtlich beschleunigen kann.


Edit: dazu Hinzufügen Ich hatte gerade etwas Spaß mit wkhtmltopdf spielen. Derzeit auf einem Intel Centrino 2 mit 4 Gb Speicher erzeuge ich PDF mit 57 Seiten Inhalt (gemischt p, ul, Tabelle), ~ 100 Bilder und ein Toc dauert konsistent < 7 Sekunden. Ich betreibe auch Visual Studio, Browser, http-Server und verschiedene andere Software, die es verlangsamen könnte. Ich verwende stdin und stdout direkt anstelle von Dateien.


Edit: Ich habe nicht versucht, aber wenn Sie CSS verknüpft haben, versuchen Sie es in der HTML-Datei eingebettet ist (nicht vergessen, eine vor und nach dem Test zu tun, um die Effekte richtig zu sehen!). Die Verbesserung hier hängt wahrscheinlich von Dingen wie Caching ab und wo das CSS geliefert wird - wenn es jedes Mal von der Platte gelesen wird oder nicht von scss regeneriert wird, könnte es ziemlich langsam sein, aber wenn das Ergebnis vom Webserver zwischengespeichert wird (ich denke nicht wkhtmltopdf speichert alles zwischen Instanzen) es hat möglicherweise keine großen Auswirkungen. YMMV.

+1

PLUS ONE für die Bilder von Festplatte statt Webserver dazwischen. Ich habe es gerade getestet und 70% der Generationszeit gespart! – np87

+1

Eine Sache, die ich zu dieser Antwort hinzufügen würde, wenn Sie CSS verknüpft haben, sollten Sie versuchen, es in die HTML-Datei einzubetten. Das sollte auch etwas Zeit sparen. – xyres

+0

@xyres guten Ruf! Hinzugefügt – Nenotlep

18

Zunächst ist Ihre Frage ziemlich allgemein; Bei der Frage nach der Skalierbarkeit eines Projekts müssen viele Variablen berücksichtigt werden. Offensichtlich gibt es einen Unterschied zwischen der Umwandlung von "Hunderttausenden" HTML-Dateien über eine Woche und der Erwartung, dies an einem Tag oder einer Stunde zu tun. Darüber hinaus kann "relativ komplexes" HTML andere Dinge für andere Menschen bedeuten.

Das gesagt, ich dachte, seit ich etwas ähnliches getan habe, rund 450.000 HTML-Dateien konvertieren, mit wkhtmltopdf; Ich würde meine Erfahrung teilen.

war hier mein Szenario:

  • 450.000 HTML-Dateien
    • 95% der Dateien waren eine Seite lang
    • 2 Bilder (relativer Pfad, lokales System)
    • tabellarische allgemein enthält Daten (manchmal enthalten verschachtelte Tabellen)
    • einfaches Markup an anderer Stelle (stark, kursiv, unterstrichen usw.)
  • Ein Ersatz-Desktop-PC
    • 8GB RAM
    • 2,4 GHz Dual Core Prozessor
    • 7.200 HD

ich einen einfachen Single-Threaded-Skript in PHP geschrieben verwendet über iterieren die Ordner und übergeben Sie den HTML-Dateipfad an wkhtmltopdf. Der Vorgang dauerte etwa 2,5 Tage, um alle Dateien mit sehr geringen Fehlern zu konvertieren.

Ich hoffe, dies gibt Ihnen Einblick, was Sie von der Verwendung von wkhtmltopdf in Ihrer Webanwendung erwarten können. Einige offensichtliche Verbesserungen würden von der Ausführung auf besserer Hardware, aber hauptsächlich von der Verwendung einer Multithread-Anwendung, um Dateien gleichzeitig zu verarbeiten, kommen.

+27

FYI für alle, die nicht gerne Mathe, die durchschnittlich 480ms pro doc –

+0

oder 2 Seiten pro Sekunde tut. – xyres

2

Wir versuchen, wkhtmltopdf in jeder Implementierung zu verwenden. Meine Objekte sind riesige Tabellen für generierte Koordinatenpunkte. Normalerweise Volumen meiner pdf = 500 Seiten

Wir versuchen, Port von wkhtmltopdf zu .net zu verwenden. Ergebnisse sind

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

Wir versuchen, binary wkhtmltopdf zu verwenden, das von C# code aufgerufen wird.

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

In Bezug auf NRaco.PdfGenerator, ich habe keine Ahnung, wie es langsamer sein kann als reines WkHtmlToPdf (intern ruft es WkHtmlToPdf.exe in separaten Prozess auf).Außerdem ist WKHtmlToPdf nicht erforderlich. Alle Dateien werden in DLL eingebettet und automatisch extrahiert, wenn sie nicht gefunden werden. –

3

wkhtmltopdf --print-media-type ist blitzschnell. Aber damit verlieren Sie das normale CSS-Styling.

Dies ist möglicherweise keine ideale Lösung für komplexe HTML-Seiten exportieren. Aber es funktionierte für mich, weil meine HTML-Inhalte ziemlich einfach und in Tabellenform sind.

auf Version Getestet wkhtmltopdf 0.12.2.1