/ Forside / Teknologi / Udvikling / Java Scripts / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Java Scripts
#NavnPoint
molokyle 5410
Klaudi 2799
smorch 2439
kim 1360
Harlekin 1134
bentjuul 984
gibson 800
severino 695
Random 675
10  konsulent.. 626
Opdatering af flere ens felter i tabel med~
Fra : Leif Neland


Dato : 19-09-11 11:40

Lidt løst snak...

En tabel, f.ex.. ordrelinier på en faktura indeholder en kolonne med data,
det kan tage relativ lang tid at finde frem.
Det kunne være leveringstid, der løbende kan ændre sig, og skal hentes fra
et eksternt system.

For at gøre siden hurtigere, kunne tænke mig at vise tabellen først, med de
fleste data, i almindelig html, genereret på serveren.
Og derefter opdatere leveringstiden via ajax.
Kan browseren sende f.ex. 20 ajax-requests til serveren på een gang, og
holde styr på dem, så de enkelte ordrelinier bliver opdateret efterhånden
som resultatet indløber, eller skal man styre det i browseren, så et
resultat trigger det næste request?
Requestene bliver jo sendt til den samme url, med forskellige post-data.

Det er ikke sikkert brugeren er interesseret i den kolonne, så hentningen
kunne startes med et tryk på en knap "Vis leveringstid" i stedet for at
blive trigget af document ready.

Jeg bruger jquery.

Leif





 
 
Birger Sørensen (19-09-2011)
Kommentar
Fra : Birger Sørensen


Dato : 19-09-11 13:57

Leif Neland sendte dette med sin computer:
> Lidt løst snak...
>
> En tabel, f.ex.. ordrelinier på en faktura indeholder en kolonne med data,
> det kan tage relativ lang tid at finde frem.
> Det kunne være leveringstid, der løbende kan ændre sig, og skal hentes fra et
> eksternt system.
>
> For at gøre siden hurtigere, kunne tænke mig at vise tabellen først, med de
> fleste data, i almindelig html, genereret på serveren.
> Og derefter opdatere leveringstiden via ajax.
> Kan browseren sende f.ex. 20 ajax-requests til serveren på een gang, og holde
> styr på dem, så de enkelte ordrelinier bliver opdateret efterhånden som
> resultatet indløber, eller skal man styre det i browseren, så et resultat
> trigger det næste request?
> Requestene bliver jo sendt til den samme url, med forskellige post-data.
>
> Det er ikke sikkert brugeren er interesseret i den kolonne, så hentningen
> kunne startes med et tryk på en knap "Vis leveringstid" i stedet for at blive
> trigget af document ready.
>
> Jeg bruger jquery.
>
> Leif

Et løst svar... ^^
Det kan godt lade sig gøre at sende 20 AJAX request samtidig.
Du skal så blot holde styr på hvilken request, der henter data til
hvilken række/kolonne, og der skal oprettes eet objekt til hver
request.
Det er også vigtigt at der arbejdes asynkront - altså at open kaldes
med open( 'metode', prg, true); - den tredie parameter skal være true,
da det enkelte kald ellers vil være blocking (synkront) - altså alt
videre arbejde på/med siden standses, indtil der foreligger et brugbart
resultat af requesten.
Om serveren vil være i stand til at behandle alle requests på een gang
er så noget andet, specielt hvis alle er til samme script.
Men man kan vel skrive en default tekst i de aktuelle felter, så der
ikke er helt tomt i huset når gæsten ankommer, og hyn kan se der
arbejdes på sagen...

Birger

--
http://varmeretter.dk - billig, sund og hurtig mad
http://bbsorensen.dk



Kim Ludvigsen (19-09-2011)
Kommentar
Fra : Kim Ludvigsen


Dato : 19-09-11 14:26

Den 19-09-2011 14:56, Birger Sørensen skrev:

> Men man kan vel skrive en default tekst i de aktuelle
> felter, så der ikke er helt tomt i huset når gæsten
> ankommer, og hyn kan se der arbejdes på sagen...

Jeg har set flere bruge en gif med en animeret cirkel, der
angiver, at der arbejdes. Det er nok bedre end en tekst.

--
Mvh. Kim Ludvigsen
Hold dit livs drømmeferie i Thailand:
http://rejse-til-thailand.dk

Stig Johansen (20-09-2011)
Kommentar
Fra : Stig Johansen


Dato : 20-09-11 06:47

Leif Neland wrote:

> Lidt løst snak...
[snip]

Det er lige så nemt som at klø sig et vist sted (hvis dine arme er lange
nok ;)

> Jeg bruger jquery.

UPS! - det kan godt være det gør dine arme for korte.

Jeg kan godt finde mit 'Ajax framework' frem og poste det, men det er lidt
besværligt, så hvis du er bundet af jquery, giver det ingen mening.

--
Med venlig hilsen
Stig Johansen

Martin Larsen (20-09-2011)
Kommentar
Fra : Martin Larsen


Dato : 20-09-11 22:39

Leif Neland wrote:

> Kan browseren sende f.ex. 20 ajax-requests til serveren på een gang, og
> holde styr på dem, så de enkelte ordrelinier bliver opdateret efterhånden
> som resultatet indløber, eller skal man styre det i browseren, så et
> resultat trigger det næste request?

Jeg har arbejdet med præcis den problematik i forbindelse med
metasøgemaskiner til flybilletter. Her søges på serveren parallelt på
omkring 20 forskellige flyhjemmesider og api'er.

Da hver søgning tager mellem et par sekunder for de hurtigste api'er og
op til måske 1 minut i visse tilfælde for de langsomste hjemmesider, kan
klienten (browseren) ikke vente på at alle resultaterne er klar. Derfor
sendes de "drypvis" til browseren.

Vi valgte en løsning hvor browseren periodisk (vistnok hvert andet
sekund svjh) anmoder om en opdateringspakke i JSON format. I denne pakke
er der så de resultater som er fundet siden sidste pakke. Der kan derfor
teoretisk være mellem 0 og N resultater hvor N er antallet af
flyselskaber der søges på. Når der ikke er flere resultater, sendes en
stopkommando til browseren i stedet for en opdateringspakke.

I dit tilfælde vil det svare til at du periodisk beder om en
opdateringspakke med leveringstider, som så via en unik ID bindes op til
de respektive felter. Stop når alle felter er udfyldt, eller der kommer
en stopkommando eller en timeout nås.

Fremgangsmåden både simplificerer kodningen og mindske belastningen på
serveren.

Martin

Leif Neland (22-09-2011)
Kommentar
Fra : Leif Neland


Dato : 22-09-11 01:18

Den 20-09-2011 23:39, Martin Larsen skrev:
> Leif Neland wrote:
>
>> Kan browseren sende f.ex. 20 ajax-requests til serveren på een gang, og
>> holde styr på dem, så de enkelte ordrelinier bliver opdateret efterhånden
>> som resultatet indløber, eller skal man styre det i browseren, så et
>> resultat trigger det næste request?
>
> Jeg har arbejdet med præcis den problematik i forbindelse med
> metasøgemaskiner til flybilletter. Her søges på serveren parallelt på
> omkring 20 forskellige flyhjemmesider og api'er.
>
> Da hver søgning tager mellem et par sekunder for de hurtigste api'er og
> op til måske 1 minut i visse tilfælde for de langsomste hjemmesider, kan
> klienten (browseren) ikke vente på at alle resultaterne er klar. Derfor
> sendes de "drypvis" til browseren.
>
> Vi valgte en løsning hvor browseren periodisk (vistnok hvert andet
> sekund svjh) anmoder om en opdateringspakke i JSON format. I denne pakke
> er der så de resultater som er fundet siden sidste pakke. Der kan derfor
> teoretisk være mellem 0 og N resultater hvor N er antallet af
> flyselskaber der søges på. Når der ikke er flere resultater, sendes en
> stopkommando til browseren i stedet for en opdateringspakke.
>

Men så må serveren jo selv splitte requestet op i requests til hver
hjemmeside/api, og holde styr på, hvor mange resultater, der er klar.

Jeg har kun een, højst to brugere på systemet, så mon ikke det er
lettere bare at lade browseren kaste 20 requests efter serveren, frem
for at skulle splitte det op på serveren. Det lyder trods alt lidt
langhåret for mig...

Leif

--
Check out www.waze.com - it's a social GPS app where drivers share
real-time road info (traffic, accidents, police, speedcams and more)
with each other. If you're an iPhone Android Blackberry Symbian or
Windows Mobile user then this is the perfect app to use for daily driving.

Stig Johansen (22-09-2011)
Kommentar
Fra : Stig Johansen


Dato : 22-09-11 06:55

Leif Neland wrote:

> Jeg har kun een, højst to brugere på systemet, så mon ikke det er
> lettere bare at lade browseren kaste 20 requests efter serveren, frem
> for at skulle splitte det op på serveren. Det lyder trods alt lidt
> langhåret for mig...

Uanset hvor mange brugere du har er den eneste løsning at sende requests af
sted til serveren for hvert felt, alt andet er tåbeligt.

Bemærk at stort set alle browser/servere kører med Keep-connection, hvilket
betyder:
1) TCP/IP sessionen genbruges (eller rettere holdes i live).
2) Threads bliver genbrugt pga. 1 i det omfang de er 'færdige'.

Så afhængig af tid osv, er det ikke engang sikkert der bliver spawnes 20
threads.

Kører man med NPTL, er det i øvrigt ret ligegyldigt, da en 'husholdningspc'
for 4-5 år siden kunne spawne 200.000 Threads/sekund.

Så lave et request for hvert felt, og udfyld efterhånden som de indløber.

Hvis du nummererer liniernerne med id'er, eks id=line_1, id=line_2 osv
og har en global var nbr_lines, kan det kalres med ganske få linier JS hvis
du har styr på central Ajax.

jQuery kender jeg ikke til, da den ikke inderholder de funktioner/krav jeg
bruger, så den kan jeg ikke hjælpe med.

--
Med venlig hilsen
Stig Johansen

Martin Larsen (22-09-2011)
Kommentar
Fra : Martin Larsen


Dato : 22-09-11 22:54

Leif Neland wrote:

> Men så må serveren jo selv splitte requestet op i requests til hver
> hjemmeside/api, og holde styr på, hvor mange resultater, der er klar.

Det er nu enkelt nok da hver søgning er identificeret med en unik ID,
men ...

> Jeg har kun een, højst to brugere på systemet, så mon ikke det er
> lettere bare at lade browseren kaste 20 requests efter serveren, frem
> for at skulle splitte det op på serveren. Det lyder trods alt lidt
> langhåret for mig...

når du kun har 20 felter, eller for at være mere præcis, et kendt antal
felter, så fyr dem bare afsted. Det vil fungere helt fint.

Med metasøgeren er det anderledes, her ved browseren ikke hvor mange
resultater der ankommer, så den kan af gode grunde ikke sende et bestemt
antal requests afsted. Der kan være fra 0 hvis du vil et sted hen på en
dato hvor ingen flyver, til over 700 resultater for de mest populære mål
som fx London.


Stig Johansen (22-09-2011)
Kommentar
Fra : Stig Johansen


Dato : 22-09-11 07:15

Leif Neland wrote:

> Requestene bliver jo sendt til den samme url, med forskellige post-data.

Ja, men med lidt 'behändigkeit' sender du id'en med i Ajax requestet, så du
ved hvor retursvaret skal placeres ;)

(Og jo man kan også sagtens have en lille ikon på hver linie, der aktiverer
Ajax ved tryk)

Fortæl hvad vej du går, for jeg har en del fungerende ting, der gør netop
det du ønsker, men hvis du er bundet til jQuery, gider jeg ikke finde det
frem - da det er besværligt (og tidskrævende).

--
Med venlig hilsen
Stig Johansen

Martin Larsen (22-09-2011)
Kommentar
Fra : Martin Larsen


Dato : 22-09-11 23:06

Stig Johansen wrote:

> Fortæl hvad vej du går, for jeg har en del fungerende ting, der gør netop
> det du ønsker, men hvis du er bundet til jQuery, gider jeg ikke finde det
> frem - da det er besværligt (og tidskrævende).

jQuerys ajaxfunktion er blot en simpel wrapper, så din ajaxløsning vil
fint kunne fungere sammen med jQuery uanset hvordan du har lavet det

Jeg har selv brugt mine egne ajaxfunktioner sammen med jQuery uden
problemer.

jQuery handler mestendels om UI og i mindre grad om den bagvedliggende
logik og datahåndtering.

Martin

Stig Johansen (23-09-2011)
Kommentar
Fra : Stig Johansen


Dato : 23-09-11 06:56

Martin Larsen wrote:

> jQuerys ajaxfunktion er blot en simpel wrapper, så din ajaxløsning vil
> fint kunne fungere sammen med jQuery

Ja, men jeg fortolker det som om Leif vil bruge jQuery's indbyggede Ajax.
Jeg har skam set sider hvor der er jQuery + et andet framework (med Ajax) og
alligevel egen Ajax

> uanset hvordan du har lavet det
Den er selvfølgelig lavet _perfekt_ under hensyntagen til memory leaks osv..
- og selvfølgelig med UTF8toansi indbygget..

> jQuery handler mestendels om UI og i mindre grad om den bagvedliggende
> logik og datahåndtering.

I know.

--
Med venlig hilsen
Stig Johansen

Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408914
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste