2012-07-24 11 views
16

Intendiamo utilizzare wkhtmltopdf per convertire html in pdf ma siamo preoccupati per la scalabilità di wkhtmltopdf. Qualcuno ha idea di come scala? La nostra app web potrebbe potenzialmente tentare di convertire centinaia di migliaia di html (relativamente complessi), quindi è importante per noi avere qualche idea. Qualcuno ha qualche informazione su questo?Prestazioni di wkhtmltopdf

+0

arrotondati CSS Angoli stava causando il mio rende ad aumentare nel tempo da 20X. La rimozione di questi ha fatto cadere il mio rendering da ~ 6 secondi a ~ 0.3 secondi su una pagina HTML relativamente semplice. per esempio. 'border-radius: 8px;' e 'border-top-left-radius: 6px;' –

+0

Nel mio caso dopo un sacco di indagini, ho avuto l'url per il recupero di QRcode da parte di terzi che stava trattenendo la creazione dei miei ticket. – shareef

risposta

5

Nella mia esperienza le prestazioni dipendono molto dalle immagini. Ci sono molte immagini di grandi dimensioni che possono rallentare in modo significativo. Se possibile, proverei a mettere in scena un test con una stima di quale sarebbe il carico per i tuoi server. Alcune persone lo usano per operazioni intensive, ma non ho mai sentito parlare di centinaia di migliaia di persone. Credo che, come tutto, dipende dal contenuto e dalle risorse.

La seguente citazione è direttamente dalla wkhtmltopdf mailing list:

sto usando wkhtmltopdf per convertire circa 6000 e-mail al giorno in PDF. È tutto fatto su un server quadcore con memoria da 4 GB ... è ancora più che sufficiente per .

Ci sono alcuni suggerimenti sulle prestazioni, ma vorrei suggerire di provare quali sono i colli di bottiglia prima di ottimizzare le prestazioni. Ad esempio, ricordo una persona che dice che se possibile, caricare le immagini direttamente dal disco invece di avere un server web in mezzo può accelerarlo in maniera concreta.


Edit: In aggiunta a questo ho appena avuto un po 'di divertimento giocare con wkhtmltopdf. Attualmente su un Intel Centrino 2 con memoria da 4Gb generi PDF con 57 pagine di contenuto (misto p, ul, tabella), ~ 100 immagini e un toc prende in modo coerente < 7 secondi. Sto anche eseguendo Visual Studio, browser, server http e vari altri software che potrebbero rallentarlo. Io uso stdin e stdout direttamente invece dei file.


Edit: Non ho provato questo, ma se avete collegato CSS, provare incorporarlo nel file HTML (ricordarsi di fare un prima e dopo la prova per vedere gli effetti correttamente!). Il miglioramento qui molto probabilmente dipende da cose come il caching e dove viene servito il CSS - se viene letto da disco ogni volta o Dio non voglia rigenerato da scss, potrebbe essere piuttosto lento, ma se il risultato è memorizzato dal server web (non penso wkhtmltopdf memorizza nella cache qualsiasi cosa tra le istanze) potrebbe non avere grandi effetti. YMMV.

+1

PIÙ UNO per le immagini da disco al posto del server web in mezzo. L'ho appena testato e risparmiato il 70% del tempo di generazione! – np87

+1

Una cosa che aggiungerei a questa risposta è se hai collegato i CSS, dovresti provare a incorporarli nel file HTML. Ciò dovrebbe anche risparmiare un po 'di tempo. – xyres

+0

@xyres buona chiamata! Aggiunto – Nenotlep

18

Prima di tutto, la tua domanda è abbastanza generale; ci sono molte variabili da considerare quando si chiede la scalabilità di qualsiasi progetto. Ovviamente c'è una differenza tra la conversione di "centinaia di migliaia" di file HTML in una settimana e ci si aspetta di farlo in un giorno o un'ora. Oltre a questo HTML "relativamente complesso" può significare cose diverse per le altre persone.

Detto questo, ho pensato poiché ho fatto qualcosa di simile a questo, convertendo circa 450.000 file html, utilizzando wkhtmltopdf; Condividerei la mia esperienza

Qui è stato il mio scenario:

  • 450.000 file HTML
    • il 95% dei file erano una pagina di lunghezza
    • contenente generalmente 2 immagini (percorso relativo, sistema locale)
    • tabellare dati (a volte contenevano tabelle nidificate)
    • markup semplice altrove (forte, corsivo, sottolineato, ecc.)
  • Un desktop PC di riserva
    • 8GB di RAM
    • 2.4GHz Dual Core Processor
    • 7200RPM HD

ho usato un semplice script filettato unico scritto in PHP, per scorrere sopra le cartelle e passa il percorso del file html a wkhtmltopdf. Il processo ha richiesto circa 2,5 giorni per convertire tutti i file, con errori minimi.

Spero che questo ti dia un'idea di cosa puoi aspettarti dall'utilizzo di wkhtmltopdf nella tua applicazione web. Alcuni ovvi miglioramenti deriverebbero dall'esecuzione su hardware migliore, ma principalmente dall'utilizzo di un'applicazione multi-thread per elaborare i file simultaneamente.

+27

FYI per chi non ama fare matematica, che ha una media di 480 ms per doc –

+0

o 2 pagine al secondo. – xyres

2

Proviamo a utilizzare wkhtmltopdf in qualsiasi implementazione. I miei oggetti sono tabelle enormi per i punti di coordinate generati. Tipicamente volume del mio pdf = 500 pagine

Proviamo ad usare la porta di wkhtmltopdf su .net. I risultati sono

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

Proviamo ad usare il codice binario wkhtmltopdf richiamato dal codice 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

Per quanto riguarda NReco.PdfGenerator, non ho idea di come possa essere più lento del puro WkHtmlToPdf (internamente richiama WkHtmlToPdf.exe in un processo separato).Inoltre NON richiede WkHtmlToPdf installato: tutti i file sono incorporati nella DLL e estratti automaticamente se persi. –

3

wkhtmltopdf --print-media-type è estremamente veloce. Ma perdi il normale stile CSS con quello.

Questa potrebbe NON essere la soluzione ideale per l'esportazione di pagine HTML complesse. Ma ha funzionato per me perché i miei contenuti html sono piuttosto semplici e in forma tabellare.

verificata sulla Versione wkhtmltopdf 0.12.2.1