12:29 Yappo: これ
12:30 Yappo: __PACKAGE__->load_components(qw/Plaggerize Autocall::InjectMethod/);
12:30 Yappo: を
12:30 Yappo: __PACKAGE__->load_components(qw/DisableDynamicPlugin Plaggerize Autocall::InjectMethod/);
12:30 Yappo: にしたら速くなるかも
ということでしてみたら盛大にテストがこけて吹いた。pluginの読み込み方が変わるんだな。ということで動くようにしよう。
Class::Component::Component::Plaggerize::PluginLoaderが
sub setup_plugins {
my $self = shift;
my @plugins;
my $plugin_list = $self->conf->{global}->{pluginloader}->{plugin_list};
for my $plugin (@{ $self->conf->{$plugin_list} }) {
push @plugins, { module => $plugin->{module}, config => $plugin };
}
$self->load_plugins(@plugins);
$self->NEXT( setup_plugins => @_ );
}
としていて、Class::Component::Component::Disableが
sub load_plugins {
my($class, @plugins) = @_;
return if ref($class);
Class::Component::Implement->load_plugins_default($class, @plugins);
for my $plugin (@plugins) {
Class::Component::Implement->_load_plugin($class, $plugin);
}
}
となっているので、$self->load_pluginsしていてさようならか。むむむ。まぁ、DisableDynamicPluginsって言ってる訳でそりゃそうだよな。
http://tech.yappo.jp/docs/soozycon2/ お。ここに。
ということで結局こんな感じでインスタンスを作る前にload_pluginsせよということでこうなった。 http://coderepos.org/share/changeset/19223
sub new {
my $class = shift;
my $args = $_[0];
my $config = $class->setup_config( $args->{config} );
my @plugins;
my $plugin_list = $config->{global}->{pluginloader}->{plugin_list};
for my $plugin (@{ $config->{$plugin_list} }) {
push @plugins, { module => $plugin->{module}, config => $plugin };
}
if (my $path = $config->{global}{plugin_path}) {
my $collect = Module::Collect->new(
path => $path,
pattern => '*.pm',
prefix => 'App::Hachero::Plugin',
);
$packages_from_plugin_path = $collect->modules;
}
$class->load_plugins(@plugins);
my $self = $class->SUPER::new(@_);
$self->result({});
$context = $self;
$self;
}
なんかもりもりコードコピペしてて恥ずかしいけど、まあこういうことみたい。インターフェイスも変えずに済んだのでテストもそのまま。あふぅ。 ほんで速くなったんだろうか。しらべよう。