效能最佳化指南
Pro:PDF 最佳化器
安裝
composer require nextpdf/pro
基本用法
use NextPDF\Pro\Optimizer\PdfOptimizer;
use NextPDF\Pro\Optimizer\ValueObjects\OptimizationProfile;
$optimizer = PdfOptimizer::create();
$optimized = $optimizer->optimize(
document: $document,
profile: OptimizationProfile::balanced(),
);
$optimized->save('/output/optimized.pdf');
// 取得最佳化統計
$stats = $optimized->optimizationStats();
echo "原始大小: {$stats->originalSizeFormatted()}\n";
echo "最佳化後: {$stats->optimizedSizeFormatted()}\n";
echo "壓縮率: {$stats->compressionRatioPercent()}%\n";
最佳化設定檔
| 設定檔 | 適用場景 | 預期壓縮率 |
screen() | 螢幕閱讀、電子郵件 | 60-80% |
ebook() | 電子書平台 | 40-60% |
balanced() | 通用用途(預設) | 30-50% |
print() | 辦公室列印 | 10-25% |
prepress() | 商業印刷 | 0-10% |
精細最佳化控制
use NextPDF\Pro\Optimizer\ValueObjects\ImageOptimizationConfig;
use NextPDF\Pro\Optimizer\ValueObjects\FontOptimizationConfig;
$optimized = $optimizer->optimize(
document: $document,
profile: OptimizationProfile::custom(
images: ImageOptimizationConfig::create()
->withJpegQuality(75)
->withDownsampleDpi(150)
->withConvertToJpeg(grayscale: true),
fonts: FontOptimizationConfig::create()
->withSubset(true)
->withDeduplication(true),
streams: true,
metadata: true,
),
);
Spectrum 加速引擎(Core)
啟用 Spectrum
use NextPDF\Core\Accelerator\SpectrumClient;
use NextPDF\Core\Accelerator\SpectrumConfig;
$spectrum = SpectrumClient::create(
config: SpectrumConfig::create()
->withBinaryPath('/usr/local/bin/nextpdf-spectrum')
->withMaxConnections(4)
->withCircuitBreakerThreshold(3),
);
$factory = DocumentFactory::create(
fontRegistry: $fontRegistry,
imageRegistry: $imageRegistry,
accelerator: $spectrum,
);
效能基準測試
電路中斷器
$config = SpectrumConfig::create()
->withCircuitBreakerThreshold(3) // 3 次失敗後開啟
->withCircuitBreakerTimeout(30_000) // 30 秒後嘗試恢復
->withFallbackEnabled(true); // 失敗時回退至純 PHP
Worker 模式效能
線性化(Web 最佳化)
use NextPDF\Core\Writer\Linearizer;
$linearized = Linearizer::create()->linearize(document: $document);
$linearized->save('/output/linearized.pdf');
記憶體使用最佳化
生產環境建議
延伸閱讀