Accueil > Forum > > > > Chargement page coté navigateur trop long
Chargement page coté navigateur trop long
mardi 13 janvier 2009 à 15:42:12 |
Chargement page coté navigateur trop long

chalex
|
Bonjour, j'ai programmé un petit jeu sur lequel j'ai une grille de 8000 cases à afficher avec une requete (qui fonctionne bien) pour savoir pour chaque case si elle a été retournée ou pas. Tout ceci marche très bien, ma programmation fonctionne. Par contre je fais une boucle 8000 fois pour afficher ou non ma case. Mais mon fichier final envoyé du serveur php au navigateur fait 1Mo (8200 lignes au final) et ma grille fait comme un chargement de 10 à 40 secondes suivant si j'utilise FF ou IE (10 secondes sous ie et 30 à 40 sous FF3) Voici le code de ma boucle : <?php for ($j=0;$j<$ligne;$j++){ $id_case = mysql_result($resultat,$j,'id_case'); $id_client = mysql_result($resultat,$j,'id_client'); if ($id_client == '0'){ ?> <a href="index.php?num_case=<?php echo $id_case; ?>"> <div class="caseGrille"></div> </a> <?php }else{ echo "<div class='caseGrilleUtilisee'></div>"; } } ?>je me posais la question de savoir s'il y avait moyen de contourner le fait que ça rame (comme par exemple utiliser flash, mais le problème de boucle flash est le meme non ? Ou de précharger ?) merci si quelqu'un a une solution potentielle cordialement chalex
|
|
mardi 13 janvier 2009 à 18:21:19 |
Re : Chargement page coté navigateur trop long

Flachy Joe
|
Utilise AJAX : tu télécharge la page une fois, du javascript créé les cases puis effectue une requête vers le serveur à chaque changement de la grille pour obtenir le nouvel état à afficher (code par exemple dans une chaîne de caractères "0111010100000111..."), tu n'as plus que 8000 caractères à télécharger, soit 8ko Et si tufais un codage sur 1 bit tu code l'état de 8 cases sur chaque octet de ta chaine et tu n'as plus besoin que de 1000 caractères. Ensuite les cases seront mises à jour par du javascript.  Flachy Joe  « Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes. » Les Shadoks<
|
|
mardi 13 janvier 2009 à 21:52:08 |
Re : Chargement page coté navigateur trop long

kohntark
|
@flashy Et si tufais un codage sur 1 bit tu code l'état de 8 cases sur chaque octet de ta chaine et tu n'as plus besoin que de 1000 caractères. => heu, je n'ai pas compris là
tu n'as plus que 8000 caractères => un ti peu plus quand même hein, ... ok, je titille :)
C'est une très bonne solution que tu proposes mais elle est sans doute améliorable, parce que 8...10 Ko c'est à la fois peu et beaucoup. Peut être y a t il moyen de n'envoyer que la ligne modifiée, voir la case (style : ligne 123, col 27), voir en codant en hexa. Mais gaffe à ce que le code JS ne fasse pas ramer la machine du client.
Chalex : combien de colonnes / lignes as tu ? Tu peux en dire plus sur le but du jeu et son déroulement ? N'hésite pas à poster ton code.
Cordialement,
Kohntark -
|
|
mercredi 14 janvier 2009 à 12:34:14 |
Re : Chargement page coté navigateur trop long

chalex
|
Bonjour,
avant de répondre, je vous remercie de vous occuper de mon cas (quoi qu'il en soit, je testerai des solutions ce soir)
Comment fonctionne le jeu (pour simplifier je vais dire qu'il n'y a qu'une grille de 8000 case) : dans ma table grille j'ai : id_case(de 1 à 8000) | id_client (état 0 ou 1, 0 par défaut si case pas cliquée) ceci me fait une table de 8000 lignes (1par case | je ne gère pas les lignes/colonnes)
fonctionnement du jeu : la grille est commune à tous les joueurs, si le joueur 121 clique sur la case 48, cette dernière ne sera plus visible par les autres joueurs (d'ou le besoin de rafraichir la grille completement entre chaque clique). Par contre si le joueur 54 ouvre ma page grille.php et qu'entre temps un autre joueur clique sur une case, il ne verra son action qu'une fois son clic(joueur54) effectué ou s'il recharge la page.
L'histoire des 00011100011000000000010010001 me semble pas mal, mais s'il y a 7000 chiffre 1 j'en reviens encore à un code de 7000 lignes uniquement en javascript ?
Le problème sera-t-il le même avec du flash ? entre 1Mega et 10ko je préfère 10 ko...
chalex
|
|
mercredi 14 janvier 2009 à 18:46:07 |
Re : Chargement page coté navigateur trop long

Flachy Joe
|
bon, je réexpliqe, le javascript n'est pas sensé être écrit par le php : 1. Tu as 2 fichiers "affichage" et "traitement" 2. dans "affichage" Javascript : a. boucler pour créer 8000 cases en HTML b. demander à "traitement" la valeur des cases c. boucler sur le résultat de "traitement" pour modifier l'affichage des cases 3. dans "traitement" PHP : a. Boucler sur la base de donnée pour lister les valeurs des cases b. Retourner une chaine de caractère interprétable par le javascript Et voila, tu n'as pas besoin d'une seul goutte de php dans a"ffichage" uniquement du html, du css et du javascript. De même tu n'as besoin de rien d'autre que du php dans traitement. Et tu n'as même pas besoin de raffraichir toute la page pour modifier l'affichage, uniquement que le javascript refasse la demande et boucle à nouveau pour changer l'affichage. Tu économise la création des cases HTML.  Flachy Joe  « Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes. » Les Shadoks<
|
|
mercredi 14 janvier 2009 à 18:53:11 |
Re : Chargement page coté navigateur trop long

Flachy Joe
|
@kohntark Chaque case n'a que 2 état possible : 0 ou 1 or chaque caractère de la chaîne fais 1 octet, soit 8 bits donc on peut y coder l'état de 8 cases. Exemple : le caractère 'a' vaut '97' en code ascii décimal soit "1100001" en binaire, on voit bien là l'état de 8 cases...  Flachy Joe  « Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes. » Les Shadoks
|
|
mercredi 14 janvier 2009 à 21:39:34 |
Re : Chargement page coté navigateur trop long

kohntark
|
@flachy OK, c'est un peu plus clair mais je crains ne pas encore avoir bien saisi. Pourquoi fais tu référence à l'ascii ?? Tu veux coder les cases avec une chaine ascii ?? Je me trompe peut être mais c'est ingérable. Par exemple, comment fais tu pour représenter la 1ère case cochée (ou la 8eme selon le LSB) ? Je reste sur mon codage en hexa qui selon moi est la meilleure solution. Cordialement,
Kohntark -
|
|
mercredi 14 janvier 2009 à 21:51:04 |
Re : Chargement page coté navigateur trop long

kohntark
|
... enfin, la meilleure solution reste les lignes / colonnes, car ça représente l'énorme avantage de n'envoyer qu'une trame "ajax" du style : 10.36 (ligne 10 colonne 36), soit 6 caractères max, qui ne concerne que la case modifiée Inutile donc de laisser des ressources (PHP comme JS) à réécrire toute la grille, sans compter les conversions de base (bindec and Co) C'est sans doute 100 fois plus rapide que les solutions ci dessus.
Kohntark -
|
|
mercredi 14 janvier 2009 à 22:00:30 |
Re : Chargement page coté navigateur trop long

chalex
|
Si j'ai bien compris : 1 - je fais ma grille avec toutes les cases à l'état 0 (case fermée) (avec mes div avec une boucle javascript ?) 2 - je lance mon ajax dans un <div id='recherche'> qui fait une boucle php des infos de ma base sur 8000 cases, j'en reçois : 1100000011010111011000010001... (soit 8000 0 ou 1). 3 - je décompose cette chaine tous les 8 caractères ce qui me donne 1000 octets que je mouline dans une fonction javascript (dans l'ajax?) 4 - je supprime grace à la fonction JS les cases qui sont à 1.
Dis moi si mon cheminement est bon, et dernière question j'utilise bindec comme fonction php pour découper ?
chalex
|
|
mercredi 14 janvier 2009 à 22:24:05 |
Re : Chargement page coté navigateur trop long

chalex
|
Kohntark : si chacun de mes div est du style : <div id='case_n'> avec n incrémenté, ta solution peut fonctionner de récupérer seulement les id_client de ma table qui valent 1 dans un div ajax et de modifier l'apparence du div ?
Pour mieux expliqué 1 - je créer une grille remplie de <div id='case_n' style='width:5px;height:5px;background-image:url(url.jpg);'></div> de 5x5 px (cases remplies) en Javascript 2 - en ajax, je récupère mes numéros de case id_case où id_client == 1 3 - toujours en partant du fichier ajax je fait une sorte de : <script type="text/javascript"> document.getElementById("case_n").style.background = 'url(image_vide.jpg)'; <-- en envoyant ça dans ma grille </script>
est ce que c'est aussi simple ? et ok la page téléchargée sera pas très grande, mais le fait de faire autant de javascript (création de 8000 cases pleines puis supprimer celles déjà utilisées) n'est pas trop lourd pour le client
merci en tout cas pour votre aide, ça m'ouvre plein de perspectives auxquelles je n'avais pas pensé ! chalex
|
|
Cette discussion est classée dans : boucle, chargement, case, navigateur, id
Répondre à ce message
Sujets en rapport avec ce message
Changer l'id de session sans fermer le navigateur [ par micholi ]
Bonjour,je suis pas mal débutant et je me demande s'il est possible en php de changer l'id de session sans que le visiteur ait à fermer son navigateur
Problème PHP avec cases à cocher [ par Ishizaki ]
Bonjour, j'ai un problème que je n'arrive pas à résoudre avec PHP.En fait, je vous explique la situation:Je dois faire des stats en php sur une enquêt
Boucle d'insertion [ par zilachi ]
Bonjour,Je cherche un moyen pour inserer mes enregistrements ( + de 500 ) via une boucle.Certains champs doivent êtres incréméntés automatiquement et
Une boucle au peut spécifique [ par christobal ]
Bonjour, je ten
Bouton radio, case à cocher et boucle if... [ par Sniark ]
Bonjour, J'aimerais faire une boucle avec un bouton radio ou une case à cocher, mais je ne vois pas du tout quelle peut être la syntaxe. En gros, si l
souci avec requete update sql $_post et boucle while [ par jp1871 ]
Bonjour, je viens vous déranger en cete fin de semaine en esperant qu'une âme charitable puisse m'aider si ce que je désir faire est possible merci pa
Comment recuperer les id d une boucle while ?? [ par danaweb2008 ]
Bonjour à tous ! Comment récupérer les id des lignes listée dans la page de présentation des produits pour aller ensuite sur une autre page ? J essais
session et boucle [ par christobal ]
bonjour, j'ai dans une page une boucle qui liste les utilisateurs ainsi qu'un lien qui renvoie sur une 2éme page pour modifier le compte de l'utilisat
Boucle jointure [ par gabi77 ]
BoujourMon probleme est le suivant.J'ai trois table table1, table2, jointure_table1_table2dans jointure_table1_table2 je recupere id_table1 et id_tabl
Help, fonction pour transmettre une variable créer a l'issu d'une boucle [ par romega ]
Salut a vous,Alors je continu dans la création de mon forum, voila un nouveau probleme pour moi. D'abord le code ce sera plus simple :function selectc
Livres en rapport
|
Derniers Blogs
PARUTION DE MON LIVRE SUR WPF 4PARUTION DE MON LIVRE SUR WPF 4 par odewit
La 2e édition de mon livre sur WPF sort aujourd'hui en version numérique et lundi en version papier :-)
L'ouvrage présente de façon approfondie les fonctionnalités de WPF 4 : graphisme 2D et 3D, animation, multimédia, interfaces utilisateur, databind...
Cliquez pour lire la suite de l'article par odewit EDM : COMMENT UTILISER L'HORIZONTAL ENTITY SPLITTINGEDM : COMMENT UTILISER L'HORIZONTAL ENTITY SPLITTING par Matthieu MEZIL
Une des raisons pour lesquelles j'adore l'Entity Framework est la puissance de son mapping. Beaucoup de développeurs pour ne pas dire la plus part n'en n'ont pas conscience. Pour rappel, j'ai réalisé des videos (en anglais) sur le mapping . Certains scena...
Cliquez pour lire la suite de l'article par Matthieu MEZIL [WP7DEV][REACTIVE] RENDRE LES REACTIVE EXTENSIONS PLUS STABLES[WP7DEV][REACTIVE] RENDRE LES REACTIVE EXTENSIONS PLUS STABLES par jay
Lorsque l'on développe des applications .NET, les exceptions non gérées dans des threads ont le désagréable effet de terminer le processus courant.
Dans l'exemple suivant.......(read more) ...
Cliquez pour lire la suite de l'article par jay WINDBG / SOS / PSSCOR2 : FAILED TO LOAD DATA ACCESS DLL (MSCORDACWKS)WINDBG / SOS / PSSCOR2 : FAILED TO LOAD DATA ACCESS DLL (MSCORDACWKS) par coq
Ceux d'entre nous qui analysent des dumps d'applications .NET (notamment ceux créés via WER après un crash) en dehors de l'environnement initial ont probablement tous été confrontés au moins une fois au message suivant, à la saisie d'une commande SOS ...
Cliquez pour lire la suite de l'article par coq
Logiciels
Microsoft Office (2010)MICROSOFT OFFICE (2010)Microsoft Office 2010 offre de nouveaux moyens flexibles et puissants pour optimiser votre travai... Cliquez pour télécharger Microsoft Office SeaMonkey (2.0.7)SEAMONKEY (2.0.7)Le projet SeaMonkey est issu d'un effort communautaire pour developper une application tout en un... Cliquez pour télécharger SeaMonkey Safari (5.0.2)SAFARI (5.0.2)Le navigateur d'Apple a lui aussi été mis à jour, aussi bien dans sa mouture Windows que celle po... Cliquez pour télécharger Safari Mozilla FireFox (4.0 béta 5)MOZILLA FIREFOX (4.0 BéTA 5)Firefox 4.0 béta 5
L'une des nouveautés visibles les plus attendues réside sans doute dans l'a... Cliquez pour télécharger Mozilla FireFox Mozilla Firefox (3.6.9)MOZILLA FIREFOX (3.6.9)Firefox 3.6.9 corrige les problèmes suivants :
* Introduced support for the X-FRAME-OPTION... Cliquez pour télécharger Mozilla Firefox
|