Forum Programmation.web Performances ajax ?

Posté par  .
Étiquettes : aucune
0
12
fév.
2007
Bonjour,
J'utilise AJAX pour récupérer une commande système simple, qui prends environ 1 seconde à s'exécuter. (et qui fait un print dans une page php, elle même renvoyée par xmlhttprequest en responseText)
Sur la page web, il faut attendre plus de 10 secondes pour voir le résultat de la page. (j'ai testé le script hors ajax, et il prends 1 seconde d'exécution environ.)

Donc, c'est le navigateur qui attends la réponse.. un peu longtemps !

P.S je sais que innerHTML c'est pas un standard, mais je n'ai pas pris le temps de trouver mieux...

Code:

function xmlhttpPost(strURL, form_name,div_id) {
var xmlHttpReq = false;
var self = this;
// Mozilla/Safari
if (window.XMLHttpRequest) {
self.xmlHttpReq = new XMLHttpRequest();
}
// IE
else if (window.ActiveXObject) {
self.xmlHttpReq = new ActiveXObject("Microsoft.XMLHTTP");
}
self.xmlHttpReq.open('POST', strURL, true);
self.xmlHttpReq.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
self.xmlHttpReq.onreadystatechange = function() {
if (self.xmlHttpReq.readyState == 4) {
updatepage(self.xmlHttpReq.responseText, div_id);
}
}
self.xmlHttpReq.send(getquerystring(document.forms[form_name]));
}

function getquerystring(Form) {
/*var form = document.forms[form_name];
var word = form.word.value;
qstr = 'w=' + escape(word); // NOTE: no '?' before querystring
return qstr;
*/
var data=""
for (key in Form.elements) {
data+=escape(Form.elements[key].name)+"="+escape(Form.elements[key].value)+"&";
}
return data.substr(0, data.length-1);
}

function updatepage(str, div_id){
document.getElementById(div_id).style.display='block';
if (str.length>0) document.getElementById(div_id).innerHTML = str;
}



Y a-t-il un moyen de remédier à cela ?
Sous IE7, cela ne fonctionne tout simplement pas.
  • # mea culpa

    Posté par  . Évalué à 1.

    .. c'est ma faute, le script contenant une erreur (suite à un flag) qui prennait du temps.

    Bonne journée.
    • [^] # Re: mea culpa

      Posté par  (site web personnel) . Évalué à 2.

      Hum, simple info, si tu utilise du .innerHTML => reparse de la page html a chaque fois ça bouffe un max de temps...

      Creation a la volée de l'arbre dom => instantané (mais plus de code)

      Regarde les extensions de firefox un a un truc génial qui te donne l'arbre dom du document.

      Pose un id=XXX dans ton div parent et amuse toi a coup de :
      var parent = document.getElementById('XXX');
      parent.appendChild(document.createElement('div'));

      Enfin un code de ce genre.
      • [^] # Re: mea culpa

        Posté par  . Évalué à 2.

        [pub]
        Regarde du côté de Prototype aussi (ou autres frameworks), ça va te simplifier la vie, notament pour la compatibilité entre navigateurs.
        [/pub]

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.