Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1700 connectés 

  FORUM HardWare.fr
  Programmation
  HTML/CSS

  Comment alléger le plus possible une grille de 1400 liens ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Comment alléger le plus possible une grille de 1400 liens ?

n°1418597
Dj YeLL
$question = $to_be || !$to_be;
Posté le 02-08-2006 à 22:37:50  profilanswer
 

Bonsoir,
 
J'ai une page sur laquelle il y a une grille de 1400 élements (20*70), parmis lesquels l'utilisateur doit choisir.
 
Au départ ça ressemblait à ça :
 

<a class="free" href="?act=chx&anim=1&duration=12&cell=1x1" />1x1</a>


 
Multiplié par 1400 ça faisait beaucoup.
 
J'ai ensuite diminué petit à la taille pour arriver à ça :
 

<input type="submit" name="c" value="1x1" />


 
Ça fait tjs gagner des ko.
 
Au final, j'arrive à un page pesant 60ko au total. J'ai gagné presque 50% de poids depuis le début. Mais je me demandais s'il n'y avait pas un truc encore plus bête auquel je ne pense pas, pour réduire encore plus le poids de la page. Si possible sans utilisation de JS.
 
Merci par avance :)


---------------
Gamertag: CoteBlack YeLL
mood
Publicité
Posté le 02-08-2006 à 22:37:50  profilanswer
 

n°1418608
nargy
Posté le 02-08-2006 à 22:54:58  profilanswer
 

hehe.. primo, tu peut virer les ", le / et l'espace en  trop.
Celà necessite que tu passe en HTML transitional.


Message édité par nargy le 02-08-2006 à 22:55:54
n°1418621
Dj YeLL
$question = $to_be || !$to_be;
Posté le 02-08-2006 à 23:12:44  profilanswer
 

En effet, sauf que tout le site est développé pour du XHTML.
 
De toute façon je me demandais surtout s'il n'y avait pas quelque chose à laquelle je ne pensais pas qui me permettrait de réduire radicalement la taille...
 
Par exemple, sur une page qui affichait 500 balises img, avec leur contenu, toutes identiques, j'ai réfléchi un peu, et j'ai transformé ça en un background-image, avec un repeat par exemple, donc ça a changé radicalement la donne...
 
D'ailleurs ça me fait penser à un truc du même style pour cette page ci... je me demande si j'aurais pas moyen de me demerder avec un <input type="image" />... car ça renvoi les coordonnées du clic ...
 
Je vais voir si je peux creuser de ce côté là.
 
Merci pour ta proposition en tout cas :jap:


Message édité par Dj YeLL le 02-08-2006 à 23:13:00

---------------
Gamertag: CoteBlack YeLL
n°1418646
nargy
Posté le 02-08-2006 à 23:36:25  profilanswer
 

Perso, je creuserai du côté de javascript.
Un petit <noscript><a>Comme vous n'avez pas JavaScript le site va ramer un peu pour vous, ne recommencez plus ou cliquez sur ce gros lien pabo</a></noscript> et le tour est joué.

n°1418722
anapajari
s/travail/glanding on hfr/gs;
Posté le 03-08-2006 à 09:42:09  profilanswer
 

T'as besoin de faire quoi exactement :??:
En gros t'as une grille et tu veux savoir ou à cliquer l'utilisateur?

n°1418859
Dj YeLL
$question = $to_be || !$to_be;
Posté le 03-08-2006 à 13:12:17  profilanswer
 

Plus ou moins oui.
 
En fait c'est une grille avec 1400 emplacements, les utilisateurs peuvent en reserver un ou plusieurs.
 
Quand les gens arrivent sur la page de reservation, la grille s'affiche, avec des couleurs differentes (4) selon le type de case :
 
Libre = Bleu clair
Occupée = Bleu foncé
Selectionnée = Vert
Erreur = Rouge
 
Les infos de chaque cases sont tirées d'une BDD


---------------
Gamertag: CoteBlack YeLL
n°1418876
anapajari
s/travail/glanding on hfr/gs;
Posté le 03-08-2006 à 13:46:58  profilanswer
 

tiens comme j'avais un peu de temps entre midi et deux et que ton truc m'amusait j'ai fait ça:

Code :
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  2.   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" >
  4. <head>
  5.   <meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
  6.   <title>Exemple</title>
  7.   <style type="text/css">
  8.   .grid{
  9.     background-color: #00FFFF;
  10.   }
  11.   .used{
  12.     position: absolute;
  13.     background-color: #0000FF;
  14.   }
  15.   .selected{
  16.     position: absolute;
  17.     background-color: #00FF00;
  18.   }
  19.   .error{
  20.     position: absolute;
  21.     background-color: #FF0000;
  22.   }
  23.   </style>
  24.   <script type="text/javascript">
  25. function Grid( width, height, arWidth, arHeight){
  26.   this.width = width==null?100:width;
  27.   this.height = height==null?100:height;
  28.   this.arWidth = arWidth==null?10:arWidth;
  29.   this.arHeight = arHeight==null?10:arHeight;
  30.   this.gridNode = document.createElement('div');
  31.   this.gridNode.className = "grid";
  32.   this.gridNode.style.height = this.height+'px';
  33.   this.gridNode.style.width = this.width+'px';
  34.   this.selArray = new Array();
  35.   var self = this;
  36.   this.gridNode.onclick= function (event){
  37.     if(!event) var event=window.event;
  38.     if (document.all){ cX=event.clientX; cY=event.clientY; }
  39.     else {cX=event.pageX; cY=event.pageY; }
  40.     self.addElem(Math.floor((cX - self.pX)/self.arWidth), Math.floor((cY - self.pY)/self.arHeight), 'selected');
  41.    
  42.   }
  43.   document.getElementsByTagName('body')[0].appendChild(this.gridNode);
  44.   this.pX = 0;
  45.   this.pY = 0;
  46.   var element = this.gridNode;
  47.   while (element!=null){
  48.     this.pX +=element.offsetLeft-element.scrollLeft;
  49.     this.pY +=element.offsetTop-element.scrollTop;
  50.     element=element.offsetParent;
  51.   }
  52.   return true;
  53. }
  54. Grid.prototype.addElem = function (row,col, type){
  55.   if ( this.isSet(row, col) ){
  56.     return false;
  57.   }
  58.   this.selArray.push({'x':row, 'y':col, 'type':type});
  59.   var arNode = document.createElement('div');
  60.   arNode.row = row;
  61.   arNode.col = col;
  62.   arNode.className=type;
  63.   arNode.style.left = ( arNode.row*this.arWidth + this.pX)+'px';
  64.   arNode.style.top = ( arNode.col*this.arHeight + this.pY)+'px';
  65.   arNode.style.width = this.arWidth+'px';
  66.   arNode.style.height= this.arHeight+'px';
  67.   document.getElementsByTagName('body')[0].appendChild(arNode);
  68.   if ( type!= 'error' && type!='used'){
  69.     var self = this;
  70.     arNode.onclick = function (e){
  71.       self.removeElem(this);
  72.     }
  73.   }
  74.   return true;
  75. }
  76. Grid.prototype.removeElem = function ( elem){
  77.   var nA = new Array();
  78.   for (var i=0; i<this.selArray.length; i++){
  79.     if ( this.selArray[i]['x'] != elem.row ||  this.selArray[i]['y'] != elem.col){
  80.       nA.push( this.selArray[i]);
  81.     }
  82.   }
  83.   this.selArray = nA;
  84.   elem.parentNode.removeChild(elem);
  85.   return true;
  86. }
  87. Grid.prototype.dispContent = function(){
  88.   var r = '';
  89.   for(var i =0; i<this.selArray.length; i++){
  90.     r+="row:"+this.selArray[i]['x'] +"\tcol:"+this.selArray[i]['y']+"\ttype:"+this.selArray[i]['type']+"\n";
  91.   }
  92.   return r;
  93. }
  94. Grid.prototype.fill = function( type, arr){
  95.   for(var i in arr){
  96.     this.addElem(arr[i]['x'], arr[i]['y'], type)
  97.   }
  98.   return true;
  99. }
  100. Grid.prototype.isSet = function (row, col){
  101.   for(var i =0; i<this.selArray.length; i++){
  102.     if ( this.selArray[i]['x'] == row && this.selArray[i]['y'] == col ){
  103.       return true;
  104.     }
  105.   }
  106.   return false;
  107. }
  108. function main(){
  109.   var gs = new Grid(400,400, 20, 20);
  110.   var usedArea = new Array(
  111.       {'x':1, 'y':1},
  112.       {'x':4, 'y':6},
  113.       {'x':7, 'y':5},
  114.       {'x':3, 'y':4}
  115.   );
  116.   gs.fill('used', usedArea);
  117.   var errorArea = new Array(
  118.       {'x':7, 'y':7},
  119.       {'x':5, 'y':4},
  120.       {'x':7, 'y':6},
  121.       {'x':10, 'y':10}
  122.   );
  123.   gs.fill('error', errorArea);
  124.   var expNode = document.createElement('input');
  125.   expNode.setAttribute('type','button');
  126.   expNode.value='Afficher';
  127.   expNode.onclick = function (e){
  128.     alert(gs.dispContent());
  129.   }
  130.   document.getElementsByTagName('body')[0].appendChild(expNode);
  131. }
  132. window.onload=main;
  133.   </script>
  134. </head>
  135. <body>
  136. </body>
  137. </html>


Ca doit faire ce que tu veux ( si j'ai tout compris ;) )...
Il ne te reste qu'a initialiser les tableaux used et error pour que ça remplisse correctement en fonction de la bdd.
Et oui je sais y'a pas de commentaires mais j'avais pas trop le temps!

Message cité 1 fois
Message édité par anapajari le 03-08-2006 à 13:48:57
n°1418890
Dj YeLL
$question = $to_be || !$to_be;
Posté le 03-08-2006 à 13:53:32  profilanswer
 

anapajari a écrit :

tiens comme j'avais un peu de temps entre midi et deux et que ton truc m'amusait j'ai fait ça:

Code :
  1. ...


Ca doit faire ce que tu veux ( si j'ai tout compris ;) )...
Il ne te reste qu'a initialiser les tableaux used et error pour que ça remplisse correctement en fonction de la bdd.
Et oui je sais y'a pas de commentaires mais j'avais pas trop le temps!


 
La vache ... ben merci beaucoup :)
 
Je vais essayer de modifier ça pour l'adapter à ce que je veux, mais dans les grandes lignes oui, c'est bien.
 
Merci beaucoup :jap: Ça m'aurait pris 2 mois à faire ça en JS :D
 
Je te tiens au courant :)


---------------
Gamertag: CoteBlack YeLL
n°1419660
vomegaz
~Libriste & Gulden Draak fan~
Posté le 04-08-2006 à 13:29:44  profilanswer
 

utilise aussi la mise en cache.

n°1419701
anapajari
s/travail/glanding on hfr/gs;
Posté le 04-08-2006 à 14:19:30  profilanswer
 

vomegaz a écrit :

utilise aussi la mise en cache.


Explique moi comment tu peux mettre en cache une page avec 1400 liens qui peuvent tous changer à tout instant ( passer de class free à used ou error )...

mood
Publicité
Posté le 04-08-2006 à 14:19:30  profilanswer
 

n°1421745
vomegaz
~Libriste & Gulden Draak fan~
Posté le 07-08-2006 à 18:14:28  profilanswer
 

désolé j'avais pas lu tous le poste. je croyais qu'il sagisé d'une page fabirque à partir d'une base de donnée avec php...

n°1422068
Dj YeLL
$question = $to_be || !$to_be;
Posté le 08-08-2006 à 09:02:22  profilanswer
 

Bon, merci pour votre aide.
 
Grâce à vous, et notamment au script JS d' anapajari, j'ai réussi à tout faire en Php/Html avec des calques et un input type="image".
 
Lorsque je clique quelque part, le script reçoit les coordonnées, et après quelques calcul les transforme en dimensions pour un calque (en class used, error, select ...), que je place en absolute, le rendu est nickel, et compatible tout navigateur apparement (faut juste faire un calcul en plus avec le moteur Gecko – Firefox)
 
Du coup au lieux de 0.9 secondes de chargement et d'une page à 65ko, je tombe à 0.02 secondes de chargement et une page à 2ko :)
 
Encore merci :jap:


---------------
Gamertag: CoteBlack YeLL

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  HTML/CSS

  Comment alléger le plus possible une grille de 1400 liens ?

 

Sujets relatifs
Est-il possible de charger une page WEB dans une cellule de tableau ?Est-il possible de réduire la hauteur d'un formulaire?
(Abandonné) statistiques site : liens externesnbr de site perso possible chez Free
Est-ce possible ?Cela est t'il possible avec un text box ?
Validation de liens google maps[Swing] Un Jtree de JPanels... possible ? Si oui comment ?
[C] "correspondance" possible entre FILE * et socket ? [résolu] 
Plus de sujets relatifs à : Comment alléger le plus possible une grille de 1400 liens ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR