[javascript] zoek een soort flush() functie

Pagina: 1
Acties:

  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
Veel serverside scripttalen kennen een flush() functie, waarmee je de output naar de client gooit terwijl het script nog bezig is met draaien.
En ik zoek ook zoiets voor javascript :)

Probleem: Ik heb een zoekfunctie gemaakt (in javascript dus) die vaak nogal lang duurt. Om de gebruiker te laten weten dat ie (nog) aan het zoeken is geef ik een textje weer op het moment dat ie begint met zoeken en haal die weer weg als ie klaar is. IE vertikt het alleen om die tekst weer te geven (mozilla doet het wel goed). Hij doet dat pas als het script al af is, maar haalt 'm dan ook gelijk weer weg (zoals moet) (en zo snel dat je het niet ziet).
Dat weet ik omdat als ik een alert() doe nadat ik die text weergeef, de tekst wél in beeld komt. Maarja, zo'n alert is lelijk en slaat verder nergens op, dus dat vind ik geen oplossing. Heb het ook nog met een timeout geprobeerd, maar helaas.
Kon er met de search en google niets over vinden. Hoop dat iemand hier misschien een idee heeft.

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 12:16

crisp

Devver

Pixelated

toch timeouts gebruiken, dan geef je de browser even de tijd om te renderen ;)
(waarschijnlijk had je het niet goed toegepast)

[ Voor 28% gewijzigd door crisp op 06-06-2005 18:11 ]

Intentionally left blank


  • MTWZZ
  • Registratie: Mei 2000
  • Laatst online: 13-08-2021

MTWZZ

One life, live it!

Je kunt proberen aan het begin van je search functie een setTimeout te doen en die een functie te geven die dat tekstje weergeeft.
De timeout zet je bijvoorbeeld op 1 ms zodat ie praktisch direct wordt weergegeven. Het handige is dat die setTimeout in een aparte thread draait en dus niet wacht op de rest van het script.
:X Crisp is me voor :P

[ Voor 5% gewijzigd door MTWZZ op 06-06-2005 18:12 ]

Nu met Land Rover Series 3 en Defender 90


  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
crisp schreef op maandag 06 juni 2005 @ 18:10:
toch timeouts gebruiken, dan geef je de browser even de tijd om te renderen ;)
(waarschijnlijk had je het niet goed toegepast)
zeg maar wat hier fout aan is dan :)
JavaScript:
1
2
3
4
5
6
        var statusEl = document.getElementById('progress');
        var statusText = 'Processing Filter ... please wait';
        showFeedback(statusEl, statusText);
        setTimeout('', 100);
        setTimeout('showFeedback(statusEl, statusText)', 100);
        setTimeout('document.getElementById("progress").innerHTML="processing"', 100);


Heb het zoals je ziet op drie manieren geprobeerd: door een timeout te geven na het weergeven van de tekst en door de tekst via de timeout weer te geven - via een functie en rechtstreeks

Verwijderd

Het kan zijn dat je systeem zo druk bezig is met je scripting dat die progress wel wordt doorgegeven maar niet kan worden gerenderd omdat je browser zijn resources ervoor niet beschikbaar heeft. Eigenlijk hebben we meer code nodig, namelijk wat je doet, want ik denk dat je daar een pauze functie in zult moeten plaatsen om je browser de mogelijkheid (de resources meer) te geven die progress bar te renderen.

En wat je altijd kunt doen is twee threads aanmaken, eentje die met 35ms een berekening uitvoert, en eentje die met 30ms de progress bar bijwerkt. Die lopen simultaan en onafhankelijk van elkaar, ze zorgen voor hun eigen taken.

[ Voor 23% gewijzigd door Verwijderd op 07-06-2005 08:38 ]


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 12:16

crisp

Devver

Pixelated

zoiets:
JavaScript:
1
2
3
4
5
6
7
8
9
10
function initProcess()
{
  document.getElementById("progress").innerHTML="processing";
  setTimeout('Process()', 10);
}

function Process()
{
  // hier je echte processing
}

Intentionally left blank


  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
Ah, aan die mogelijkheid had ik nog niet gedacht!
Thnx, it works like a charm
Pagina: 1