Rose :: DB :: Object просто содержит (или ссылки из других модулей) гораздо больше кода, чем Class :: DBI . С другой стороны, он также имеет намного больше функций и намного быстрее во время выполнения , чем Class :: DBI. Если вас беспокоит время компиляции, тогда вам лучше всего загрузить как можно меньше кода (или получить более быстрые диски).
Другой вариант - установить auto_load_related_classes
в значение false в ваших объектах метаданных. Чтобы сделать это достаточно рано и глобально, вам, вероятно, потребуется создать подкласс Метаданные , а затем установить его как meta_class
в вашем общем Rose :: DB :: Object базовый класс.
Отключение auto_load_related_classes
означает, что вам придется вручную загружать связанные классы, которые вы на самом деле хотите использовать в своем скрипте. Это немного болезненно, но позволяет контролировать количество загружаемых классов. (Если у вас сильно взаимосвязанные классы, загрузка одного из них может привести к вытягиванию всех остальных.)
Возможно, вы могли бы иметь переменную окружения для управления поведением. Пример класса метаданных:
package My::DB::Object::Metadata;
use base 'Rose::DB::Object::Metadata';
# New class method to handle default
sub default_auto_load_related_classes
{
return $ENV{'RDBO_AUTO_LOAD_RELATED_CLASSES'} ? 1 : 0
}
# Override existing object method, honoring new class-defined default
sub auto_load_related_classes
{
my($self) = shift;
return $self->SUPER::auto_load_related_classes(@_) if(@_);
if(defined(my $value = $self->SUPER::auto_load_related_classes))
{
return $value;
}
# Initialize to default
return $self->SUPER::auto_load_related_classes(ref($self)->default_auto_load_related_classes);
}
А вот как это связано с базовым классом вашего общего объекта:
package My::DB::Object;
use base 'Rose::DB::Object';
use My::DB::Object::Metadata;
sub meta_class { 'My::DB::Object::Metadata' }
Затем установите для RDBO_AUTO_LOAD_RELATED_CLASSES
значение true, когда вы работаете в постоянной среде, и оставьте значение false (и не забудьте явно загрузить связанные классы) для сценариев командной строки.
Опять же, это поможет, только если в данный момент вы загружаете больше классов, чем вам строго необходимо в конкретном скрипте, из-за значения по умолчанию истинного атрибута auto_load_related_classes
Метаданные.