[Catalyst] Chained actions usage and DBIC performance
Matt S Trout
dbix-class at trout.me.uk
Wed Nov 8 23:23:16 GMT 2006
Nilson Santos Figueiredo Junior wrote:
> Lately I've been using chained actions a lot, since it ends up making
> everything look cleaner and more organized.
>
> I tend to structure things in a way that I've got some Catalyst
> actions that load some items from the database which are the root of
> the chain and then I've got another set of Catalyst actions that
> actually do things with those loaded items (e.g. /item/12/view,
> /item/12/edit, and so on).
>
> Sometimes, those items also have subitems and those might even have
> another set of subitems. In these cases, when using Catalyst and
> DBIx::Class it can be useful to prefetch stuff for performance
> reasons. But, using my setup it's not currently possible to do that,
> so I end up issuing lots of queries to the database since the initial
> root item didn't prefetch anything, because it couldn't know in
> advance what would be needed by the chained actions.
>
> Most of the item loading code I've previously mentioned looks like
> this (simplified):
>
> sub load : Chained('/item') PathPart('') CaptureArgs(1) {
> my ($self, $c, $id) = @_;
my $pre = $c->stash->{prefetches} = {};
$c->stash->{item} = Scalar::Defer::lazy { $c->model('DB')->search(undef,
$pre)->find($id) };
> }
:)
--
Matt S Trout Offering custom development, consultancy and support
Technical Director contracts for Catalyst, DBIx::Class and BAST. Contact
Shadowcat Systems Ltd. mst (at) shadowcatsystems.co.uk for more information
+ Help us build a better perl ORM: http://dbix-class.shadowcatsystems.co.uk/ +
More information about the Catalyst
mailing list