Aujourd'hui je voulais vous parler des frameworks PHP et de la raison qu'il y a derrière le choix de l'utilisation d'un framework ou non. Le but ici ne sera pas de faire de l'évangélisation pure et simple, mais plutôt de donner mon point de vue et d'éclaircir les développeurs qui se poseraient encore des questions sur l'utilisation d'un framework.
Stop les tuto CakePHP c dla merde ! on veux du PHP Brut ça sert à rien les framework
C'est le genre de phrase typique que je vois de plus en plus dans les commentaires des vidéos. Ce type de message est toujours rigolo sachant que ces personnes utilisent déjà un framework sans s'en rendre compte.
Même si vous codez en procédural ou en POO vous ne le savez pas mais vous utiliser déjà un framework. En effet au fur et à mesure de vos projets vous allez rencontrer des fonctions de plus en plus similaires et, à moins d'être masochiste, vous vous créerez vos propres fonctions à réutiliser. Ainsi, vous vous construisez une "librairie" d'outils et ainsi, sans vous en rendre compte, vous créez votre propre framework.
Donc là vous vous dites sûrement "ben mon code que j'ai créé me va, pourquoi utiliser un framework". Lorsque vous utilisez vos librairies vous êtes beaucoup plus productif. Et de manière générale vous gagnez de plus en plus de temps à chaque projet. Maintenant imaginez des centaines de développeurs qui mettent en commun toutes leurs librairies et vous obtenez le principal intérêt d'un framework Open Source. Avoir un code testé et gérant un maximum de cas qui vous permettra de coder tous vos sites beaucoup plus rapidement (une fois le framework bien assimilé).
Les frameworks ouverts utilisent tous la même structure, la structure MVC (Model View Controller) qui est une structure éprouvée qui vous permet de séparer la partie présentation de la partie logique. Effectivement, cette méthode peut paraitre trop complexe au premier abord mais elle vous permet d'avoir un code plus propre et beaucoup plus simple à debuguer par la suite.
Enfin le dernier atout d'un framework c'est le travail en équipe. En effet, si vous travaillez à plusieurs sur un même framework c'est l'assurance que tout le monde code en suivant les mêmes conventions. Si votre projet utilise symfony 2 par exemple, vous savez qu'un dev Symfony 2 sera capable de travailler sur le code et comprendre le votre dès le premier jour. En revanche si vous utilisez votre propre framework le temps d'adaptation peut être plus long, et on prend le risque que chaque nouveau développeur rende la structure de moins en moins stable.
L'aspect le plus décrié des framework reste les performances. Même si la plupart des frameworks n'incluent pas "trop" de librairies en se basant sur le principe du lazy loading, ils s'avèrent forcément plus gourmands qu'un code PHP Brut. Les performances peuvent être améliorée au fur et à mesure de la compréhension du fonctionnement du framework. Par exemple, sur CakePHP il sera impératif dès les premières lignes de limiter la récursivité de vos Model sous peine de voir le système faire des dizaines de LEFT JOIN non désirées.
Il y a une grosse partie optimisation à faire avant d'incriminer les frameworks à proprement parler (mise en place d'un système de Cache, Load Balancing…). On trouve des exemples de site à très très haut traffic qui utilisent des frameworks réputés "lents" et qui s'en sortent très bien. La preuve avec cette Conférence du développeur de YouPorn (SFW) qui explique comment le site arrive à survivre à 300 000 requêtes/s et plus de 100 Millions de pages vues avec Symfony 2.
D'une manière plus générale si vous arrivez à des proportions où le code PHP devient limitant c'est que vous pouvez commencer à investir dans une structure serveur plus robuste.
Cette question revient aussi très souvent et tout le monde essaie de trouver une réponse unique à grand coup d'argument et de benchmark foireux mais il n'y a pas selon moi un framework ULTIME. En effet, chaque framework propose sa vision des choses et sa façon de coder. Par exemple :
Je pense que le choix du framework est avant tout une question de goût, à vous de voir la façon de fonctionner de chaque framework et celle qui vous semble la plus naturelle. Cependant certains autres élément sont à prendre en compte dans certains cas :