Avatar billede jgp Nybegynder
15. september 2001 - 19:13 Der er 9 kommentarer og
2 løsninger

Stor variable i function, tager tid

Jeg har denne function:
function nyrekke() {
  teller1 = 0; ud = \"\";
  while (fundet[teller1] != null) {
    ud += \"<tr><td><span class=innerramme1>\" + t[fundet[teller1]] + \"</span><span class=innerramme2>\" + n[fundet[teller1]] + \"</span><span class=innerramme3>\" + okeydate(d[fundet[teller1]]) + \"</span></td></tr>\";
    teller1++
  }
  return ud;
}

Hvis fundet[x] indeholder mange records (ca 1000) tager functionen meget lang tid at udføre (ca 20 sek).
Jeg har fundet ud af at det er pga \"ud\" bliver meget stor.

Kan jeg forbedre denne function på nogen måde, hvordan??

På forhånd tak
JGP
Avatar billede roenving Novice
15. september 2001 - 19:22 #1
Kan ikke lige se andre muligheder end at gøre ud mindre -- hvilket måske også ville gøre siden venligere at bruge.

Altså oprette en eller anden paging-funktion og så en bladre-mulighed.

hth
jes
Avatar billede jakoba Nybegynder
15. september 2001 - 19:24 #2
Det ser udsomon du er ved at bygge en tabel. så hvad med at udskrive hvad du har \'indtil videre\' hvergang du har akkumuleret ca 100 rows.
Jeg tipper at der det sker er at du får brugt din ram op og begynder at page-swappe (kun 100 fordi ikke alle har så meget ram som dig)

function nyrekke() {
  teller1 = 0; ud = \"\";
  teller2 = 0
  while (fundet[teller1] != null) {
    ud += \"<tr><td><span class=innerramme1>\" + t[fundet[teller1]] + \"</span><span class=innerramme2>\" + n[fundet[teller1]] + \"</span><span class=innerramme3>\" + okeydate(d[fundet[teller1]]) + \"</span></td></tr>\";
    teller1++
    if ( ++teller2 >=100 ) {
      document.write( ud );
      teller2 = 0;
      ud = \"\";
    }
  }
  return ud;
}

mvh JakobA

reklame: vær rar at svare på  http://www.eksperten.dk/spm/109707
Avatar billede jgp Nybegynder
15. september 2001 - 19:26 #3
roenving: Siden er skam meget bruger venlig, og virker også fint, hvis man specifisere sin søgning til under 100 records.

Problemet er at jeg kun har mulighed for JS, ikke noget asp eller ligende.

Databasen er også bygget op i JS over 3 arrays...
Avatar billede jgp Nybegynder
15. september 2001 - 21:18 #4
Jeg er ikke gået kold:

Jeg har fundet ud af at når jeg alver en += på en varianble, så kopiere den hele strengen over til et ledigt sted i hukommelsen. Så nu leder jeg efter en måde at tilføje til strengen.

Tak for hjælpen, den er stadig værset :-)
Avatar billede jakoba Nybegynder
15. september 2001 - 21:39 #5
du kunne evt fylde strengene i et array, som du så først joiner til allersidst:

function nyrekke() {
  teller1 = 0; ud = new Array();
  while (fundet[teller1] != null) {
    ud[ud.length] = \"<tr><td><span class=innerramme1>\" + t[fundet[teller1]] + \"</span><span class=innerramme2>\" + n[fundet[teller1]] + \"</span><span class=innerramme3>\" + okeydate(d[fundet[teller1]]) + \"</span></td></tr>\";
    teller1++
  }
  return ud.join(\"\\n\");
}

mvh JakobA
Avatar billede olebole Juniormester
16. september 2001 - 15:05 #6
<ole>
Problemet er nok snarere, at du danner en række og skriver den ud - danner en ny og skriver dén ud, osv. Det er en meget ineffektiv og langsom måde at skrive HTML ud på. Du skal i stedet bygge hele strengen og skrive den ud til sidst.
1000 tabelrækker af den størrelse, du viser, bør ikke volde problemer - med mindre indholdet i span\'ene er meget omfangsrigt.
/mvh
</bole>
Avatar billede olebole Juniormester
16. september 2001 - 15:24 #7
Måske, du skulle checke dette link og få optimeret din kode:
    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnwebgen/html/dhtmlperf.asp
/mvh
Avatar billede jakoba Nybegynder
16. september 2001 - 16:46 #8
test af løbende konkatenering
versus array der joines tilsidst:
http://hjem.get2net.dk/Jakob.Aggernaes/temp/exp109806.html

kik i koden for detallier.

mvh JakobA
Avatar billede roenving Novice
17. september 2001 - 01:29 #9
Ja, de\'r zq forskel (202.xx vs. 0,77 for 10000)
Tak for ideen ;·]
Avatar billede jgp Nybegynder
17. december 2001 - 09:09 #10
Tak for hjælpen.

Ked af der er gået så lang tid før problemet blev lukket.

God Jul
JGP
Avatar billede jgp Nybegynder
17. december 2001 - 09:16 #11
olebole: Jeg danner en streng, og skriver den ud.

Problemet er at jeg adder mange gange til denen streng for jeg skriver den ud.

Jeg mangler en funktion som Stringbuffer
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