[AJAX] non-blocking requests

Pagina: 1
Acties:

  • RickyHeijnen
  • Registratie: Maart 2005
  • Laatst online: 30-04 09:02
Ik heb een javascript gemaakt waarin ik tegelijkertijd 15 httprequests start. Het is nu echter zo dat de tweede request pas verzonden word als de eerste een result heeft gegeven. Echter duren sommige request zo lang dat het totale script nu wel 1 minuut duurt om te laden.

Nu zocht ik dus naar een non-blocking methode zodat ik alle requests tegelijk kan versturen en zo sneller alle results binnen heb.

Ik kan alleen nergens vinden hoe of wat. Iemand een idee?

  • killercow
  • Registratie: Maart 2000
  • Laatst online: 15:38

killercow

eth0

De meeste browsers houden er niet van om meer dan x connecties naar een bepaalde server op te zetten, en dat komt weer omdat de servers het hier ook niet zo op hebben. je bent hem immers aan het Dossen,

xtenties als fasterfox voor firefox schakelen deze limitatie uit, maar zijn zeker in dit geval gruwelijk associaal tegen over de webmaster (tenzij het jouw server is).

Volgens mij kun je asynchrone requests wel tegelijk afvuren, maar doet IE er maar 2 tegeleik, en opera er maar 3 ofzo.

openkat.nl al gezien?


  • --MeAngry--
  • Registratie: September 2002
  • Laatst online: 11:05

--MeAngry--

aka Qonstrukt

Je dient in ieder geval te zorgen dat je meerdere losse XMLHttpRequest objects maakt. Als je 1 en dezelfde gebruikt kan die ook maar 1 ding tegelijk doen.

Tesla Model Y RWD (2024)


  • wizzkizz
  • Registratie: April 2003
  • Laatst online: 30-11 08:58

wizzkizz

smile...tomorrow will be worse

Asynchrone requests is wat je zoekt. Je kunt het doen door meerdere instanties van je XMLHTTP object te initiëren. Sowieso moet je als derde argument van je XmlHttpRequestObject.Open een false meegeven, dan gaat het goedkomen (anders wacht de browser met uitvoeren van andere code totdat je request klaar is):

code:
1
2
Syntax: 
httpRequest.open(Method, URL, [Async, [User, Password] ] )

[ Voor 20% gewijzigd door wizzkizz op 06-02-2007 22:01 ]

Make it idiot proof and someone will make a better idiot.
Real programmers don't document. If it was hard to write, it should be hard to understand.


  • pistole
  • Registratie: Juli 2000
  • Laatst online: 16:32

pistole

Frutter

wizzkizz schreef op dinsdag 06 februari 2007 @ 21:59:
Asynchrone requests is wat je zoekt. Je kunt het doen door meerdere instanties van je XMLHTTP object te initiëren. Sowieso moet je als derde argument van je XmlHttpRequestObject.Open een false meegeven, dan gaat het goedkomen:

code:
1
2
Syntax: 
httpRequest.open(Method, URL, [Async, [User, Password] ] )
Vergeet niet dat je dan ook eventhandlers moet implementeren...

Ik frut, dus ik epibreer


  • BasieP
  • Registratie: Oktober 2000
  • Laatst online: 19-10 08:18
killercow schreef op dinsdag 06 februari 2007 @ 21:48:
De meeste browsers houden er niet van om meer dan x connecties naar een bepaalde server op te zetten, en dat komt weer omdat de servers het hier ook niet zo op hebben. je bent hem immers aan het Dossen,
dossen is compleet iets anders...
bovendien kan ik rustig 20 requests naar dezelfde server sturen, hij zal ze alleen misschien niet alle 20 tegelijk beantwoorden.
Maar ook dit geeft niet, want de server wacht dan gewoon tot er ruimte is, en zal dan volgende ding uit ze queue pakken. Indien je niet te lang in de queue staat tenminste, dan krijg je een timeout..

echter, je kan makkelijk 20 request dmv ajax sturen, daar zal geen enkele server OF browser moeilijk over doen. je moet alleen niet verwachten dat ze ook ECHT tegelijk verwerkt worden

This message was sent on 100% recyclable electrons.


  • wizzkizz
  • Registratie: April 2003
  • Laatst online: 30-11 08:58

wizzkizz

smile...tomorrow will be worse

pistole schreef op dinsdag 06 februari 2007 @ 22:01:
Vergeet niet dat je dan ook eventhandlers moet implementeren...
Lijkt me standaard gedrag toch? Daar zijn die dingen voor. Anders kun je dus serieuze problemen krijgen, zie ook het linkje dat ik er bij ge-edit heb.

Make it idiot proof and someone will make a better idiot.
Real programmers don't document. If it was hard to write, it should be hard to understand.


  • pistole
  • Registratie: Juli 2000
  • Laatst online: 16:32

pistole

Frutter

wizzkizz schreef op dinsdag 06 februari 2007 @ 22:03:
[...]

Lijkt me standaard gedrag toch? Daar zijn die dingen voor. Anders kun je dus serieuze problemen krijgen, zie ook het linkje dat ik er bij ge-edit heb.
Ik had je edit niet gezien. Het is inderdaad 'standaard', maar misschien weet de TS dat niet.

Ik frut, dus ik epibreer


  • Setragasj
  • Registratie: Augustus 2001
  • Laatst online: 01-12 11:33

Setragasj

is using radars to communicate

Ik zou in dit geval elke request in een eigen queue zetten en bij iedere onreadystate de volgende request sturen.. Dan weet je in ieder geval dat je alle requests hebt gehad en je hebt zelf in de hand wanneer welke wordt verstuurd en wanneer welke is verwerkt.
Al is dit niet helemaal wat je wilt, lijkt het me wel een ideetje? :p

<Typ een persoonlijk bericht>


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 15:35

crisp

Devver

Pixelated

BasieP schreef op dinsdag 06 februari 2007 @ 22:03:
[...]

echter, je kan makkelijk 20 request dmv ajax sturen, daar zal geen enkele server OF browser moeilijk over doen. je moet alleen niet verwachten dat ze ook ECHT tegelijk verwerkt worden
Tsja, zolang dat maar 1 client is, als je honderden/duizenden bezoekers hebt en elke hit resulteert in een 20-tal requests dan ga je het toch wel merken hoor ;)

Het is good practice om gewoon het aantal requests vanaf een client zo laag mogelijk proberen te houden; als die round-trips kosten immers ook alleen maar tijd. Vwb Ajax is het wellicht handig om te kijken of je je applicatie niet zo kan inrichten dat je meerdere acties in 1 request kan verpakken :)

Intentionally left blank


  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

zoetericky schreef op dinsdag 06 februari 2007 @ 18:16:
Ik heb een javascript gemaakt waarin ik tegelijkertijd 15 httprequests start. Het is nu echter zo dat de tweede request pas verzonden word als de eerste een result heeft gegeven. Echter duren sommige request zo lang dat het totale script nu wel 1 minuut duurt om te laden.

Nu zocht ik dus naar een non-blocking methode zodat ik alle requests tegelijk kan versturen en zo sneller alle results binnen heb.

Ik kan alleen nergens vinden hoe of wat. Iemand een idee?
Wat gebruik je op de server kant?
Niet toevallig PHP met zijn default sessions? grote kans dat daar je requests op elkaar staan te wachten aangezien de session files gelocked worden is het belangrijk om zo snel mogelijk die session te closen binnen PHP.
Pagina: 1