Salut,
Je ne pense pas que la réponse à ton problème se trouve dans un framework ou un moteur de template.
Evidemment, un système de cache pourrait grandement améliorer les performances.
Mais à mon avis, la première chose à faire est d'optimiser tes requêtes et les index de tes tables. Pour cela :
- commence par réaliser un dictionnaire de requêtes, c'est à dire la liste complète des requêtes susceptibles d'être exécutées (sans tenir compte des valeurs variables)
- pour chaque requête, liste les champs sur lesquels portent les clauses WHERE, IN, ON (jointures), GROUP BY, ORDER
- place des index sur les champs en questions : un index peut porter sur plusieurs champs, à définir dans l'ordre dans lequel ils apparaissent dans la requête. Pour cela, la doc de MySQL sur la manière dont le moteur optimise les requêtes est une source précieuse d'informations.
Pour t'aider, tu peux utiliser les logs de MySQL qui listent les requêtes exécutées. Notamment
le log des requêtes lentes. Ou encore
le log des requêtes n'utilisant pas d'index.
N'étant pas DBA, j'aurais du mal à te donner plus de conseils sur la question, d'autant plus que si ça se trouve ta base de données est déjà super optimisée (mais d'après les chiffres que tu annonces, ce n'est très probablement pas le cas, même si on ne sait pas sur quelle durée sont exécutées ces 2000 requêtes...)
Concernant un fichier XML : à mon avis, c'est une très mauvaise idée. Quand on met en cache, c'est du HTML prêt à être renvoyé au navigateur. Lors de l'élaboration de ton dictionnaire de requêtes, tu devrais identifier des requêtes qui sont exécutées plus souvent que les autres. Selon ce qu'elles retournent, il peut être intéressant de mettre leur résultat en forme (HTML) et en cache. Si ce sont des requêtes SELECT, suivant leur nature et leur fréquence, tu pourras modifier la durée de vie du cache de manière à gagner plus ou moins en performances sans pénaliser la fraicheur des données.
Très franchement, Smarty est loin d'être aussi rapide que ses développeurs veulent bien le faire croire. On peut aisément écrire un système de template assez basique plus rapide sans cache que Smarty avec (en adoptant une approche différente, donc peut-être pas la même souplesse).
1500 membres inscrits, ça ne me paraît pas suffisant pour faire ramer un serveur web, quand même... A moins que tu n'aies un vieux pentium 75, ce dont je doute... ?
J'ai cru comprendre que l'affichage des plannings te paraît un traitement très lourd. C'est peut-être une des premières choses à mettre en cache, justement. La mise à jour du cache ne devant intervenir que quand une modification est apportée (ajout/suppression/modification d'une réservation, etc).
Puisque tu as développé suivant le patron MVC, ton code devrait être modulaire (bien qu'on puisse faire du MVC proche du monolithe). Cela doit te permettre de générer facilement (sans trop de modifications à tes vues) uniquement les tableaux de planning. Une fonction (ou méthode, ou ce que tu veux, une routine quoi) est à déclencher lorsqu'un évènement modifiant le tableau intervient (PHP n'est pas évènementiel, mais utiliser cette idée peut être intéressant).
Et pour ce qui est de l'utilisation d'un framework... On peut lire des centaines d'articles ventant les mérites de Symfony, Zend, CakePHP, etc... Je découvre depuis 2 jours Symfony... Rien que pour afficher la page par défaut après l'installation, il faut 73ms, dont 50% uniquement pour le chargement de la configuration... Certes, c'est complet, super chiadé, tout ça... Mais il y a des millions de tonnes de lignes de code dont tu n'auras probablement pas besoin, des centaines de couches les unes sur les autres qui rendent le code tellement abstrait qu'on se demande si PHP lui-même n'y perd pas un peu ses tokens (à défaut de son latin).
Pour moi, choisir un framework c'est savoir qu'on ne pourra pas optimiser le code à fond. Mais un framework présente des avantages, comme :
- facilité de se plonger dans le code d'un site quand on connait le framework utilisé
- sécurisation de l'application "garantie" par les développeurs du framework (on n'est pas obligé de leur faire confiance, mais en général, ils font attetion à cette question)
- outil apportant des solutions à des problématiques récurrentes en développement (gestion d'erreurs, tests, validation, ORM, sessions utilisateurs, etc)
- outil permettant d'accélérer le développement d'une application
Après, y'a peut-être plein de choses à optimiser dans ton code, mais pour ça, faut le voir, y passer du temps. Y'a des gens qui se font payer pour ça, tu vois un peu... Tu ne pourras peut-être pas le faire tout seul, parce qu'étant l'auteur, tu auras du mal à prendre du recul sur tel ou tel choix que tu as fait pendant le développement. Et utiliser un framework ne permet pas d'optimiser son code autant qu'on peut le souhaiter.
Conclusion : optimiser la base de données + système de cache.
--
Neige
Souvent la réponse à votre question se trouve dans la
doc. Commencez par là ;)