Performance
TCPDF-Next è progettato per generazione documenti ad alta produttività. Questa pagina copre le ottimizzazioni integrate e best practice per ottenere il massimo dalla libreria.
Ciclo Vita Worker
graph TB
Boot["Boot: DocumentFactory"] --> Lock["Lock Registries"]
Lock --> Loop{"HTTP Request"}
Loop --> Create["factory.create()"]
Create --> Gen["Generate PDF"]
Gen --> Dispose["Dispose Document"]
Dispose --> LoopInizializzazione Lazy Sotto-Motori
La classe Document mantiene riferimenti a oltre 20 sotto-motori (Graphics, Typography, Barcode, Forms, Layers, ecc.), ma la maggior parte sono inizializzati lazy — vengono creati solo quando acceduti per la prima volta.
Un semplice PDF solo-testo non istanzierà mai il parser SVG, motore barcode o gestore campi form. Questo mantiene l'uso memoria proporzionale alle funzionalità che effettivamente usi.
Subsetting Font
Per impostazione predefinita, TCPDF-Next incorpora solo i glifi effettivamente usati nel documento. Il FontSubsetter analizza tutto il contenuto testo e rimuove glifi non usati da font TrueType/OpenType prima dell'incorporamento.
Questo può ridurre dati font da diversi megabyte a pochi kilobyte per documenti che usano un set caratteri piccolo.
use Yeeefang\TcpdfNext\Core\Document;
// Il subsetting font è attivo per impostazione predefinita — niente da abilitare
$pdf = Document::create()
->addPage()
->setFont('DejaVuSans', '', 12)
->cell(0, 10, 'Only these glyphs are embedded.');Compressione FlateDecode
Tutti gli stream contenuto sono compressi usando zlib (FlateDecode). Questo è abilitato per impostazione predefinita e richiede l'estensione PHP ext-zlib. La compressione tipicamente riduce dimensione file PDF del 60-80%.
Output Streaming (PdfWriterChunked)
Per documenti molto grandi, lo scrittore chunked flusha dati pagina finalizzati incrementalmente invece di tenere l'intero PDF in memoria. Questo è trasparente — gli stessi metodi save() e output() funzionano indipendentemente dalla dimensione documento.
use Yeeefang\TcpdfNext\Core\Document;
// Output streaming per documento grande
$pdf = Document::create();
$pdf->addPage()->setFont('Helvetica', '', 10);
for ($i = 0; $i < 5000; $i++) {
$pdf->cell(0, 5, "Row {$i}: data content here", newLine: true);
}
$pdf->save('large-document.pdf');
// Subsetting font e compressione FlateDecode avvengono automaticamenteStream Cross-Reference
TCPDF-Next usa stream cross-reference (PDF 1.5+) invece di tabelle xref tradizionali. Gli stream cross-reference sono essi stessi compressi, risultando in dimensioni file più piccole — specialmente per documenti con molti oggetti.
Linearizzazione (Fast Web View)
La linearizzazione riordina oggetti PDF così la prima pagina può essere visualizzata prima che l'intero file sia scaricato. Abilitala per qualsiasi PDF servito su HTTP:
use Yeeefang\TcpdfNext\Core\Document;
$pdf = Document::create()
->setLinearization(true)
->addPage()
->cell(0, 10, 'Progressive rendering in the browser')
->save('web-optimized.pdf');Il Linearizer inserisce stream hint che dicono ai visualizzatori come fetchare pagine on demand.
Limite Pagine
La costante Document::MAX_PAGES predefinita è 10,000 pagine. Questa è una guardia sicurezza contro loop infiniti durante generazione. Puoi sovrascriverla estendendo la classe se il tuo caso d'uso richiede di più.
Best Practice
Riusa Istanze Font Attraverso Pagine
Imposta il font una volta e lascia che si porti attraverso pagine. Evita chiamare setFont() su ogni pagina a meno che il font effettivamente cambi:
$pdf = Document::create()
->setFont('Helvetica', '', 10);
for ($i = 0; $i < 100; $i++) {
$pdf->addPage()
->cell(0, 5, "Page {$i} content");
}Usa Template (XObject) per Contenuto Ripetuto
Se ogni pagina ha la stessa intestazione, piè di pagina o watermark, crealo una volta come template e timbralo su ogni pagina. Questo memorizza il contenuto come singolo oggetto PDF referenziato multiple volte, piuttosto che duplicarlo.
Abilita Compressione
La compressione è attiva per impostazione predefinita. Non disabilitarla a meno che non debba ispezionare stream PDF grezzi per debugging.
Usa Output Streaming per Documenti Grandi
Per documenti che superano poche centinaia di pagine, output streaming mantiene uso memoria costante indipendentemente dal conteggio pagine.
Subset Font
Il subsetting font è attivo per impostazione predefinita. Assicura di non disabilitarlo in produzione — incorporamento font completo può aggiungere megabyte alla dimensione file.
Minimizza Scope Transazione
Le transazioni memorizzano uno snapshot documento completo. Mantienile di breve durata per evitare di raddoppiare uso memoria. Vedi Transazioni per dettagli.
Riepilogo
| Funzionalità | Predefinito | Impatto |
|---|---|---|
| Subsetting font | Attivo | Font più piccoli (KB vs MB) |
| Compressione FlateDecode | Attiva | Stream 60-80% più piccoli |
| Stream cross-reference | Attivi | Dati xref più piccoli |
| Inizializzazione lazy | Attiva | Memoria proporzionale a funzionalità usate |
| Output streaming | Automatico | Memoria costante per documenti grandi |
| Linearizzazione | Disattiva | Abilita per PDF consegnati web |