F
freescale
Hallo zusammen,
ich habe bei einer verhältnismäßig recht großen (Flirt-)Seite mittlerweile ein extremes Ressourcen-Problem.
Die Seite basiert auf einem eigenen CMS, welches auf Smarty als Template-Engine aufsetzt.
Eine Ausgabe von top zeigt folgendes an...
Grund für die Auslastung ist, dass die von ~500 Usern parallel verursachten Seitenaufrufe ungecached sind,
und dadurch die Templates bei jedem Aufruf neu compiliert werden (und auch alle Datenbank-Abfragen erneut ausgeführt werden).
Daher versuche ich derzeit, die im Smarty ja schon längst vorhandene Cache-Funktionen zu verwenden,
jedoch komme ich an folgender Stelle nicht weiter:
Um ein Template-Aufruf 'index.tpl' für 30 Sek. zu cachen, kann ich ja folgenden COde verwenden:
Was mache ich aber nun bei folgender Template-Konstruktion?
- Es gibt ein "Master"-Template
- Jedes Untermodul hat ein eigenes Template,
welches über o.g. Include nachgeladen wird.
- Für jedes Template gibt es drei theoretische Ansichten:
* Eigener User (z.B: User A besucht das Profil von User A -> sich selbst)
* Fremder User (z.B: User B besucht das Profil von User A)
* Nicht eingeloggter User
Für diesen Fall habe ich bisher überhaupt keine passenden Lösungsansätze gefunden :-(
Hat von euch jemand eine Idee, wie ich dies möglichst optimal angehen kann?
Ideal wäre eine Lösung, bei der u.a. folgendes definiert werden könnte...
...ist das überhaupt mit Smarty möglich?
Beste Grüße,
und schon einmal vielen Dank im voraus,
Denis
ich habe bei einer verhältnismäßig recht großen (Flirt-)Seite mittlerweile ein extremes Ressourcen-Problem.
Die Seite basiert auf einem eigenen CMS, welches auf Smarty als Template-Engine aufsetzt.
Eine Ausgabe von top zeigt folgendes an...
Code:
Cpu(s): 43.8% us, 14.4% sy, 0.0% ni, 40.0% id, 1.2% wa, 0.2% hi, 0.5% si
Mem: 3613204k total, 3478220k used, 134984k free, 100700k buffers
Swap: 8393848k total, 129468k used, 8264380k free, 391464k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
24573 mysql 15 0 2445m 1.9g 5316 S 74.4 56.0 425:29.11 mysqld
4928 www-data 16 0 17484 6212 2800 S 2.3 0.2 0:00.16 apache2
[...]
Grund für die Auslastung ist, dass die von ~500 Usern parallel verursachten Seitenaufrufe ungecached sind,
und dadurch die Templates bei jedem Aufruf neu compiliert werden (und auch alle Datenbank-Abfragen erneut ausgeführt werden).
Daher versuche ich derzeit, die im Smarty ja schon längst vorhandene Cache-Funktionen zu verwenden,
jedoch komme ich an folgender Stelle nicht weiter:
Um ein Template-Aufruf 'index.tpl' für 30 Sek. zu cachen, kann ich ja folgenden COde verwenden:
PHP:
<?php
require('Smarty.class.php');
$smarty = new Smarty;
$smarty->caching = true;
$smarty->cache_lifetime = 30;
$smarty->display('index.tpl');
?>
Was mache ich aber nun bei folgender Template-Konstruktion?
- Es gibt ein "Master"-Template
PHP:
<html>
<head>
<title>{$seitentitel}</title>
</head>
<body>
{if $module_tpl neq ''}
{include $module_tpl}
{/if}
</body>
</html>
- Jedes Untermodul hat ein eigenes Template,
welches über o.g. Include nachgeladen wird.
- Für jedes Template gibt es drei theoretische Ansichten:
* Eigener User (z.B: User A besucht das Profil von User A -> sich selbst)
* Fremder User (z.B: User B besucht das Profil von User A)
* Nicht eingeloggter User
Für diesen Fall habe ich bisher überhaupt keine passenden Lösungsansätze gefunden :-(
Hat von euch jemand eine Idee, wie ich dies möglichst optimal angehen kann?
Ideal wäre eine Lösung, bei der u.a. folgendes definiert werden könnte...
Code:
[ master-template : cachen für 30 sek.]
|
+-> include: [ neue mails-anzeige : cachen f. 1 sek. ]
|
+-> include: [ modul 'profil' : cachen f. 10 sek. ]
...ist das überhaupt mit Smarty möglich?
Beste Grüße,
und schon einmal vielen Dank im voraus,
Denis