Schrift
[thread]11567[/thread]

HTC-Snob-Fragen



<< |< 1 2 >| >> 15 Einträge, 2 Seiten
Froschpopo
 2008-04-03 11:42
#107785 #107785
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
Wie cached ihr eigentlich HTML::Template::Compiled-Templates?
Wie muss dann so ein startup.pl aussehen?
Ich möchte die nämlich vorher auch kompilieren, komme aber in der Doku völlig durcheinander...

Fragen:
- Wenn ich die Templates precomile, muss ich sie dann überhaupt noch cachen?

- wenn ich sie nur cachen will, brauche ich dann auch ein startup.pl?

- was genau ist cache_dir? Ein Alias für einen imaginären Ordner auf den ich aber dann hinterher über -filename zugreifen kann?

- es heisst, dass HTC bei einigen Dingen nicht ganz so schnell ist bzw. nicht schneller als HT. Wovon ist hier die Rede?

- Wenn in test.html ein <TMPL_INCLUDE> stattfindet, wird letzteres dann in die test.html richtig eingebunden oder findet nur eine "Verlinkung" statt?
Beispiel: Wenn ich 100 mal in test.html andere Dateien include, wird dann die binäre test.html auch um die 100 Dateien größer?

Entschuldigt bitte meine Fragen, aber die ganzen preload(), precompile(), cache's machen mich ganz fusselig.
pq
 2008-04-03 14:11
#107796 #107796
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
Froschpopo+2008-04-03 09:42:51--
Wie cached ihr eigentlich HTML::Template::Compiled-Templates?
Wie muss dann so ein startup.pl aussehen?
Ich möchte die nämlich vorher auch kompilieren, komme aber in der Doku völlig durcheinander...

eine startup.pl:
my $preloaded = HTML::Template::Compiled->preload('/path_to_cache');
du willst wahrscheinlich nicht precompile benutzen, nur preload. precompile kann nur in
wenigen fällen nützlich sein.
Quote
- Wenn ich die Templates precomile, muss ich sie dann überhaupt noch cachen?

wie gesagt, precompile willst du gar nicht benutzen. cachen solltest du immer, wenn möglich.
auch wenn der memory-cache an ist, sollten z.b. neue apache-prozesse nicht neu compilieren
müssen, sondern auf den file-cache zurückgreifen. und genau das macht preload.

Quote
- wenn ich sie nur cachen will, brauche ich dann auch ein startup.pl?

häh? wie, nur cachen?

Quote
- was genau ist cache_dir? Ein Alias für einen imaginären Ordner auf den ich aber dann hinterher über -filename zugreifen kann?

ein echtes verzeichnis auf deinem rechner, in das die kompilierten templates von HTC abgelegt werden.

Quote
- es heisst, dass HTC bei einigen Dingen nicht ganz so schnell ist bzw. nicht schneller als HT. Wovon ist hier die Rede?

ohne jeden cache ist HTC weitaus langsamer als alle anderen template-systeme.
mit file-cache ist es zwar auch noch das langsamste, aber folgt mit sehr kurzem abstand hinter
template-toolkit.
in beiden fällen ist das jedoch meist nicht so tragisch, da man ohne memory-cache meist nur
arbeitet, wenn man CGI nutzt und kein mod_perl z.b. und wenn man CGI nutzt, dauert das laden
des skriptes sowieso so lange, dass das verarbeiten eines templates da nicht viel ausmacht.

also: ohne memory-cache ist HTC langsam, mit memory-cache ist es je nach template und optionen
sogar genauso schnell wie HTML::Template::Pro (in C geschrieben).

Quote
- Wenn in test.html ein <TMPL_INCLUDE> stattfindet, wird letzteres dann in die test.html richtig eingebunden oder findet nur eine "Verlinkung" statt?
Beispiel: Wenn ich 100 mal in test.html andere Dateien include, wird dann die binäre test.html auch um die 100 Dateien größer?

nein, jedes include ist ein eigenes objekt und wird auch im file cache als eigene datei gespeichert.
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
Froschpopo
 2008-04-03 16:16
#107805 #107805
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
achso ist das! Erstmal danke für die ausführliche Erklärung :)
also wenn HTML::Template::Compiled->preload('/srv/www/tuxen/templates') schon genügt, hab ich mir das alles wieder mal zu kompliziert vorgestellt.
Aber wie kann ich eigentlich prüfen, ob die Dateien wirklich geladen sind?

Und nochetwas verstehe ich nicht:
Note: the directory is *not* the template directory. It should be the directory which you give as the cache_dir option.

Wenn das der ordner ist wo die Dateien hingelegt werden, woher weiss preload welche Dateien ich dort haben möchte?
Ich finde leider nirgens ein Beispiel.
pq
 2008-04-03 16:34
#107809 #107809
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
dein template-verzeichnis ist '/var/templates'. dein cache-dir ist '/var/htc_cache'.
wenn du nun ein HTC objekt erstellst mit file_cache => 1, file_cache_dir => '/var/htc_cache'
wird dort das kompilierte template abgelegt (plus includes).
wenn du dann preload() aufrufst, nimmt sich preload() alle kompilierten templates aus
'/var/htc_cache' und tut sie in den memory-cache.

d.h. wenn du deine applikation zum ersten mal aufrufst, und nur eine seite davon, ist auch
nur ein bruchteil der templates im cache-dir abgelegt. dann werden auch nur diese vorgeladen.
somit empfiehlt es sich, regelmässig den apache neu zu starten (1mal pro tag z.b.), damit
irgendwann alle templates im memory-cache vorgeladen sind.

preload() liefert als rückgabewert die anzahl der vorgeladenen templates.
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
Froschpopo
 2008-04-03 17:02
#107814 #107814
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#!/usr/bin/perl

use warnings;
use strict;
use HTML::Template::Compiled;
use File::Find;

print STDERR "Pre-loading HTML Templates...\n";

my $cache_dir = '/var/htc_cache';
my $htc = HTML::Template::Compiled->new(
path => '/srv/www/tuxen/templates',
file_cache => 1,
file_cache_dir => $cache_dir,

);

my $count_templates = $htc->preload($cache_dir);

print STDERR "$count_templates successfull loaded\n";

1;

ich steig da nicht durch!
pq
 2008-04-03 17:20
#107818 #107818
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
du musst *nur* preload() im startup.pl machen!
ein objekt erstellst du ja erst später in der applikation. mehr ist nicht zu tun.
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
Froschpopo
 2008-04-03 17:22
#107819 #107819
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
Aber die Applikation wird doch ständig von den Usern aufgerufen, bis zu 3 mal/sek.. Ist das nicht Performancebelastend?
pq
 2008-04-03 17:44
#107820 #107820
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
Froschpopo+2008-04-03 15:22:28--
Aber die Applikation wird doch ständig von den Usern aufgerufen, bis zu 3 mal/sek.. Ist das nicht Performancebelastend?

das verstehe ich jetzt nicht...
in der applikation erstellst du ein template. wenn es noch nicht im cache ist, wird es
kompiliert und im memorycache und im file-cache abgelegt.
der nächste prozess, der dasselbe template erstellen will, kriegt es aus dem file-cache.
falls 2 prozesse fast gleichzeitig dasselbe template erstellen wollen, werden es natürlich
beide kompilieren. d.h. in den ersten sekunden hast du bei einem leeren cachedir natürlich
eine menge zu tun, aber die last geht schnell runter. und ein komplett leeres cachedir
hast du ja auch eigentlich nur, wenn du es zum ersten mal benutzt. bei weiteren updates
auf die templates werden diese ja neu eingelesen.
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
Froschpopo
 2008-04-04 01:09
#107843 #107843
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
ah jetzt hab ichs gesehen... habe jetzt im Cache-Verzeichnis lauter Dateien mit Perlcode.
Das kommt daher, weil ich in der Applikation file_cache und file_cache_dir angegeben habe.

Aber jetzt gibt es noch eine Frage zu preload().
Die Datei sieht so aus:

#!/usr/bin/perl
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
use warnings;
use strict;
use HTML::Template::Compiled;
use File::Find;

print STDERR "Pre-loading HTML Templates...\n";

my $cache_dir = '/var/htc_cache';
my $count_templates = HTML::Template::Compiled->preload($cache_dir);

print STDERR "$count_templates successfull loaded\n";

1;


In der Applikation wird die Datei so gecached:
Code: (dl )
1
2
3
4
5
6
my $htc = HTML::Template::Compiled->new(
filename => 'home.html',
file_cache => 1,
file_cache_dir => '/var/htc_cache'

);


Dann finde ich aber sowas in meiner error_log:
Code: (dl )
1
2
3
4
[Thu Apr 03 23:05:25 2008] [notice] caught SIGTERM, shutting down
Pre-loading HTML Templates...
[Thu Apr 03 23:05:26 2008] [error] 'footer.html' not found at /srv/www/cgi-bin/startup.pl line 10\nCompilation failed in require at (eval 5) line 1.\n
[Thu Apr 03 23:05:26 2008] [error] Can't load Perl file: /srv/www/cgi-bin/startup.pl for server www.porno.de:0, exiting...

Diese footer.html kann ich aber nicht cachen, weil sie nicht über die Applikation, sondern über INCLUDE in die home.html eingebunden wird!
Was die zweite Zeile bedeutet kann ich leider nicht sagen.
pq
 2008-04-04 01:23
#107846 #107846
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
irgendwo fehlt HTC der pfad zu den templates. den solltest du mit dem path-attribut angeben,
und ggfs. search_path_on_include (wie in HTML::Template)
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
<< |< 1 2 >| >> 15 Einträge, 2 Seiten



View all threads created 2008-04-03 11:42.