Советы по ускорению CAM::PDF при добавлении более 1000 файлов?

CAM::PDF от Chris Dolan был феноменальным активом для меня. Недавний проект требует объединения более 1000 небольших PDF-файлов в один большой файл.

Все хорошо до тех пор, пока количество страниц не превысит 200, и в этот момент оно начнет замедляться. В конце концов, добавление каждого дополнительного файла занимает около 30 секунд.

Я использую следующий код после каждого добавления, надеясь очистить кеш, чтобы ускорить процесс:

if ($PDF->needsSave()) { $PDF->cleansave() }

Я уже уменьшил каждый из маленьких файлов PDF до 45 КБ каждый.

Если не считать обновления сервера, есть ли что-то еще, что я должен сделать на стороне кодирования, чтобы увидеть улучшения в скорости?

Заранее спасибо!

1 ответ

Крис Долан здесь. Я никогда не пробовал использовать CAM::PDF в таком масштабе, но я тестировал с небольшим PDF размером 100 КБ и не смог воспроизвести замедление. Я проверил с этой маленькой программой:

use warnings;
use strict;
use CAM::PDF;

my $file = shift;
my $in = CAM::PDF->new($file) or die;

for my $i (0..1000) {
   print "$i\n";
   $in->appendPDF(CAM::PDF->new($file));
}

и добавление 1000-го файла заняло примерно столько же времени, сколько и первый. Может быть, есть некоторые детали ваших конкретных PDF-файлов, которые вызывают патологическое поведение в библиотеке? Без дополнительной информации это действительно сложно сказать.

Возможно, проблема в том, что у вас не хватает памяти и копий, но, поскольку PDF-файлы такие маленькие, я бы об этом не подумал. Я полагаю, вы пробовали с и без cleansave()? Как говорит @zdmi, объединение их в двоичное дерево может помочь ускорить некоторые из ранних объединений, но объединение последних нескольких узлов может быть очень медленным.

Другие вопросы по тегам