JeuWeb - Crée ton jeu par navigateur
Classements des joueurs - 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 : Classements des joueurs (/showthread.php?tid=5087)

Pages : 1 2 3 4 5 6 7


RE: Classements des joueurs - php_addict - 28-08-2010

(28-08-2010, 09:57 AM)gameprog2 a écrit : A ta place même si j'avais 10000 joueurs, je n'afficherais le classement que des 100 premiers Wink
ça donnera envie aux autres d'y figurer Wink

oui c'est bien ce que j'ai précisé dans les post précédents...

(28-08-2010, 09:57 AM)gameprog2 a écrit : Tu lance manuellement la création d'un fichier une seule fois, et son contenu sera rempli avec le champ "classement" de tous les joueurs.

non...beaucoup trop long !

(28-08-2010, 09:57 AM)gameprog2 a écrit : Des pros pourront me dire si c'est plus léger et rapide qu'une lecture continuelle en DB Wink car moi je ne pas calé en DB Wink

je ferais un tuto sur le wiki dès que je trouverais le temps...


RE: Classements des joueurs - Sephi-Chan - 28-08-2010

Quitte à faire une page unique contenant les 100 premiers (effectivement, ça peut donner envie d'y figurer), autant simplement mettre un cache au niveau de la vue, comme présenté plus haut dans le sujet (je me cite).

On peut difficilement faire plus efficace et simple (selon le framework utilisé).


Sephi-Chan


RE: Classements des joueurs - gameprog2 - 28-08-2010

Merci ça va me servir aussi vos idées Wink

Citation :non...beaucoup trop long !
Même si c'est fait une seule fois ? car après c'est le fichier qui servirait et plus la DB c'est ce que je voulais dire.
Ha ok, tu veux dire que lire le fichier pour en tirer les 100 meilleurs c'est ça qui est trop long ? Ok je vois, bein oui :/
Je vais attendre de prendre sur vos solutions Wink


RE: Classements des joueurs - Sephi-Chan - 28-08-2010

Voilà ce que je suggère en PHP. Je n'ai pas codé en PHP depuis très longtemps donc j'ai fais au plus clair (mais je pense que c'est ce qu'il y a de mieux à faire de décomposer en plusieurs variables).


$cache_path = "./cache/top_100";
$cache_exists = file_exists($cache_path);
$few_minutes_ago = time() - 30 * 60;
$last_access_time = filemtime($cache_path);
$cache_is_expired = $last_access_time < $few_minutes_ago;
$html_to_display = '';

if($cache_exists == false || $cache_exists && $cache_is_expired){
ob_start();
/* Tu mets ici le code pour générer ton tableau. */
$html_to_display = ob_get_flush();
}
else {
$html_to_display = file_get_contents($cache_path);
}

echo $html_to_display;


Pour info, voilà ce que je fais avec Ruby on Rails, histoire de montrer une fois de plus que les frameworks apportent beaucoup (même si vous ne pourrez pas faire aussi simple en PHP (à cause de la syntaxe), il y a moyen de bien simplifier quand même) :


# Un bout de vue qui ne sera pas mis en cache.

<% cache('top_100', :expires_in => 30.minutes) do %>
# Génération du tableau qui sera mis en cache.
<% end %>

# Là non plus, ce n'est pas mis en cache !


Sephi-Chan


RE: Classements des joueurs - niahoo - 29-08-2010

Ce n'est pas grave qu'un traitement soit long et poussif s'il est simple à mettre en place et facile à maintenir, du moment qu'il n'est pas lancé à la volée par tout le monde.

Optimiser à fond les performances c'est une bonne chose, mais il ne faut pas non plus se faire chier quand ça n'en vaut pas la peine.

Avec un système de cache comme proposé dans le post au dessus, ou comme on en a donné plusieurs idées dans le topic, le traitement ne sera appelé qu'une fois par jour.

Tu peux pousser à une fois par heure, un fichier de 1000 joueurs ça doit pas prendre plus de 10 secondes si c'est codé proprement, même s'il y a un calcul complexe à faire pour le calcul des points, donc la "charge serveur" va pas trop gueuler

Personnellement, je garderais une solution en DB car je travaille plutot avec des chemins de fichiers absolus, et ça serait donc plus facilement exportable si c'est compris dans la DB (encore que..). Mais la raison principale est que sur mon ordi de travail, le stockage dans une DB pour de nombreuses données va bien plus vite avec PDO qu'avec une fonction de gestion de fichier.

__________

Par contre sephi ta réponse sur la syntaxe de PHP est biasée car si, on peut faire aussi simple :p (du moins visuellement hein, c'est presque un troll)

du genre
Code PHP :
<?php if(!$monGestionnaireDeVues->cache('classement', 30)): ?>
<blablabla/>
<?php endif; ?>

c'est surtout le code derriere qu'il faudrait comparer (et là je suis d'accord, ruby s'en sortira plus facilement ^^), mais en php l'appel peut être aussi simple. (même si le 'If' Transparait)


RE: Classements des joueurs - Sephi-Chan - 29-08-2010

(29-08-2010, 01:19 AM)niahoo a écrit : Par contre sephi ta réponse sur la syntaxe de PHP est biasée car si, on peut faire aussi simple :p (du moins visuellement hein, c'est presque un troll)

du genre
Code PHP :
<?php if(!$monGestionnaireDeVues->cache('classement', 30)): ?>
<blablabla/>
<?php endif; ?>

c'est surtout le code derriere qu'il faudrait comparer (et là je suis d'accord, ruby s'en sortira plus facilement ^^), mais en php l'appel peut être aussi simple. (même si le 'If' Transparait)

Bien sûr dans mon exemple, je ne voulais pas comparer le nombre de lignes mais l'idée et le fonctionnement (pour être le plus clair possible pour PHP Addict).

Et je veux bien que tu présentes l'implémentation de ta fonction car je vois mal comment elle fait pour capturer le contenu placé dans le if (puisque dans ton cas, tu peux lire le fragment mais pas l'écrire).

Tu es donc obligé (sauf preuve du contraire, car je peux me tromper) de faire le faire en 2 appels puisque PHP ne dispose pas de la notion de bloc, très utilisée en Ruby, cf. le code source du module ActionView::Helpers::CacheHelper, le yield permet de répéter le code qui a été donné entre le do et le end. C'est très enrichissant de lire du code source, même pour un autre langage.


Sephi-Chan


RE: Classements des joueurs - atra27 - 29-08-2010

Pour ma part:
J'ai fait un champ point dans la table user (peut être autre part du moment que c'est relaté au joueur)
A chaque résolution tu ajoute/retire les points.
Le cache se génère par un select * order by point desc (exemple)
On peut même séparer en page.
Ensuite j'utiliserai une lib (faite main) pour la gestion du cache
Tu met ton temps de cache a mettons 1h, ainsi le premier de la journée génère le cache, les autres verrons la version enregistrée puis une fois l'heure écoulée c'est le premier qui regarde la page qui rerégénérera le cache... (Dans mon cas j'ai mis 12h)

Petit truc en plus, met a chaque ligne tu tableau en id, l'id du joueur.
Ainsi tu met un petit code JS pour changer la couleur de la ligne (par exemple mettre la ligne en rouge) ou l'id est égal a l'id du joueur (echo dans le JS etc etc)

C'est super pratique car même si tu séparer en pages de 1000 joueurs... bah la le gars lambda pour consulter son classement n'a qu'a défiler avec la molette rapidement et s'arrêter sur la ligne rouge :p


RE: Classements des joueurs - niahoo - 29-08-2010

pardon c'est pas un if c'est un while.

mais effectivement ça fait un second appel, mais ça on n'y coupe pas, php prends toujours 10 lignes de plus que les copains pour faire pas mal de trucs.