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
SESSION SILVERLIGHT 5 3D : SLIDES ET DEMOSSESSION SILVERLIGHT 5 3D : SLIDES ET DEMOS par Groc
Durant les techdays, j'ai eu le plaisir d'animer une session sur Silverlight 5 et la 3D avec Simon Ferquel. Comme promis, voici nos slides et mes démos (celles avec le viper BSG) ici et là. Pour mémoire, les démos utilisent toutes le viper BSG...
Cliquez pour lire la suite de l'article par Groc [TECHDAYS 2012] SESSION WEBMATRIX 2 : LE COUTEAU SUISSE GRATUIT POUR VOS DéVELOPPEMENTS WEB - SLIDES[TECHDAYS 2012] SESSION WEBMATRIX 2 : LE COUTEAU SUISSE GRATUIT POUR VOS DéVELOPPEMENTS WEB - SLIDES par gpommier
Suite à la session que j'ai présenté sur WebMatrix 2, vous pouvez trouver les slides ici, ainsi que les démos en packages nuget : démos1 et démos2 J'en profite pour remercier chaleureusement tous ceux qui sont venus très nombreux à cette sess...
Cliquez pour lire la suite de l'article par gpommier [SHAREPOINT] LES SESSIONS TECHDAYS 2012.[SHAREPOINT] LES SESSIONS TECHDAYS 2012. par Patrick Guimonet
Voici donc pour ceux qui n'ont pas pu venir, ou ceux qui n'ont pas pu toutes les suivre la liste des sessions SharePoint aux TechDays 2012, que je mettrais à jour dès que les liens des vidéo seront disponibles. Ou ici : http...
Cliquez pour lire la suite de l'article par Patrick Guimonet TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3 par ROMELARD Fabrice
Speaker: Bernard Ourghanlian Cette session est comme chaque jour transmise en live par BrainSonic, et j'ai donc suivi cette troisième pleinière par ce moyen sur mon iPad . Elle est dédiée comme chaque année à la mise en perspective de l'é...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE !MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE ! par Vko
Hier durant une session dédiée aux Techdays 2012, j'ai eu le plaisir d'annoncer la sortie de la Béta 2 de Mishra Reader. C'est quoi ? Pour les utilisateurs, c'est une vraie expérience de lecture de flux RSS sur Windows. Rien à voir avec les produit...
Cliquez pour lire la suite de l'article par Vko
Logiciels
Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning COLLECTOR PLUS (3.00B)COLLECTOR PLUS (3.00B)COLLECTOR PLUS version 3.00B est un logiciel utilisant une base de données alimentée par :
- L... Cliquez pour télécharger COLLECTOR PLUS PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO LettresFaciles 2011 (8.0.0.1)LETTRESFACILES 2011 (8.0.0.1)LettresFaciles est un logiciel facilitant la création et la rédaction de lettres types.
Son inte... Cliquez pour télécharger LettresFaciles 2011
|