JeuWeb - Crée ton jeu par navigateur
Architecture pas optimisée - 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 : Architecture pas optimisée (/showthread.php?tid=7617)

Pages : 1 2 3 4 5


Architecture pas optimisée - L'Omniscient - 05-04-2016

Bonjour,
Après discussion avec niahoo, je voulais vous montrer un code qui effectue une action en AJAX qui met 2 à 3 secondes de délais avant que toutes les requêtes n'aient été terminées, et ce sur une bonne connexion ! Donc imaginez une mauvaise connexion >..<

Alors, d'abord je vous explique :
On explorer plusieurs cases d'affilé, à chaque exploration, une ressource s'affiche, et si on la collecte, ça nous envoie les données via AJAX, sachant qu'il peut y avoir jusqu'à 3 ressources différentes :
$(document).ready(function(){
$.ajax({
url : 'AJAX.php',
type : 'POST',
data : dataAjax,
dataType : 'text',
error : function(){
alert('Vous avez été deconnecté de Internet. Vérifiez votre connexion, et rechargez votre page.');
alert('Vous avez été deconnecté de Internet. Vérifiez votre connexion, et rechargez votre page.');
};
});
})

Après 1 collecte de ressource, la page AJAX est cherché et le code suivant est effectué :

$les_ressources = $bdd->prepare('SELECT * FROM les_inventaires WHERE id_du_joueur = ?');
$les_ressources->execute(array($ID));
$z = 0;

foreach($les_ressources as $la_ressource){
$z = $z +1;
$tabl_ressources[$z] = array("id" => $tabl_ressources["id"], "lobjet" => $tabl_ressources["lobjet"], "la_quantite" => $tabl_ressources["la_quantite"]);
}

$resultat1 = " ";
$resultat2 = " ";
$resultat3 = " ";

if (!isset($tabl_ressources)) {
$resultat1 = "faux";
$resultat2 = "faux";
$resultat3 = "faux";
}


Puis le code suivant est effectué jusqu'à 3 selon, selon le nombre de ressources différentes, avec les variables ressour1, ressour2 et ressour3. Donc trois fois ci-dessous par requête AJAX.

if(isset($_POST['ressour3'])){
$ressour3 = strip_tags($_POST['ressour3']);
$quantit3 = strip_tags($_POST['quantit3']);
if ($quantit3 > 4) {
return;
}
$a = 0;
foreach($tabl_ressources as $insertion_objet){
$a++;
if ($ressour3 == $tabl_ressources[$a]["lobjet"]) {
$add = $tabl_ressources[$a]['la_quantite'] + $quantit3;
$insertion_objets_3 = $bdd->prepare('UPDATE les_inventaires SET la_quantite = "'.$add.'" WHERE id_du_joueur = "'.$id.'" AND lobjet = "'.$ressour3.'"');
$resultat3 = " ";
break;
} else {
$resultat3 = "faux";
}
}
if ($resultat3 == "faux") {
$insertion_objets_3 = $bdd->prepare('INSERT INTO les_inventaires (lobjet, la_quantite, id_du_joueur)
VALUES ("'.$ressour3.'", "'.$quantit3.'", "'.$id.'")');
}
$insertion_objets_3->execute();
}

J'ai essayé de réfléchir à comment alléger ce code, sans pour autant décharger des traitements en JS pour un soucis de sécurité. Vous auriez des conseils pour l'alléger ?


RE: Architecture pas optimisée - niahoo - 05-04-2016

Il te faut utiliser les balises [ code=javascript] ... [/code] car sinon c'est vraiment pas lisible.



ça ça me semble faux déjà : tu lis et écris dans le même tableau $tabl_ressources sans utiliser $les_ressources.
foreach($les_ressources as $la_ressource){
$z = $z +1;
$tabl_ressources[$z] = array("id" => $tabl_ressources["id"], "lobjet" => $tabl_ressources["lobjet"], "la_quantite" => $tabl_ressources["la_quantite"]);
}

Et il faut vraiment indenter ton code !


RE: Architecture pas optimisée - L'Omniscient - 05-04-2016

Effectivement c'est mieux Big Grin


RE: Architecture pas optimisée - niahoo - 05-04-2016

Tu devrais utiliser des booléens au lieu de "faux".

Bon mais sinon pourquoi tu n'envoies pas tes 3 ressources dans la même requête ? Pourquoi faire 1 par 1 si de toute façon l'utilisateur n'intervient pas dans le processus ?


RE: Architecture pas optimisée - L'Omniscient - 05-04-2016

Parce que sinon elles sont stockée en JS en attendant et tu peux modifier comme tu veux :/
Là il n'y a pas le temps de les modifier puisque dès que tu cliques elles sont envoyées dans l'AJAX.

(Enfin, il me semble que c'est plus sécurisé).


RE: Architecture pas optimisée - Prélude - 05-04-2016

Juste une astuce pour les tableaux (il y aurait certainement quelques autres points à revoir) :
Code PHP :
<?php 
foreach($myTab as $key => $value) {

    $myTab[$key] = 'ce que je veux';
}
Ça te permet de ne pas mettre un compteur qui peux ne pas correspondre aux clefs de ton tableau.


RE: Architecture pas optimisée - niahoo - 05-04-2016

Ajax est fait avec javascript, donc si je peux modifier tes données stockées en javascript, je peux modifier les requêtes Ajax. Il y a même des extensions pour ça, inutile d'aller toucher au javascript.

Mais ça ne répond pas à ma question : est-ce que le joueur clique 3 fois, ou bien 1 seule fois ? Si 1 seule fois, pourquoi fais-tu l'envoi en 3 étapes ?


RE: Architecture pas optimisée - L'Omniscient - 05-04-2016

Ah les trois conditions ? C'est un clic, et les trois sont exécutées (parfois une seule ou deux ressources seulement et pas trois, d'où les ifs).

Par contre quand tu te déplace à nouveau et que tu récolte à nouveau, les trois conditions sont encore une fois exécutées

Ah merci Prélude. En fait j'ai l'habitude des boucles JavaScript avec la variable $a dans la boucle ^^

Tiens j'avais pas vu ton premier message niahoo, le code est indenté mais quand j'ai posté ça m'a tout désindenté. (Bon tous mes codes sont pas tous bien indentés par contre Big Grin)
Et j'ai pas compris le coup du tableau.


RE: Architecture pas optimisée - niahoo - 05-04-2016

ben tu fais foreach($les_ressources as $la_ressource) mais tu n'utilises pas $la_ressource, du coup ça sent le bug.

Et sinon, si 1 click => 3 requêtes ajax et ben tu dois facilement pouvoir transformer ça en 1 click => 1 requete ajax contenant des infos pour 1, 2 ou 3 ressources et ainsi diviser le temps de traitement par 3 quasiment.


RE: Architecture pas optimisée - L'Omniscient - 05-04-2016

Pardon j'ai fais une connerie, j'ai modifié quelques variables en copiant collant, et j'ai modifié une variable par erreur, en gros ça donne ça avec les variables placées aux bons endroits :
foreach($les_ressources as $la_ressource){
$z = $z +1;
$tabl_ressources[$z] = array("id" => $la_ressource["id"])