Apache-CacheContent
view release on metacpan or search on metacpan
CacheContent.pm view on Meta::CPAN
# Capture regular print statements.
sub TIEHANDLE {
my ($class, $r) = @_;
return bless { _r => $r,
_data => undef
}, $class;
}
sub PRINT {
shift->print(@_);
}
1;
__END__
=head1 NAME
Apache::CacheContent - PerlFixupHandler class that caches dynamic content
=head1 SYNOPSIS
=over 4
=item * Make your method handler a subclass of Apache::CacheContent
=item * allow your web server process to write into portions of your
document root.
=item * Add a ttl() subroutine (optional)
=item * Add directives to your F<httpd.conf> that are similar to these:
=back
PerlModule MyHandler
# dynamic url
<Location /dynamic>
SetHandler perl-script
PerlHandler MyHandler->handler
</Location>
# cached URL
<Location /cached>
SetHandler perl-script
PerlFixupHandler MyHandler->disk_cache
PerlSetVar CacheTTL 120 # in minutes...
</Location>
=head1 DESCRIPTION
=over 15
=item Note:
This code is derived from the I<Cookbook::CacheContent> module,
available as part of "The mod_perl Developer's Cookbook"
=for html (see <a href="http://www.modperlcookbook.org">http://www.modperlcookbook.org</a>)
=back
The Apache::CacheContent module implements a PerlFixupHandler that
helps you to write handlers that can automatically cache generated web
pages to disk. This is a definite performance win for sites that end
up generating the exact same content for many users.
The module is written to use Apache's built-in file handling routines
to efficiently serve data to clients. This means that your code will
not need to worry about HTTP/1.X, byte ranges, if-modified-since, HEAD
requests, etc. It works by writing files into your DocumentRoot, so
be sure that your web server process can write there.
To use this you MUST use mod_perl method handlers. This means that
your version of mod_perl must support method handlers (the argument
EVERYTHING=1 to the mod_perl build will do this). Next you'll need to
have a content-generating mod_perl handler. If isn't a method handler
modify the I<handler> subroutine to read:
sub handler ($$) {
my ($class, $r) = @_;
....
Next, make your handler a subclass of I<Apache::CacheContent> by
adding an ISA entry:
@MyHandler::ISA = qw(Apache::CacheContent);
You may need to modify your handler code to only look at the I<uri> of
the request. Remember, the cached content is independent of any query
string or form elements.
After this is done, you can activate your handler. To use your
handler in a fully dyamic way configure it as a PerlHandler in your
F<httpd.conf>, like this:
PerlModule MyHandler
<Location /dynamic>
SetHandler perl-script
PerlHandler MyHandler->handler
</Location>
So requests to I<http://localhost/dynamic/foo.html> will call your
handler method directly. This is great for debugging and testing the
module. To activate the caching mechanism configure F<httpd.conf> as
follows:
PerlModule MyHandler
<Location /cached>
SetHandler perl-script
PerlFixupHandler MyHandler->disk_cache
PerlSetVar CacheTTL 120 # in minutes..
</Location>
Now when you access URLs like I<http://localhost/cached/foo.html> the
content will be generated and stored in the file
F<I<DocumentRoot>/cached/foo.html>. Subsequent request for the same
URL will return the cached content, depending on the I<CacheTTL> setting.
For further customization you can write your own I<ttl> function that
can dynamically change the caching time based on the current request.
=head1 AUTHORS
Paul Lindner E<lt>paul@modperlcookbook.orgE<gt>
Geoffrey Young E<lt>geoff@modperlcookbook.orgE<gt>
Randy Kobes E<lt>randy@modperlcookbook.orgE<gt>
=head1 COPYRIGHT
Copyright (c) 2001, Paul Lindner, Geoffrey Young, Randy Kobes.
All rights reserved.
This module is free software. It may be used, redistributed
and/or modified under the same terms as Perl itself.
=head1 SEE ALSO
The example mod_perl method handler C<CacheWeather>.
The mod_perl Developer's Cookbook
=for html <A href="http://www.modperlcookbook.org">http://www.modperlcookbook.org</a>
=head1 HISTORY
This code is derived from the I<Cookbook::CacheContent> module,
available as part of "The mod_perl Developer's Cookbook".
For more information, visit
http://www.modperlcookbook.org/
=cut
=cut
( run in 0.478 second using v1.01-cache-2.11-cpan-df04353d9ac )