Avatar billede bigf00ta Nybegynder
07. februar 2011 - 23:04 Der er 2 kommentarer

AJAX : inkludering af flere sider

Hej,

Når jeg henter en kundeliste frem, skal jeg have behandlet ordrestatistik pr. kunde. Dette kan tage lidt tid, da det skal hentes i andre databaser, derfor har jeg lavet et Ajax script, som inkluderer en søgning ud for hver kunde, på siden.

Når jeg kalder disse sider, behandles de en efter en, og indsættes på siden. Da der kan være 200-400 kunder på en liste, kan dette tage flere minutter. Webserveren står og laver 5% i CPU, så man føler sig lidt til grin over at man ikke kan lave flere kald på samme tid.

1. Jeg kender begrænsningerne i internet explorer/firefox mht. http begrænsninger (max 1 kørende tråd), men nu har jeg altså dette "Problem", og hvordan løses det.

2. Hvis jeg prøver at navigere væk fra siden, mens den loader, venter webserveren troligt med at sende mig den nye side før alle resultater er hentet. Hvordan får man afbrudt sådan en omgang requests, så hvis brugeren trykke på andet link, at han så ryger direkte videre.

Håber i kan svare... :)
Avatar billede softspot Forsker
08. februar 2011 - 00:30 #1
Jeg ved godt det ikke er dette du efterspørger, eller er specielt interesseret i at høre, men det lyder mest af alt, som om der er et designmæssigt problem, hvis du skal lave 400 kald til serveren for at opdatere en liste med data efter den er indlæst. Rent teknisk og forretningsmæssigt er det spørgsmålet om du kan (og må) lave noget af arbejdet på serveren inden du henter listen med kunder, således resultatet er mere færdigt allerede ved første kontakt med serveren. Dette kunne f.eks. være i form af periodisk opdaterede statistikker, som kører med faste intervaller på serveren og gemmes i relation til hver kunde, eller noget i den stil.

Mht. de konkrete problemstillinger du nævner, så er det med den ene tråd i browseren (ad 1) vel ikke det faktiske problem (det tager vel ikke mange resurser at opdatere kundelisten). Derimod kan det være et reelt problem, hvis du bruger session i serverkoden, da det nemlig vil gøre dine kald synkrone og dermed kun tillade at et request behandles på serveren ad gangen. Hvis det er muligt, så prøv evt. at sætte EnableSessionState="false" i page-directive på ASP-siden. Det burde øge paralleliteten af ASP-koden, hvis ellers det er muligt for dig ifht. autorisationsmekanismer vedr. dem der må se kundelisten...

Dernæst bør du, hvis serverkoden kører en længerevarende process, checke om klienten stadig er forbundet til processen (Response.IsClientConnected) og så afbryde, hvis klienten ikke er forbundet længere. I det tilfælde du benytter sessions, kunne dette check bla. ligge i starten af scriptet der henter statistik og evt. igen i løkkestrukturer (hvis du har sådan nogle i din kode). I starten da dette så hurtigt ville afbryde evt. ikke udførte statistik-opslag.

På klienten kunne du vente med at hente statistik til brugeren rent faktisk begynder at bevæge sig rundt på siden - dvs. bare nøjes med at hente det brugeren umiddelbart kan se i første omgang og så hente lidt efter lidt, eller efter behov.

Den del med at du gerne vil fortryde alle igangværende opslag på serveren kan muligvis opnås ved at kalde abort på XMLHttpRequest-objektet, men det kræver jo så at du har en reference til disse (jeg ved ikke om man kan finde dem frem et eller andet sted i browserens DOM efter man har fyret et AJAX-kald af). Du kan muligvis have held med at gøre det i forbindelse med onbeforeunload eller onunload. Alternativt kunne du koble en handler på alle links, som sørger for at fortryde alle igangværende XHR-forespørgsler...
Avatar billede softspot Forsker
11. februar 2011 - 19:19 #2
Kom du videre med dette?

Jeg er klar over du lige har oprettet din profil herinde, så derfor vil jeg sende dig en venlig reminder om, at det er en god ting at følge op på de spørgsmål man stiller, for at se om man har fået svar. Herunder at give en tilbagemelding på om de afgivne svar er brugbare...
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
Kurser inden for grundlæggende programmering

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