25. april 2002 - 01:32Der er
11 kommentarer og 1 løsning
Mit website loader dårligt
Jeg er igang med et website, som desværre loader utrolig dårligt. Billederne kommer stille og roligt et ad gangen, hvilket i mit tilfælde er meget dårligt. Jeg har prøvet at forebygge dette med et javascript, som skal loade billederne, før siden vises. Funktionen der loader, se således ud:
function MM_preloadImages() { var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array(); var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++) if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
at preloade billederne vil jo ikke gøre siden hurtigere - derimod vil brugerne få en lang og unødig ventetid...
det mest optimale at gøre er at skære ned i antallel af billeder hvis du har mange, og så selvfølgelig det mest primære; optimér dine billeder til at fylde mindst muligt - det glemmer mange!
Svar til keysersoze: Tro mig, der er skåret ned i billederne. Mange af dem er optimeret gif-filer, og jeg har så vidt muligt brugt baggrundsfarver på tables el.lign. for at spare på resourcerne. De billeder, der er blevet brugt, er yderst nødvendige og skal med. Siden tager heller ikke lang tid at loade, men det at billerne loader et ad gangen ødelægger utrolig meget.
svar til =maddog= : Jeg er ikke helt med. Må referenser til billerne ikke være inkluderet i <IMG>. Hvordan laves det så? Når jeg refererer til billederne, sker det således:
Der her vi problemet. Ser du når browseren læser HTML koden gør den sådan her <BODY> <- Browser tænker: AHA, nu begynder siden. <IMG src="etellerandet.gif"> <- Browser tænker: AHA, her er et billede. Det downloader jeg. </BODY> <- Browser tænker: OK, nu er siden færdig. Nu kan jeg udføre onload. Du får altså ikke noget for pengene hvis dine IMG's indeholder referencer. En måde at gøre det på kunne være nedenstående. Håber det er klart nok. <html><head><script LANGUAGE="javascript"> var pics = new Array("metal.gif","left.gif", "Attempt.gif"); var loadPics = new Array(); function loadImg() { for (i=0;i!=pics.length;i++) { // først loader vi billederne loadPics[i] = new Image() loadPics[i].src = pics[i] } for (i=0;i!=document.images.length;i++) { if (i >= pics.length) { alert('der er for få filnavne!!'); return false;} document.images[i].src = loadPics[i].src // så sætter vi dem ind } } </script></head><body onload="loadImg();"> <img alt="metal.gif"> <img alt="left.gif"> <img alt="Attempt.gif"> </body></html>
Det holder ikke! At sætte en hvid ugennemsigtig forgrund med en statusbar på indtil alle billederne er loaded, er ikke lige det jeg har brug for. Forstil dig, hvordan det ser ud, når hvert eneste subsite skal loades på den måde! Desuden skal denne forgrunds dimension begrænses med bredde og højte, og da mine subsites tager form efter en databasesøgning dvs. en udefinerbar størrelse, så vil dele af sitet være dækket er forgrunden og andre ikke! Det mit spørgsmål lå i, var hvordan man loader billederne på sit site før sitet vises i browsweren. Min egen udgave skulle kunne klare det, men der er åbenbart nogle fejl, jeg ikke har taget højde for.
jamen onload bliver først exekveret når browseren når </body> tagget. det du vil have er at billederne loades i en cache før siden vises og det må jeg vist desværre strække våben overfor. jeg ser problemet men jeg kan ikke se løsningen. beklager at have spildt din tid :-(.
der er en ret dum og forkvaklet løsning som jeg helt skammer mig over at foreslå. I stedet for at skrive siden i ren HTML kan du først kalde din cache funktion og så skrive resten af siden med document.write(). JavaScript udføre sekventielt så intet bliver skrevet før cachen er fyldt.
Det er så ikke lige sådan noget jeg er ude efter! Og forøvrigt tak for forslaget! Jeg vil bare have en gangske almindelig preloade funktion, der ikke laver alt muligt smart med at dække siden med en statusbar+baggrund indtil billederne er loaded. Jeg ved det kan lade sig gøre, for jeg har lavet det før ... for et par år siden. Men dårlig husker!
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.