Avatar billede naquer Nybegynder
23. august 2011 - 14:02 Der er 8 kommentarer og
1 løsning

Javascript får side til at loade langsomt

Hejsa

Jeg har noget javascript i mit <head> som medfører at min side tager flere sekunder hver gang den loades.
Kan i forklare mig hvorfor disse scripts får siden til at køre langsomt og om jeg på noget måde kan optimere dem:

/** Script **/

function showUser(str)
{
if (str=="")
  {
  document.getElementById("txtHint").innerHTML="";
  return;
  }
if (window.XMLHttpRequest)
  {// code for IE7+, Firefox, Chrome, Opera, Safari
  xmlhttp=new XMLHttpRequest();
  }
else
  {// code for IE6, IE5
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
xmlhttp.onreadystatechange=function()
  {
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
    document.getElementById("txtHint").innerHTML=xmlhttp.responseText;
    }
  }
xmlhttp.open("GET","getuser.php?q="+str,true);
xmlhttp.send();
}

function showUser2(str)
{
if (str=="")
  {
  document.getElementById("txtHint2").innerHTML="";
  return;
  }
if (window.XMLHttpRequest)
  {// code for IE7+, Firefox, Chrome, Opera, Safari
  xmlhttp=new XMLHttpRequest();
  }
else
  {// code for IE6, IE5
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
xmlhttp.onreadystatechange=function()
  {
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
    document.getElementById("txtHint2").innerHTML=xmlhttp.responseText;
    }
  }
xmlhttp.open("GET","getindhold.php?q="+str,true);
xmlhttp.send();
}

  function showUser4(str){
        var js_ar = new Array();
       
        if (str=="")  {
            document.getElementById("txtHint3");
            return;
        }
        if (window.XMLHttpRequest)  {// code for IE7+, Firefox, Chrome, Opera, Safari
            xmlhttp=new XMLHttpRequest();
        }
        else  {// code for IE6, IE5
            xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
        }
        xmlhttp.onreadystatechange=function()  {
            if (xmlhttp.readyState==4 && xmlhttp.status==200)    {
                js_ar = JSON.parse(xmlhttp.responseText);               
                document.getElementById("img1").src = js_ar['billede']+".jpg";
                document.getElementById("tekst1").innerHTML = js_ar['beskrivelse'];
                document.getElementById("konklusion").innerHTML = js_ar['konklusion'];

               
            }
        }
        xmlhttp.open("GET","getbeskrivelse.php?q="+str,true);
        xmlhttp.send();
    }


function showUser3(str)
{
if (str=="")
  {
  document.getElementById("txtHint4").innerHTML="";
  return;
  }
if (window.XMLHttpRequest)
  {// code for IE7+, Firefox, Chrome, Opera, Safari
  xmlhttp=new XMLHttpRequest();
  }
else
  {// code for IE6, IE5
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
xmlhttp.onreadystatechange=function()
  {
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
    document.getElementById("txtHint4").innerHTML=xmlhttp.responseText;
    }
  }
xmlhttp.open("GET","getright.php?q="+str,true);
xmlhttp.send();
}


</script>
    <script type="text/javascript">
        $(document).ready(function() {
           
            $("#various3").fancybox({
                'width'                : 620,
                'height'            : '75%',
                'autoScale'            : false,
                'transitionIn'        : 'none',
                'transitionOut'        : 'none',
                'type'                : 'iframe'
            });

        });
    </script>
Avatar billede ggxdg Nybegynder
23. august 2011 - 14:56 #1
Hvor kalder den "showUser" funktionerne?
Avatar billede naquer Nybegynder
23. august 2011 - 15:03 #2
De bliver bl.a. kaldt fra forms og links længere nede på siden.

Grunden til at jeg mistænker ovenstående for at tage lang tid om at køre, er at jeg har noget php script lige under headeren, som videresender brugeren til login.php, hvis vedkomne ikke er logget ind.

Dette tager gerne 5 sekunder at køre, hvorfor jeg mistænker javascripten for at forårsage den langsomme loadtid
Avatar billede olsensweb.dk Ekspert
23. august 2011 - 16:52 #3
har du tænkt over den sammen variabel findes i flerer functioner, (der kan være flerer variabler der også anvendes i flere functioner)

xmlhttp anvendes i showUser, showUser2, showUser4

årsagen er at unden var når den bliver erklæret, så er det en global variabel :(

løsning:
if (window.XMLHttpRequest)  {// code for IE7+, Firefox, Chrome, Opera, Safari
    xmlhttp=new XMLHttpRequest();
}
else  {// code for IE6, IE5
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
laves om til
if (window.XMLHttpRequest)  {// code for IE7+, Firefox, Chrome, Opera, Safari
    var  xmlhttp=new XMLHttpRequest();
}
else  {// code for IE6, IE5
    var xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
Avatar billede olsensweb.dk Ekspert
23. august 2011 - 17:00 #4
det med var lærte jeg selv her
http://www.eksperten.dk/spm/941682#reply_7798406
Avatar billede olebole Juniormester
23. august 2011 - 18:22 #5
<ole>

Der burde ikke være noget i koden, du viser, som kan sinke afviklingen - med mindre, det er jQuery-dimsen. Alle dine andre funktioner foretager asynkrone kald, så de bør ikke kunne bremse noget.

Læg et link til siden, så vi kan få en idé om, hvad der sker

/mvh
</bole>
Avatar billede naquer Nybegynder
27. august 2011 - 16:07 #6
Mange tak for svarene.
Jeg har læst din link igennem ronols og er blevet klogere.

Jeg har imidlertid forsøgt mig med et nyt webhotel og det ser ud til at forbedre performance markant.

Også tak for svaret til dig ole.

I smider bare et svar
Avatar billede naquer Nybegynder
30. august 2011 - 22:47 #7
Lukket
Avatar billede majbom Novice
31. august 2011 - 12:27 #8
husk at accepter svaret...
Avatar billede naquer Nybegynder
31. august 2011 - 18:15 #9
God pointe :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester