Langzame asynchrone ajax request lockt browser

Pagina: 1
Acties:

  • BCC
  • Registratie: Juli 2000
  • Laatst online: 22:31
De situatie is als volgt:

Ik heb een tabel met serverinfo. De realtime informatie van deze servers (mem, hdspace) vraag ik op via een Ascynchroon Ajax request. Nou zijn sommige servers vrij traag en duurt het een seconde of 3/4 voordat er een response komt.

Nu komt het probleem: Op het moment dat er een wachtend ajax-request is, kan de gebruiker niet naar een andere pagina. De browser lockt dit. Dit gebeurt zowel bij Firefox, IE als Safari.

Een oplossing die ik nu heb is bij de het klikken van een link een stukje javascript uit te voeren die de uitstaande ajax requests abort. Dit gaat bij de "snelle" goed, maar bij de trage lijkt dit weinig effect te hebben.

De vraag: kent iemand dit probleem en weet iemand een oplossing :)?

[ Voor 6% gewijzigd door BCC op 27-10-2006 12:13 ]

Na betaling van een licentievergoeding van €1.000 verkrijgen bedrijven het recht om deze post te gebruiken voor het trainen van artificiële intelligentiesystemen.


  • om3ega
  • Registratie: Maart 2001
  • Laatst online: 01-12 23:04
Ik (her)ken het probleem ook. Ik heb een script gemaakt wat diverse (remote) locaties pingt. Dit gebeurd in seperate asynchrone requests. Ik heb dit express zo gedaan zodat bij een trage verbinding of timeout het script gewoon door kan gaan.

Dat werkt ook inderdaad goed , maar je kan niet weg-navigeren van deze pagina voordat alle asynchrone acties zijn uitgevoerd :) .. Ik heb me nog niet verdiept in een oplossing.

  • BCC
  • Registratie: Juli 2000
  • Laatst online: 22:31
Na het lezen van dit:
http://groups.google.nl/g...=4&hl=nl#ff075b3ff6abe4ca

Heb ik de controller die mijn Ajax requests route uit de sessie gegooid:
ENABLESESSIONSTATE = False

Dit is een security risk... maar het probleem is wel weg. Waarom werkt dit?
Blijkbaar zitten de verschillende sessies elkaar in de weg. Dit is mijn Theorie:

Om te zorgen dat een user niet een server down kan brengen door 1000000 requests te doen, worden requests die gemaakt worden in dezelfde sessie sequentieel afgehandeld. Ik communiceer Asynchroon vanaf mijn browser via Ajax met een AjaxController die mijn Ajax request doorstuurd naar een andere server. De AjaxController is gewoon een ASP bestand en valt daarom binnen de sessie. Deze controller is uiteraard Synchroon (als in: hij haalt een bestandje op van een remote server en laat deze zien). Op dat moment is de server dus al bezig om een request af te handelen voor mijn sessie. Aangezien dit 3 à 4 seconden kan duren, kan ik in de tussentijd wel een nieuwe pagina aanvragen, maar wordt deze pas geserveerd nadat de AjaxController klaar is. Het uit de sessie schoppen van de controller lost dit probleem dus op.

Dit gedrag is dus te wijten aan het feit dat server-software nog niet voldoende geschikt is voor Ajax. Ik ben exact ditzelfde probleem nu ook tegen gekomen in PHP met Apache.

[ Voor 60% gewijzigd door BCC op 27-10-2006 13:21 ]

Na betaling van een licentievergoeding van €1.000 verkrijgen bedrijven het recht om deze post te gebruiken voor het trainen van artificiële intelligentiesystemen.


  • Blaise
  • Registratie: Juni 2001
  • Niet online
Nu komt het probleem: Op het moment dat er een wachtend ajax-request is, kan de gebruiker niet naar een andere pagina. De browser lockt dit. Dit gebeurt zowel bij Firefox, IE als Safari.
Volgens mij is er dan meer gaande dan slechts 1 ajax-request. Een browser kan namelijk meerdere connecties maken (internet Explorer en Firefox 2 tegelijk).

  • SKiLLa
  • Registratie: Februari 2002
  • Niet online

SKiLLa

Byte or nibble a bit ?

Hoe communiceer je vanuit je ASP bestand met de andere servers ? Gebruik je daar toevallig HTTP calls voor ? Zoja, je moet vanuit een website nooit een andere pagina in de zelfde applicatiepool (IIS 6) of website (IIS 5) aanroepen; daar krijg je geheid issues mee. En welk COM object gebruik je voor eventuele HTTP calls vanuit je ASP ?

PS: En test je in je ASPtje bij langdurige operaties wel op Response.IsClientConnected, zodat jee geen 'onnodig' werk uitvoert ?

[ Voor 16% gewijzigd door SKiLLa op 27-10-2006 16:38 ]

'Political Correctness is fascism pretending to be good manners.' - George Carlin


  • BCC
  • Registratie: Juli 2000
  • Laatst online: 22:31
SKiLLa schreef op vrijdag 27 oktober 2006 @ 16:37:
Hoe communiceer je vanuit je ASP bestand met de andere servers ? Gebruik je daar toevallig HTTP calls voor ?
Ja, ik probeer een XML bestand via HTTP binnen te lepelen.
Zoja, je moet vanuit een website nooit een andere pagina in de zelfde applicatiepool (IIS 6) of website (IIS 5) aanroepen; daar krijg je geheid issues mee.
In dit geval is er niet echt een andere optie.. of ik begrijp je verkeerd.
En welk COM object gebruik je voor eventuele HTTP calls vanuit je ASP ?
Microsoft.XMLDOM
PS: En test je in je ASPtje bij langdurige operaties wel op Response.IsClientConnected, zodat jee geen 'onnodig' werk uitvoert ?
Dat kan niet, omdat ASP aan het wachten ben op response van een remote server.

Na betaling van een licentievergoeding van €1.000 verkrijgen bedrijven het recht om deze post te gebruiken voor het trainen van artificiële intelligentiesystemen.


  • BCC
  • Registratie: Juli 2000
  • Laatst online: 22:31
Blaise schreef op vrijdag 27 oktober 2006 @ 16:32:
[...]
Volgens mij is er dan meer gaande dan slechts 1 ajax-request. Een browser kan namelijk meerdere connecties maken (internet Explorer en Firefox 2 tegelijk).
Nee, er is maar 1 Ajax request. Er zijn wel meedere connecties, maar IIS en Apache handelen de requests van connectie van dezelfde sessie sequentieel af.

[ Voor 10% gewijzigd door BCC op 02-11-2006 00:24 ]

Na betaling van een licentievergoeding van €1.000 verkrijgen bedrijven het recht om deze post te gebruiken voor het trainen van artificiële intelligentiesystemen.


  • MBV
  • Registratie: Februari 2002
  • Laatst online: 28-11 22:35

MBV

het is simpel te testen of het aan jouw server ligt: maak eens een linkje naar google.com en kijk eens of je dan wel direct verder kan :)

  • BCC
  • Registratie: Juli 2000
  • Laatst online: 22:31
MBV schreef op donderdag 02 november 2006 @ 00:27:
het is simpel te testen of het aan jouw server ligt: maak eens een linkje naar google.com en kijk eens of je dan wel direct verder kan :)
Het ligt niet aan mijn server (zoals ik al zei). Dit gedrag komt zowel bij mijn twee IIS testservers als twee afzonderlijke Apache machines voor.

Na betaling van een licentievergoeding van €1.000 verkrijgen bedrijven het recht om deze post te gebruiken voor het trainen van artificiële intelligentiesystemen.


  • MBV
  • Registratie: Februari 2002
  • Laatst online: 28-11 22:35

MBV

Als het niet aan je server ligt, dan mag het ENABLESESSIONSTATE = False statement niks uitmaken. Wat ik bedoelde: als je op dezelfde pagina als waar de Ajax-request bezig is, een linkje plaatst naar google, werkt het dan wel?

  • BCC
  • Registratie: Juli 2000
  • Laatst online: 22:31
MBV schreef op donderdag 02 november 2006 @ 20:40:
Als het niet aan je server ligt, dan mag het ENABLESESSIONSTATE = False statement niks uitmaken.
Volgens mij begrijp je het verkeerd :). Het ligt niet aan de server, het ligt aan de manier waarop Apache en IIS requests afhandelen. Bij beide is de oplossing om de controller buiten de sessie te houden.
Wat ik bedoelde: als je op dezelfde pagina als waar de Ajax-request bezig is, een linkje plaatst naar google, werkt het dan wel?
Natuurlijk, want dat is toch een andere site! Maar dan lockt hij niet je browser? Nee, in dat opzicht niet, maar het lockt dus alleen je website. Misschien moet dat veranderd worden in de titel.

Lees die link naar google groups maar eens goed door...

[ Voor 3% gewijzigd door BCC op 02-11-2006 21:22 ]

Na betaling van een licentievergoeding van €1.000 verkrijgen bedrijven het recht om deze post te gebruiken voor het trainen van artificiële intelligentiesystemen.


  • MBV
  • Registratie: Februari 2002
  • Laatst online: 28-11 22:35

MBV

volgens mij begrijp jij mij verkeerd: ik bedoel server als in client-server, oftewel: het ligt niet aan de client-software :) Ik geloof je direct, ik had alleen even niet door dat jij het antwoord zelf had gegeven, en niet iemand anders :X

  • BCC
  • Registratie: Juli 2000
  • Laatst online: 22:31
MBV schreef op vrijdag 03 november 2006 @ 00:04:
volgens mij begrijp jij mij verkeerd: ik bedoel server als in client-server, oftewel: het ligt niet aan de client-software :) Ik geloof je direct, ik had alleen even niet door dat jij het antwoord zelf had gegeven, en niet iemand anders :X
:) Het ligt idd niet aan de client software... en op de een of andere manier vind ik altijd 5 minuten nadat ik een topic heb gepost een oplossing... Maar eigenlijk is het uit de sessie halen geen mooie oplossing, wie heeft een beter idee?

Na betaling van een licentievergoeding van €1.000 verkrijgen bedrijven het recht om deze post te gebruiken voor het trainen van artificiële intelligentiesystemen.

Pagina: 1