28. maj 2007 - 00:22Der er
11 kommentarer og 2 løsninger
AJAX kald - flere eller samlet?
Hej
Jeg er igang med at udtænke lidt hvordan opbygningen af site skal foregå med ajax. Mit spørgsmål går ud på om der er fordele i at lave et 'stort' ajax kald til en fil. Eller man skal opbygge det ved at lave kald til flere filer.
Altså hvis jeg har to forskellige dele af en side. De skal bruge data1 og data2 ved brug af ajax. Skal jeg hente det fra _en_ fil der sender en stor datamængde tilbage? Eller skal jeg opbygge det som funktioner der henter hver deres data fra forskellige filer? Det data der skal hentes ud har ingen sammenhæng med hinanden.
Er der nogle umiddelbare fordele/ulemper ved en af metoderne?
Generelt belaster det serveren mindst, når du henter det hele ned samtidig - ligesom når man henter fra en database, hvor det også bedst kan betale sig at konstruere alt i en string og så derefter udskrive stringen (evt. med getRows-funktionen, hvis man bruger ASP). Og hvis du så bare har en generel JavaScript-funktion, som kalder ajax-filer, så skulle det være ret godt. :) Derfra handler det så bare om, hvordan du sender de hentede data til de elementer, de skal lægges i..
alt (data) på en gang kræver jo at du skal downloade mere "første" gang (evt. billeder bliver jo først hentet når de "står" i htmlen).
Hvis det bare er 10-20 sider tekst er det måske en idé, men forestil dig at det var eksperten du skulle lave det med? (ca. 800.000 spørgsmål og tilhørende svar)
hvis vi snakker en "standard" hjemmeside med en menu i den ene side og content i den anden side, ville jeg hente hele menuen ud til at starte med, lave en "alm" javascript funktion til menuen (så kan man åbne og lukke submenuer). Når der så klikkes på et menu punkt bruger du dit ajax til at loade den sides content.
a1> Eksperten-analogien passer ikke.. man henter jo kun 1 spørgsmål ad gangen, og ikke 800.000.. Og når billeder og andet snask er loadet første gang, er det jo allerede cachet.. :-)
intenz> Husk at lave websitet sådan, at det også kan bruges uden bruger af AJAX.. egentligt burde siden også virke uden brug af JavaScript, men så går man også efter 100% af brugerene.. :-)
Principielt vil det være rigtigt at have adskilte ting adskilt, men så kommer vi til praksis, og der bliver det afgørende, hvor stor en download bliver og hvor ofte det forekommer, samt sandsynligheden for at man alligevel skal hente resten !o]
-- hvis dine 2 datasæt er fuldstændig uafhængige og heller ikke medfører konsekvenser for hinanden, vil det grundlæggende skulle være to forskellige kald ...
Men hvis den samlede download f.eks. ikke er ret stor, er det jo tåbeligt ikke at hente den, når man nu er i gang ...
-- og hvis download af noget i det ene datasæt medfører at det andet datasæt skal hentes, er det selvfølgelig også tåbeligt ikke at gøre det i et hug ...
-- eller hvis de fleste alligevel vil få brug for det andet datasæt, er det jo også smart, at det er til rådighed for dem ...
>thesurfer Ja, det ved jeg. Den diskussion behøver vi ikke komme ind på :)
>roenving "-- hvis dine 2 datasæt er fuldstændig uafhængige og heller ikke medfører konsekvenser for hinanden, vil det grundlæggende skulle være to forskellige kald ..." Det er netop den situation jeg er i. Og jeg ville også helst skulle opdele det i mindre filer, for at kunne holde en simpel struktur.
Jeg var bare i tvivl om der var noget der talte imod at gøre det sådan. Og det er ikke 800.000 sider der skal hentes :) Bare 'normalt' størrelse indhold (1-20 kb max)
Jeg savner generelt nogle overordnede tutorials omkring hvordan strukturen i programmeringen skal foregå. Jeg kan godt læse og programmere ud fra alm. dokumentation til sproget, men der står bare ikke hvilken overordnet struktur man skal benytte sig af ;) Det er nok her erfaringen kommer ind i billedet :)
Tjah, og så en god del sund fornuft overført til denne virkelighed !-)
Skæg for sig og snot for sig, sagde min gamle regnelærer ofte, og det er nok meget sundt at huske det ...
-- men som det fremgår af mit indlæg, så er der ikke en endegyldig sandhed, et sted midt imellem, kunne f.eks. være, at sætte en hentning af resten i gang, når den første stump er hentet, men det er selvfølgelig under den forudsætning, at den samlede download er klart overkommelig ...
-- man kunne så arbejde med javascript-variable eller med elementer, der skjules og vises !o]
Når du skriver "Bare 'normalt' størrelse indhold" bliver jeg lidt nervøs for, om du kunne finde på at bruge AJAX til alm. indhold på et website. Det må du _endelig_ ikke! ... og endelig heller ikke bruge det til en menu. Søgemaskiner kan ikke indeksere dine sider, hvis indholdet er dannet med AJAX - og det er jo noget rigtig skidt.
"Jeg kan godt læse og programmere ud fra alm. dokumentation til sproget" ... nej, det kan du formodentlig ikke. Når du koder AJAX, skal du have _meget_ stor viden og _meget_ stor erfaring ... også indenfor emner, som ikke omhandles af sprogstandarder. F.eks. er IE's garbage-collection lidt af en 'hysterisk kælling' at tumle - og det er der desværre ikke mange, der tager højde for. Den slags afslører sig ofte, når man kikker i Windows' TaskManager, mens man udfører en række AJAX-kald (med tilhørende DOM-handlinger). Her stiger IE's hukommelsesforbrug ofte dramatisk - og ofte går det helt galt, når man navigerer til en ny side ... IE får ganske enkelt ikke ryddet op i hukommelsen.
Der er egentlig ikke noget nyt i dette, men når man laver alm. websider, skjules fejlene somregel. Bruger man derimod AJAX, bliver ens fejl, dårlige kodevaner, manglende kunnen og browserens uhensigtsmæssigheder pludselig _meget_ store faktorer. Selvom det på overfladen ser let ud at kode AJAX, er det betydeligt vanskeligere end de fleste, der gør det, tror =)
Den spidsfindige læser vil så måske mene: "Jamen, så er der jo ingen forskel på AJAX, HTML, DOM, JS og CSS".
Svaret må være: "Jo, for selvom de fleste, der (tror de) koder web, ikke aner, hvor svært det er at gøre ordentligt, så er AJAX faktisk betydelig vanskeligere" ;o)
HEy intenz, har du læst svaret i min trånd ang. programør til PHP fusion...?
Synes godt om
Ny brugerNybegynder
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.