Skip to content

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

mermaid
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 --> Loop

Inizializzazione 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.

php
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.

php
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 automaticamente

Stream 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:

php
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:

php
$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.

FunzionalitàPredefinitoImpatto
Subsetting fontAttivoFont più piccoli (KB vs MB)
Compressione FlateDecodeAttivaStream 60-80% più piccoli
Stream cross-referenceAttiviDati xref più piccoli
Inizializzazione lazyAttivaMemoria proporzionale a funzionalità usate
Output streamingAutomaticoMemoria costante per documenti grandi
LinearizzazioneDisattivaAbilita per PDF consegnati web

Rilasciato sotto licenza LGPL-3.0-or-later.