Soulager son serveur

en trouvant les pages a optimiser en priorité.

a marqué ce sujet comme résolu.

Salut :)

Je vous présente un petit script dont le but est de nous dire quelle page web nécessite d'être optimisé en priorité afin de limiter la charge serveur.

L'utilisation est plutôt simple :)

Il vous suffit de copier les 3 fichiers "stat.class.php", "stat.php", "cnx.php", et "chart.js" (utilisé pour l'affichage des statistiques) sur votre serveur. Vous devez ensuite importer la table temps.sql dans votre base de donnée. Il vous faut ensuite configurer le fichier cnx.php avec les informations de votre base de donnée. Une fois que c'est fait, il vous faut ajouter

1
include('stat.class.php');

a la première ligne de toutes les pages de votre site, et

1
$stat->Stop();

à la dernière ligne. (Et oui l'architecture MVC c'est utile^^)

Un fois que c'est fait, baladez vous sur votre site (ou laissez vos utilisateurs le faire à votre place :) !). A chaque page affichée, le temps que le serveur a mis pour la généré est enregistrée dans la base de donnée. Il ne vous reste plus qu'a aller sur la page "stats.php" pour voir les temps de chargement :

stat

On voit ici que la page représenté en rouge est clairement plus longue a s'afficher que les autres. C'est donc elle qu'il faut optimiser en priorité.

ce script est distribué sous licence BY-SA

Lien de téléchargement : https://mega.co.nz/#!HJtQgCIb!CsN_Wsjq9VK3qMeI6DTuO3zGrcwRE3oCeC0hx9vtHqQ

Que pourrais-je améliorer/ajouter ?

+1 -0

Salut :)

Je vous présente un petit script dont le but est de nous dire quelle page web nécessite d'être optimisé en priorité afin de limiter la charge serveur.

C'est uniquement pour du php donc.

De plus tu ne donnes que le temps passé. Bien. Est-ce que tu pondères de la fréquence d'utilisation. Diviser par deux le temps de chargement d'une page utilisée une fois par mois… Résultat, dans ton graphiue, il n'est pas impossible que la page la plus importante à optimiser soit celle en vert fluo.

De même, c'est cool, d'avoir le "temps" mais si je mets 1minute à publier un tuto dans la bdd + générer un pdf + générer un ebook + envoyer des messages privés + mettre à jour des messages de forums etc. c'est largement plus logique que de mettre 200ms pour envoyer un commentaire d'une ligne dans un blog, non?

J'ai pas compris, c'est le temps total occupé sur la page ou le temps moyens de toutes les requetes ?

Les deux sont interessant mais comme le fait remarqué artagis, c'est clairement le temps total qui est le plus important dans les optimisations car une page peu consulté peut bien prendre 1s, c'est moins critique qu'une page affiché des dizaines de fois pour chaque visiteurs.

Profiler une page en entier c'est tres "gros grain" car une meme page peut entrainer des traitements bien différents. Si tu ne peux pas mesurer plus fin que ça, ce serait bien d'évaluer l'écart type aussi. Et ça permet de voir la stabilité de temps de traitement.

Ensuite je ne suis pas surs que ce type de graph soit le plus pertinent pour montrer les résultats. ça complexifie la lecture. C'est jolie mais pas terrible pour l'interprétation. Un simple graph à barres classés de la page la plus longue à la plus courte serait beaucoup plus parlant.

Enfin, je trouve la procédure d'instrumentalisation du code lourde. Ça demande plein de modifs, qui vont être poussé sur les serveurs de prod, pour pas grand chose. Dans l'idéal un profilage se fait de l'extérieur, sans toucher au code. Au pire il faut pouvoir l'activer en une ou deux lignes si vraiment on veut profiler une fonction en particulier. Mais là, copie de fichiers + insertion de données en base + double modification de tous les fichiers : perso j'aurai la flemme (d'autant que je ne maîtrise pas ce que fait ton code) et je choisirai une solution moins contraignante.

Voila, ce sont des remarques générales. Le profiling sur les applis web est probablement un sujet trop souvent ignoré des devs. C'est une bonne idée de faire des outils pour. Maintenant il faut le lisser :)

le temps moyen ;) (temps total / nombre de temps enregistré pour cette page)

Je trouve ce format plutôt jolie, et surtout je l'ai pris car il met vraiment en avant les pages a chargement long par rapport au autre.

Pour la procédure d'installation, c'est pas voulu mais presque :
- Le site est totalement maître de ses données.
- Tout le monde peut y adapter à ses besoin.
- J'avais pas envie de m'embêter :D.

Ben si justement tu maîtrise totalement car tu a accès au code (qui tout pages confondus fait ~100/150 lignes).

Ouais je cherche comment je pourrai pondérer avec le nombre de requêtes par page

+1 -1

Très clairement le temps moyen n'est pas du tout la métrique la plus pertinente pour du profiling. Si c'est page d'admin qui prend le plus de temps, l'optimiser ne changera rien pour tes visiteurs a u contraire de la page d'accueil vu par tout le monde.

Les deux sont importants mais pas pour la même chose :

  • le temps cumulé doit être utilisé pour identifier la page à optimiser en priorité.
  • le temps moyen pour évaluer après une optimisation le temps gagné.

Utiliser le temps moyen indépendamment de son utilisation est une erreur classique quand on essai d'optimiser sans vraiment savoir ce qu'on fait. Tu peux ne pas en tenir compte mais tanpis pour toi, ton script perd tout son intérêt.

Je maintien ensuite que le graphique n'est pas adapté mais c'est pas le plsu grave. Ça va devenir illisible au dessus d'une dizaine de pages. Alors oui un graph en barre c'est plus basique mais les tailles relatives sont bien mieux rendus. Quelque soit le graph que tu choisi, à minima, tri les en ordre croissant ! Sinon des que tu aura plus de données moins extrême que ton exemple ce sera illisible.

Enfin je reste convaincu que l'instrumentation que tu propose est trop complexe. Quand je profile une appli flask au boulot, j'ai juste a activé une option et j'ai des détails de profiling précis à la fonction prêt. C'est beaucoup moins contraignant que ton code ! Mais c'est bien le moins grave pour le moment.

Enfin bref fait comme tu veux…

+2 -0

Un outils de profiling c'est toujours utile. Il est très difficile de deviner les goulot d'étranglement juste en regardant le code. Bon la c'est peut être pas (encore) assez précis pour y arriver, mais si tu n'en n'a jamais utilisé : tu devrais!

Je trouve ça bien compliqué moi, sur codeIgniter j'active 2 lignes dans un fichier config et j'ai des stats bien plus utile que ton truc compliqué…

Y a un truc que je comprends pas trop bien chez toi Aze, pourquoi tu fais toujours des projets à forte composante technique alors que tu n'as justement aucune compétence technique ? Il existe deux types d’innovations :

  • Les innovations conceptuelles : ce sont les sites comme Facebook ou BlablaCar : pas besoin de grosses compétences techniques pour lancer ces projets et réussir (du moins au début, quand le site fait des millions de visite c'est une autre histoire :D ). Il suffit d'une idée originale.
  • Les innovations techniques : ce sont des sites comme Google ou Angular.js : il faut de grosses connaissances techniques (ici maths/algo/javascript) pour réussir, en plus d'une bonne idée. Ces innovations ne sont pas à la portée d'un débutant.

Toi au lieu d'essayer de faire dans les projets du premier type, tu fais systématiquement dans ceux du second type, ce qui aboutit à des trucs sans aucun sens, mal fait, sur des sujets auquel tu ne comprends pas grand chose : régie pub, cryptage, moteur de jeu vidéo, monitoring etc…

Pourquoi tu n'essayes de chercher des idées intéressantes MAIS qui sont accessible à un débutant ? Moi j'ai des aussi des tas d'idées "techniques" comme les tiennes. Sauf que je sais que je n'ai pas les compétences, et je me dis "ça semble une bonne idée, mais probablement que ce n'en est pas une car j'ignore un élément important vu que je n'ai pas toutes les connaissances". Alors j'ignore ces idées et je me concentre uniquement sur mes idées originales, mais compatible avec mon niveau.

Je penses que tu devrais réfléchir à ta façon même de trouver tes projet, ça t'aidera beaucoup :)

+9 -1

j'ai ajouté deux choses pour que ce soit plus représentatif :) :
- plus de calcul de moyenne, c'est le temps total qui est affiché
- on peut choisir la période d'affichage des statistiques.

C'est donc maintenant bien plus pertinent :)
(désolé je n'ai pas le temps de distribuer la mise à jour maintenant :/)

+2 -0

Je trouve ça bien compliqué moi, sur codeIgniter j'active 2 lignes dans un fichier config et j'ai des stats bien plus utile que ton truc compliqué…

Y a un truc que je comprends pas trop bien chez toi Aze, pourquoi tu fais toujours des projets à forte composante technique alors que tu n'as justement aucune compétence technique ? Il existe deux types d’innovations :

  • Les innovations conceptuelles : ce sont les sites comme Facebook ou BlablaCar : pas besoin de grosses compétences techniques pour lancer ces projets et réussir (du moins au début, quand le site fait des millions de visite c'est une autre histoire :D ). Il suffit d'une idée originale.
  • Les innovations techniques : ce sont des sites comme Google ou Angular.js : il faut de grosses connaissances techniques (ici maths/algo/javascript) pour réussir, en plus d'une bonne idée. Ces innovations ne sont pas à la portée d'un débutant.

Toi au lieu d'essayer de faire dans les projets du premier type, tu fais systématiquement dans ceux du second type, ce qui aboutit à des trucs sans aucun sens, mal fait, sur des sujets auquel tu ne comprends pas grand chose : régie pub, cryptage, moteur de jeu vidéo, monitoring etc…

Pourquoi tu n'essayes de chercher des idées intéressantes MAIS qui sont accessible à un débutant ? Moi j'ai des aussi des tas d'idées "techniques" comme les tiennes. Sauf que je sais que je n'ai pas les compétences, et je me dis "ça semble une bonne idée, mais probablement que ce n'en est pas une car j'ignore un élément important vu que je n'ai pas toutes les connaissances". Alors j'ignore ces idées et je me concentre uniquement sur mes idées originales, mais compatible avec mon niveau.

Je penses que tu devrais réfléchir à ta façon même de trouver tes projet, ça t'aidera beaucoup :)

Demandred

Je trouve ton message contre-productif (et insultant, soit dit en passant). C'est justement en se confrontant à ses limites techniques qu'on avance. Si on reste toute sa vie dans ce qu'on sait faire, en plus de stagner, on se fait dépasser par les technologies. Peu importe que le projet soit sur-dimensionné ou mal maîtrisé ; quand on est vraiment motivé, c'est comme ça qu'on apprend ! Avec une philosophie comme ça, on fait encore des sites statiques en HTML "parce que tu comprends, tu ne connais pas le PHP, donc ne l'apprends pas".

À titre personnel, j'ai énormément progressé lorsque j'ai développé mon framework PHP maison. J'ai été confronté à des situations que je n'avais jamais rencontrées auparavant, et il m'a fallu creuser un peu (beaucoup) pour certaines fonctionnalités.

Actuellement, je fais du ElasticSearch à coup de Spring Batch Java pour une très très grosse boîte : je ne maitrise pas bien ElasticSearch, je n'ai jamais fait de Java et encore moins de Spring Batch. Ça ne m'empêche pas de développer quelque chose de propre, qui fonctionne, en regardant les docs, en me confrontant à des choses nouvelles (je me suis pris la tête toute l'aprèm sur du Parallel Processing (que je n'avais jamais fait) qui fonctionnait mal ; une après-midi entière sur un problème de performances et tout le bazar. Au final c'était super enrichissant et j'ai appris énormément de choses). D'ailleurs au final c'est super enrichissant de manière générale et j'apprends énormément de choses.

Bref, je ne comprends pas ton message.

+4 -2

Bref, je ne comprends pas ton message.

Je ne comprends pas trop le tient non plus…

Je n'ai pas dis qu'il ne fallait pas apprendre, je dis juste que Aze se lance toujours dans des projets irréalistes et sans intérêts car il n'a pas les compétences pour les appréhender correctement.

Aze ne dis jamais "je fais ce projet pour apprendre" mais toujours "j'ai révolutionner tel domaine avec ma superbe idée", ce qui est un peu embêtant.

Mon propos est simplement de dire qu'il existe de projets qui peuvent être intérresants :

  • Ceux qui demandent des grosses connaissances techniques comme crée un algo de cryptage efficace

  • Ceux qui demandent juste une bonne idée et un peu de code, comme un site de covoiturage en ligne type blablacar.

Les premiers idées ne sont pas à la portée d'un débutant car il est incapable d'avoir ce types d'idées. Si il en à, souvent elles sont mauvaises car il n'a pas les connaissances nécessaires pour approcher le problème. A l'inverse les autres idées sont à la portée de tous. Regarde OpenClassroom : c'est un petit site qui est née d'une idée simple dans la tête d'un jeune ado de 13 ans et qui devient une start up dynamique.

Je veux juste encourager Aze à réfléchir sur comment il trouve ces idées, et sur comment on fait pour trouver des bonnes idées. Certains jeunes de son âge ont des idées tous à fait intéressantes (ex Site du zéro, C Mon Cours, etc), pourquoi Aze n'as que des idées qui lui valent des moqueries ? Si il réfléchit un peu là dessus il progressera sans doute beaucoup plus vite qu'en lançant 50 projets aussi vites abandonnés…

Mon propos te sembles plus clair et acceptable ?

PS: je ne penses pas qu'on puisse vraiment comparer un pro (comme tu sembles l'être) avec ce que fait un ado qui débute dans le web… Tu as le cadre de travail et la façon de pensée qui te permettent d’appréhender facilement une nouvelle techno. Aze si tu lui montre ElasticSearch dans 2 jours il te dis qu'il fait pareil en mieux xD.

+0 -0

est-ce que j'ai dit que ce projet révolutionnait l'analyse des performances de son site ?
Nulle part…

Aze si tu lui montre ElasticSearch dans 2 jours il te dis qu'il fait pareil en mieux xD.

2 jours ? Une journée ça suffit :D

Aze

Challenge accepted !

+3 -0

Salut, Ce qui serait intéressant, si on veut reprendre ton idée Aze (car je trouve moi aussi que ce n'est pas super intéressant en l'état même si c'est un effort louable !), ce serait de fournir des données de vitesse de chargement des pages de différents CMS. Par exemple, sur la même machine, on pourrait s'en servir pour savoir quel forum installer. Bien sûr ce ne serait pas une projet "pro" mais à ta place je ferait ça par curiosité. Et aussi pour installer ton petit framework automatiquement sur chaque page (tu fais bien ça pour t'entraîner non ?). Et effectivement, pondère le temps de chargement par la fréquence d'utilisation. Tu peux aussi prendre des informations sur la mémoire utilisée…

+0 -0

Pourquoi pas à la place faire la même interface, mais qui parse les logs que font les CMS et autres scripts. Les logs c’est imbuvable, si y’a une interface graphique, c’est mieux. Et en plus, ça te fera un entrainement.

+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte