Tt subtemplates-caching

14

description

 

Transcript of Tt subtemplates-caching

Page 1: Tt subtemplates-caching

Óñêîðåíèå îáðàáîòêè øàáëîíîâ

Template-ToolkitÈëè êýøèðîâàíèå ïîäøàáëîíîâ â TT

Âàëåðèé Ñòóäåííèêîâ,[email protected]

Èþíü 2010YAPC 2010

Page 2: Tt subtemplates-caching

Òÿæ¼ëûé ñàéò...

Page 3: Tt subtemplates-caching

Òîðìîçèò...

Çàïðîñû îáðàáàòûâàþòñÿ ìåäëåííî...

Document Length: 121170 bytes

Concurrency Level: 1...Requests per second: 6.55 [#/sec] (mean)Time per request: 152.677 [ms] (mean)

Page 4: Tt subtemplates-caching

Ðàçáèðàåìñÿ â ïðè÷èíàõ...

[debug] Rendering template "index.html"[info] Request took 0.155370s (6.436/s).--------------------------------------+-----------.| Action | Time |+--------------------------------------+-----------+| -> /_DISPATCH | 0.138753s || -> /_BEGIN | 0.005263s || /begin | 0.004580s || -> /_AUTO | 0.000968s || /auto | 0.000270s || -> /_ACTION | 0.000883s || /index | 0.000363s || -> /_END | 0.129827s || /end | 0.129265s || -> FrontOffice::View::TT->process | 0.128254s |'--------------------------------------+-----------'

Page 5: Tt subtemplates-caching

Êàê äåòàëèçîâàòü ïî ïîäøàáëîíàì?

Íàì ïîìîæåò ñòàòüÿ ¾Pro�ling in Template Toolkitvia overriding¿ by Randal L. Schwartz

package My::Template::Context;use base qw(Template::Context);

my @stack;my %totals;

sub process {my $self = shift;

my $template = $_[0];if (UNIVERSAL::isa($template, "Template::Document")) {

$template = $template->name || $template;}

push @stack, [time, times];

my @return = wantarray ?$self->SUPER::process(@_) :scalar $self->SUPER::process(@_);

my @delta_times = @{pop @stack};@delta_times = map { $_ - shift @delta_times } time, times;for (0..$#delta_times) {

$totals{$template}[$_] += $delta_times[$_];for my $parent (@stack) {$parent->[$_] += $delta_times[$_] if @stack; # parent adjust

}}$totals{$template}[5] ++; # count of calls

unless (@stack) {## top level again, time to display resultsprint STDERR "-- $template at ". localtime, ":\n";printf STDERR "%3s %3s %6s %6s %6s %6s %s\n",

qw(cnt clk user sys cuser csys template);for my $template (sort keys %totals) {

my @values = @{$totals{$template}};printf STDERR "%3d %3d %6.2f %6.2f %6.2f %6.2f %s\n",

$values[5], @values[0..4], $template;}print STDERR "-- end\n";%totals = (); # clear out results

}

# return value from process:wantarray ? @return : $return[0];

}

$Template::Config::CONTEXT = __PACKAGE__;

1;

Page 6: Tt subtemplates-caching

Ïðîôàéëèíã ïîäøàáëîíîâ

-- index.html at Thu Jun 10 18:20:56 2010:cnt clk user sys cuser csys template1 0.0056 0.0000 0 0 0 common/footer_common.inc1 0.0006 0.0000 0 0 0 common/header_topline.inc1 0.0006 0.0000 0 0 0 footer.inc1 0.0004 0.0000 0 0 0 footer_screen.inc1 0.0010 0.0000 0 0 0 header.inc1 0.0010 0.0000 0 0 0 header_screen.inc1 0.0187 0.0200 0 0 0 header_screen_body_cached.inc1 0.0005 0.0000 0 0 0 header_screen_head_cached.inc1 0.0015 0.0000 0 0 0 index.html1 0.0036 0.0000 0 0 0 index_body.inc1 0.0145 0.0200 0 0 0 index_promo_bar.inc1 0.0775 0.0800 0 0 0 print/zones.inc1 0.0004 0.0000 0 0 0 tabs.inc

Page 7: Tt subtemplates-caching

Ìîäóëü äëÿ êýøèðîâàíèÿ

use Template : : Context : : Cacheab le ;

Template : : Context : : Cacheab le : : c on f i gu r e_cach i ng (\&SRS : : Cache : : Memcached : : get ,\&SRS : : Cache : : Memcached : : put ,

) ;

$Template : : Context : : Cacheab le : : DEBUG = 1 ;

Page 8: Tt subtemplates-caching

Êàê ýòî âûãëÿäèò â øàáëîíàõ

index.html:

[% PROCESS index_reg_bar.inclang = langpricegroup = pricegroup__cache_time = -1

%]

Page 9: Tt subtemplates-caching

Êàê ýòî âûãëÿäèò â øàáëîíàõ

header_screen.inc:

[%- PROCESSheader_screen_body_cached.inc...__nocache_banner_no = banner_no__nocache_lang = lang__nocache_wide_flag = wide_flag__nocache_path_query = path_query__nocache_user_id = user_id__nocache_user_balance = user_balance...__nocache_req_method = c.req.method__cache_time = user_messages.size() ? 0 : -1

-%]

Page 10: Tt subtemplates-caching

Âðóáàåì êýøèðîâàíèå...

-- index.html at Thu Jun 10 18:52:04 2010:cnt clk user sys cuser csys template

1 0.0002 0 0 0 0 footer.inc CACHED1 0.0010 0 0 0 0 header.inc1 0.0005 0 0 0 0 header_screen.inc CACHED1 0.0015 0 0 0 0 index.html1 0.0002 0 0 0 0 index_body.inc CACHED1 0.0003 0 0 0 0 index_promo_bar.inc CACHED1 0.0004 0 0 0 0 print/zones.inc CACHED

-- end

Page 11: Tt subtemplates-caching

Âðóáàåì êýøèðîâàíèå...

[debug] Rendering template "index.html"[info] Request took 0.029016s (34.464/s).-------------------------------------+-----------.| Action | Time |+-------------------------------------+-----------+| -> /_DISPATCH | 0.014121s || -> /_BEGIN | 0.002807s || /begin | 0.002152s || -> /_AUTO | 0.000860s || /auto | 0.000276s || -> /_ACTION | 0.000884s || /index | 0.000370s || -> /_END | 0.007854s || /end | 0.007279s || -> FrontOffice::View::TT->process| 0.006267s |'-------------------------------------+-----------'

Page 12: Tt subtemplates-caching

Ðåçóëüòàò...

Server Hostname: www1.reg.ruServer Port: 80

Document Path: /Document Length: 121176 bytes

Concurrency Level: 1Time taken for tests: 9.524 secondsTotal transferred: 36445800 bytesHTML transferred: 36352800 bytesRequests per second: 31.50 [#/sec] (mean)Time per request: 31.746 [ms] (mean)Transfer rate: 3737.15 [Kbytes/sec] received

Page 13: Tt subtemplates-caching

Ðåçóëüòàò...

Óìåíüøèëè îáùåå âðåìÿ îáðàáîòêè çàïðîñà â 4.9ðàçà;

Óñêîðèëè îáðàáîòêó øàáëîíà â 20 ðàç;

Page 14: Tt subtemplates-caching

Ñïàñèáî!

Ìîäóëü Template::Context::Cacheable ëåæèò òóòhttps://svn.reg.ru/oss/Template-Context-Cacheable/