Хотя Moose довольно долго работает во время запуска, что иногда делает его немного медленным, генерируемый им код, особенно такие, как средства доступа к атрибутам, как правило, немного быстрее, чем это может сделать обычный программист на Perl. написать. Поэтому, учитывая, что время выполнения вашего процесса довольно продолжительное, я сомневаюсь, что любые накладные расходы, вызванные Moose, будут актуальны.
Однако, из кода, который вы показали, я не могу точно сказать, что вы узкое место, хотя я твердо верю, что это не Moose. Я также хочу отметить, что выполнение __PACKAGE__->meta->make_immutable
, чтобы заявить, что ваш класс теперь "завершен", позволяет Moose провести дальнейшую оптимизацию, но все же я сомневаюсь, что это вызывает у вас проблемы.
Как насчет того, чтобы взять небольшую выборку ваших данных, чтобы ваша программа закончила в разумные сроки, и посмотрите на это в профилировщике, таком как Devel::NYTProf
. Это позволит вам определить, сколько именно времени в вашей программе тратится, поэтому вы можете оптимизировать именно эти части, чтобы получить максимально возможный выигрыш.
Одна из возможностей заключается в том, что используемые вами типы ограничений замедляют работу. На самом деле проверка атрибутов экземпляров как при каждом отдельном доступе к ним (или при создании экземпляров классов) - это не то, что обычно делают большинство программистов. Вы можете попробовать использовать более простые ограничения, такие как ArrayRef
вместо ArrayRef[Node]
, если вы достаточно уверены в достоверности ваших данных. Таким образом, будет проверяться только тип самого значения атрибута, а не значение каждого элемента в этой ссылке на массив.
Но, тем не менее, профилируйте свой код. Не угадай.