Bonjour, bonsoir,

J'aurais quelques petites questions pour ceux qui auraient déjà expérimenté les gains de performance d'une technologie à l'autre. En fait, je suis en train de développer mon portfolio et j'ai décidé de me créer un petit blog. Alors, pour tout dire, je n'ai que commencé que la partie que le client va voir (l'utilisateur n'ayant aucun accès à la partie administration), j'ai décidé d'utiliser AngularJS ainsi que CakePHP pour faire cette application. Par ailleurs, la partie PHP (requêtes à la base de données) ne sert, pour le moment, que de gestionnaire de données (ainsi que la structure du site). C'est à dire qu'il envoie des données au format JSON et j'appel à partir d'une requête AJAX get (toujours avec AngularJS). Cela me permet de gérer à la fois un système de recherche, de catégories et de pagination sans même avoir à recharger la page. Le soucis est si j'ai plusieurs articles en base de données (j'ai testé avec 200), ne serait-ce pas trop long au premier chargement, sachant qu'en local, cela a pris environ 900 millisecondes (excluant la page courante et tout le reste) ? J'ai d'ailleurs fait avant une vue qui prenait en premier paramètre le nombre d'articles voulu ainsi que la page voulue (cette vue renvoie une intervalle d'articles). Ce qui me choque un peu, c'est que cette vue prend 400-500 millisecondes à charger pour 5 articles. Je n'imagine donc pas vraiment utiliser ce système étant donné que l'utilisateur pourra taper dans le champs recherche et pourra aussi utiliser la pagination, cela entraînera beaucoup de requêtes au serveur. Quelqu'un aurait-il une solution plus enviable à me proposer ? Autrement, je pense utiliser la méthodes qui récupère tout, ça me parait plus abordable pour le processeur du serveur considérant qu'à chaque fois que la page est rechargée, une instance de apache est ouverte.

Merci beaucoup,
Ramz.

2 réponses


Vallyan
Réponse acceptée

Je ne sais pas sur quel type de serveur tu es, mais une requête MySQL après une simple recherche dans un champ, ou après avoir cliqué sur "next", c'est surement pas ça qui va saturer ton site a moins d'avoir des <u>milliers</u> de connexions par <u>seconde</u>. Je veux bien que PHP ne soit pas une flèche, mais faut pas pousser :) ...

Ce qui prend du temps, pour charger une page, c'est aussi et surtout chaque requête http pour réclamer une image, un script js, une feuille de style, etc ... et cela, que tous tes articles soient chargés en local ou que tu fasses une nouvelle requête MySQL a chaque fois, il faudra quand même que tu les récupères (les images, surtout, je suppose ... tes css et js ne changeant probablement pas).

Ce que tu perds, par contre, en chargeant tout d'un coup ta table chez le client, c'est la puissance de MySQL pour des requêtes un peu compliquées. Envoyer 200 articles en local et compter sur des boucles/conditions JS (je suppose que c'est comme ca que tu fais) pour filtrer ce que tu veux afficher vraiment (recherche de mots dans les titres, intervalles de dates, catégories, tags ... tout a la fois ... ) c'est a mon avis surestimer gravement la capacité de JavaScript, et donc avoir de sérieux problèmes de performance coté client.

Ma suggestion: utilise PHP/MySQL pour la selection d'articles a afficher via un nouvel AJAX chaque fois que c'est nécessaire.

Merci beaucoup de ta réponse. Je vais faire comme tu me le proposes (du moins, amélioré ce que j'ai déjà fait (intervalle d'articles via une vue)). Je n'avais pas exactement vu la perte de performance du côté de MySQL de cet angle.

Ramz.