JeuWeb - Crée ton jeu par navigateur
[Optimisation] Passez votre site a la loupe - Script d'analyse - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : [Optimisation] Passez votre site a la loupe - Script d'analyse (/showthread.php?tid=1716)

Pages : 1 2 3


[Optimisation] Passez votre site a la loupe - Script d'analyse - Amrac - 05-09-2007

Bonjour,
J'allais tout d'abord poster ce sujet en catégorie 'script', mais je pense qu'il peu être intérésant d'améliorer ensemble ce script car il est, je pense, compatible avec toute sorte de site.


Quand on commence a avoir du monde sur son site, quelque soit le serveur il est nécessaire et souvent vitale d'optimiser sont site web.

Mais pour l'optimiser, encore faut-il savoir ou sont les problèmes!

Il y a quelques temps, j'ais cherché une solution sans obtenir de résultats, j'ai donc développer mon propre script d'analyse.

Le but
Ce script m'as beaucoup servit, j'ai pus passer d'un serveur completement surchargé avec 80 joueurs en lignes a un serveur qui respire meme avec 140 joueurs en lignes.
En gros, voila ce qu'il offre:
-Affichage des pages (avec Pseudo du joueur, date et heure du crime) ayant utilisé le plus grand nombre de requetes SQL. Cela m'as permit de trouver tout les cas particulier (donc propre a certain joueur, ou a leur utilisation du jeu) ayant un comportement anormale.
-Affichage des pages ayant pris le plus de temps a se charger. Avec aussi le Pseudo, la date et l'heure des longschargements. (C'est la que vous halluciné en voyant qu'une page qui prend généralement 0,02 secondes chez vous arrive a prendre 7minute chez un joueur O_o)

-Affichage de toutes les pages du site avec pour chaque page:
  1. Le nombre d'appelle a la page
  2. Le nombre de requetes SQL moyens
  3. Le temps moyen d'execution de la page
  4. Le cout total en Ressource CPU (temps d'execution total)
  5. Le % des ressources serveurs utilisé par cette page (par rapport aux autres)
  6. Le pourcentage du nombre d'appelle de cette page.
  7. Le ratio entre les 2 % précédent.

On peut aussi choisir une page (messagerie.php) et voir la consommation de chaque action (pour messagerie.php?nouveauMessage, messagerie.php?supprimerMessage etc....) On peut ainsi determiné très précisement ce qui ne fonctionne pas correctement. Les critères sont les memes que cités précédement.

Comme je sens que je vous est tous perdus, je vais vous montrer des screens peu être plus parlant que moi:
[Image: StatGlobal.png]
(Je sais, ma zone admin est moche, c'est normal :p)

Ici, les stats sont rangées par consommation en Ressources. Pour informations, elles dates de cette après midi.

Comme j'ai dit, ca permet de se faire une idée de ce que consomme chaque page.
C'est comme ca que j'ai vue que certainne page, pourtant 'correctement' faites, étaient tellement souvent appellée que le petit manque d'optimisation qu'il y avait devenait un gouffre a ressource...

D'un coup d'oeil, vous savez sur quoi vous devez travailler. Sur ce screen, il est par exemple évident la page 'ennemie.php' est a revoir puisqu'elle demande en moyenne 1 seconde pour etre calculer et que c'est elle qui consomme le plus, avec un ratio effrayant de 9.4 (c'est a dire que pour une page appellée, elle consomme environ 9.4 fois plus de ressource que les autres pages).

Tréve de blabla, examinons la page ennemie.php de plus pret:
[Image: StatGlobal-2.png]
Hop, on a plus de détail, on sais précisement ce coute au serveur chaque action. Génial non?

---
Je vais d'abord passer quelques heures sur le script pour le rendre lisible. J'aimerais que ce script devienne le projet de notre actuel communautée. (On pourrat dire: Utilise le script de JeuWeb.org!)

Le principe est que chaque personne qui l'utilise, et qui l'améliore a sa sauce rapporte chaque amélioration afin de participer a l'évolution du script (comme un projet libre quoi)

Qu'en pensez vous? Ca vous intérésse comme script?


RE: [Optimisation] Passez votre site a la loupe - Script d'analyse - gottferdom - 05-09-2007

Euh moi j'en pense que c'est super interressant et surement fort utile, mais qu'on voit pas les images ^^


RE: [Optimisation] Passez votre site a la loupe - Script d'analyse - Kassak - 05-09-2007

Personnellement, je ne pense pas être un de ceux qui lui porterons des ameliorations, manque de temps et d'experience, mais je le trouve fort utile, et des qu'il est possible de se le procurer, j'en ferais très bon usage, je trouve ca super utile!


RE: [Optimisation] Passez votre site a la loupe - Script d'analyse - Amrac - 05-09-2007

C'est bon pour les images ^^


RE: [Optimisation] Passez votre site a la loupe - Script d'analyse - gottferdom - 05-09-2007

Perso je dis banco, ça peut aider grandement à ameliorer et optimiser le code.
Je sais pas exactement ou tu en es mais ça m'interresse fortement


RE: [Optimisation] Passez votre site a la loupe - Script d'analyse - Mysterarts - 05-09-2007

Très bonne idée !
Je dis ça car je l'ai eu, bien sur ^^
J'ai installé un programme similaire (moins complet) sur mes pages, mais pour tout dire, je n'en suis pas satisfait...
Alors je vais allez voir comment toi tu l'as fait ^^

Mysterarts


RE: [Optimisation] Passez votre site a la loupe - Script d'analyse - Joojo - 05-09-2007

Moi je serais preneur Smile mais je pense pas être à la hauteur pour l'améliorer.


RE: [Optimisation] Passez votre site a la loupe - Script d'analyse - Plume - 05-09-2007

Bon outil. Je te fais confiance quand à l'exactitude des résultats.
Comme tu dis, il faudrait retravailler la présentation Big Grin Pourquoi un fond vert ? Ca agresse ^^

Quand à en faire un projet libre pour la communauté, je te convie à laisser apparaitre certaines de tes coordonnées sur les scripts Wink



RE: [Optimisation] Passez votre site a la loupe - Script d'analyse - Byleth - 05-09-2007

Super intéressant, reste à voir si c'est facilement utilisable aussi Smile


RE: [Optimisation] Passez votre site a la loupe - Script d'analyse - Amrac - 05-09-2007

Je copie pas le code ici car il est un peu long (250 lignes), mais le voicie:
Code Source
Je suis repassé dessus pour mettre des commentaires et l'indenté un peu, mais ce n'est pas encore très conventionnel (noms de variables farfelues).

En réalisant ce script, j'ai utilisé quelques fonctions perso, je vous les est donc regroupées ici:
Code Source

1- Mise en place.
1.1- Compter les requetes SQL.
Avant de commencer, il faut pouvoir connaitre le nombre de requete sql que vos pages consomment.

Je vous conseil ce tuto: http://www.siteduzero.com/tuto-3-1716-1-compter-le-nombre-de-requetes-sql-dans-une-page.html
Si vous ne voulez pas vous prendre la tête, utilisez directement la fonction 'mysql_cquery()' présente dans le code que je vous est donnée juste au dessus (divers.php).

Vous devez remplacer toutes vos mysql_query, par des mysql_cquery (C comme compteur ^^)
Avec la fonction Remplacer de votre editeur de texte, ca doit vous prendre quelques minutes. N'oubliez aucune requete! Sinon vos chiffres ne relaterons pas la réalité.


1.2- Mesurer le temps d'execution d'une page.

Ici, la structure que vos avez choisit pour vos fichiers va jouer directement sur le temps qu'il vous faudrat pour mesurer le temps d'execution d'une page.

Le principe est simple, on prend l'heure au début de la page, puis a la fin, et on fait la différence.
Personnellement mon site était découpé de la sorte:
1 fichier Haut, par lequel commence toujours mon script.
1 fichier Bas, par lequel finis toujours mon script.

Vous devez donc ajouter dans le fichier Haut.php:
Code PHP :
<?php 
$tempsDepart
= getmicrotime();
Ps: La fonction getmicrotime() est dans divers.phps

Puis, dans le fichier Bas.php:
Code PHP :
<?php 
$Temps_Fin
= getmicrotime()-$tempsDepart;
$Temps_Fin = substr($Temps_Fin.'',0,5);

$Temps_Fin contient donc le temps qu'a mis la page a être calculée.


2- La base de données.
2.1 - Code sql de la table

Vous pouvez copier directement cette requete dans votre BDD:
CREATE TABLE `statistique_page` (
`ID` int(11) NOT NULL auto_increment,
`nomPage` varchar(250) NOT NULL default '0',
`timestamp` int(11) NOT NULL default '0',
`temps` float NOT NULL default '0',
`nbRequete` int(11) NOT NULL default '0',
`IDSession` int(11) NOT NULL default '0',
`Variables` varchar(250) NOT NULL,
PRIMARY KEY (`ID`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=8471 ;

2.2 - Explications de la table
nomPage: Contiendra le nom de la page ex: "/ennemie.php"
timestamp: Heure a laquel est enregistrée la donnée.
temps: Temps qu'a mis la page a être calculée.
nbRequete: Le nombre de requete qu'a demandé la page.
IDSession: Ca depend de votre site, j'enregistre dedans l'ID du membre. C'est très utile pour pouvoir mener une enquete correct par la suite. Si vous ne savez pas de quoi je vous parle, ne touchez a rien ca ne buggueras pas Wink
Variables: Contient le nom de la page, suivie du nom de chaque variable (GET ou POST). exemple: "/ennemie.php-POST:ChoixArmee|-GET: Cible|Lieu"


3- Insertion des données.
En bas de chaque page, juste avant la fin du script vous devez enregistrées toutes les données recueillis.
Code PHP :
<?php 
mysql_cquery
('INSERT INTO statistique_page VALUES ("","'.$_SERVER['SCRIPT_NAME'].'",'.time().',"'.$Temps_Fin.'","'.$nbRequete.'","'.$_SESSION['IDMembre'].'","'.$_SERVER['SCRIPT_NAME'].getVars().'")');
[u]3-1 Savoir dans quel page on est

Ce qui est géniale ici, c'est qu'on a pas besoin de paramétré chaque page, on utilise simplement la variable $_SERVER['SCRIPT_NAME'] qui contient, comme elle l'indique, le nom du script. Le reste du script n'as pas besoin d'être réglé, il est fait pour s'adapter comme un grand. (Vous verrez les pages appaitre toutes seuls quand vous en ajouterez :p)

3-2 Session ID
Il s'agit ici de l'identifiant du membre qui a éxécuté la page. Si vous avez un identifiant pour vos membres, mettez le a la place et remplissez la fonction 'getPseudo()' dans divers.phps en fonction de votre site.
Si vous n'avez pas envie de vous prendre la tête, mettez simplement 0 a la place.

3-3 Avoir le nom de toutes les variables Get/Post
Ce bout tout moche: $_SERVER['SCRIPT_NAME'].getVars() permet de connaitre quels sont les actions en cours.
Vous avez simplement besoin de la fonction getVars présente dans le divers.phps. Elle imprime les noms de toutes les variables (et pas le contenu, ce serait le bordel).


Voila c'est fini. A la fin de vos pages vous devez donc avoir un code du style:
Code PHP :
<?php 
$Temps_Fin
= getmicrotime()-$tempsDepart;
$Temps_Fin = substr($Temps_Fin.'',0,5);
$nbRequete = mysql_cquery("fin");
$nbRequete++;
mysql_cquery('INSERT INTO statistique_page VALUES ("","'.$_SERVER['SCRIPT_NAME'].'",'.time().',"'.$Temps_Fin.'","'.$nbRequete.'","'.$_SESSION['ID'].'","'.$_SERVER['SCRIPT_NAME'].getVars().'")');
Ps: N'oublions pas le $nbRequete++; car on va faire une requete pour les stats


Voila, une fois que tout est en place, il vous suffit normalement d'executé le fichier stat.php (il doit biensure avoir un accés a votre BDD Wink )