08. april 2007 - 00:27Der er
25 kommentarer og 1 løsning
AJAX og belastning?
Hej
Jeg er fornyligt gået igang med ajax, og kan godt se mulighederne i det.
Mit spørgsmål er rimelig simpelt, forklaret ved et eksempel. Jeg har en fil der outputter noget data vha. php/mysql. Denne fil kører jeg 100.000 gange (f.eks.)
Vil det belaste serveren mere, hvis jeg bruger ajax til at hente dette data ud "dynamisk" 100.000 gange?
Det kommer vel an på hvad alternativet er og det kan jeg ikke lige gennemskue i dit eksempel. Hvis alternativet er at hele siden reloader 100.000 gang vil belastningen som udgangspunkt være den samme hvis det er samme data der hentes.
Hvis du bruger 'ægte' ajax (dvs. du kun outputter 'rå' data !-), vil du alt andet lige skulle bruge serveren til mindre, men visse formatterings-ting kan selvfølgelig være mere krævende for serveren end servering af flad html ...
-- men et gæt vil være, at du i 100.000 af 100.001 tilfælde vil få mindre server-belastning ved at bruge ajax ...
-- om det så er 2% eller 35% er så et helt andet spørgsmål !o]
-- ved at bruge 'ægte' ajax, vil du jo overlade en hel del af arbejdet til brugerens computer, der som regel er idle i 99% af de clock-cycles, der er til rådighed, så alt andet lige vil du fordele arbejdet på en mere fornuftig måde ...
Det er netop det jeg tænker. Jeg bruger en del serverkraft på min hovedserver pga. at brugerne skal bladre rundt og en del data skal hentes gang på gang fra en i forvejen belastet mysql server.
Så ved at bruge ajax vil jeg naturligt kun skulle ændre få sider ad gangen. Så skal man nok bare korrigere for brugere med javascript slået fra.
Ja, du skal selvfølgelig sørge for, at diverse søge-bots får noget at arbejde med, men også på det område er mit gæt at de 5-11% non-javascript, der registreres, ikke er brugere med maskiner, men alle de bots, der efterhånden er begyndt at hjemsøge indernettet, om det så være søge-robotter, mail-harvesters eller hvad man nu kan finde på ...
-- prøv at ændre årstallet og/eller måneden, så vil du se, at det svinger ganske enormt, specielt lige omkring feriesæsonen, hvilket for mig indikerer, at der er ganske få, _meget_ store netværk, som har administratorer, der intet ved om internet-teknologier, mens næsten alle andre ingen problemer har ...
Så du vil egentlig anbefale at man bare bruger løs og ikke tager hensyn til javascript deaktivere brugere. Og jeg tænker ikke søgemaskiner her, man kunne bare lave en statisk indgangsside som søgemaskinerne kunne læse. Men så forskellige ændringer af data kunne ske vha. ajax?
-- præcis problemet med at hente fra database giver nok forskellen mellem 35% eller 2% i mindsket server-belastning ...
Jeg har svært ved at finde på ulemper ...
-- og et firma som Google havde jo nok ikke lagt langt de fleste af deres æg i den kurv, hvis de havde registreret store ulemper !-)
-- en af deres væsentligste indtægtskilder, googleads, er jo netop baseret på ajax og flere af deres andre ting, f.eks. gmail og Google Earth ville slet ikke fungere uden ajax !-)
Ja, jeg ville tænke den vej, hvis jeg skulle designe et website, specielt hvor der var brug for megen kommunikation, f.eks. chats, hvor man vil kunne cache ting i 10-15 sekunder uden degrading af servicen !-)
1) En belastet sql-server kan man aflaste ved at cache data, der ikke ændrer sig så tit. Jeg har set eksempler hvor indhold af CSS genereres hver gang ud fra indholdet af en database. Her ville det være mere fornuftigt at lave en CSS-fil de få gange data ændres. AJAX som sådan sparer ikke så meget - det er typisk databasen-delen, der koster.
2) Hvis du vil servere "alt" som AJAX har du et andet problem end søgemaskinerne, nemlig at brugerne ikke kan lave bogmærker til sig selv, og heller ikke kan sende dem til andre.
3) Og lige: "f.eks. gmail og Google Earth ville slet ikke fungere uden ajax" - men der er jo netop en neddroslet gmail, der fungerer uden AJAX. Allernederst: "Gmail visning | Grundlæggende HTML" - de ved godt at AJAX ikke altid virker.
Der er nu én stor ulempe ved AJAX helt som erikjakobsen også siger - nemlig at den bygger på javascript som søgemaskinerne ikke kan tolke. Googles services behøver ikke indexering og derfor kan de tillade sig mere end mange andre hvor netop indexering kan betyde forskel på succes eller fiasko.
Igen, som roenving siger, er det svært at nævne noget om performance - ved ikke om jeg er helt enig med 100.000/100.001 eksemplet da det afhænger af alt for mange ting, men hvis det er databasen og ikke webserveren der er belastet må det primært være antallet af kald dertil, optimering af kaldene samt noget caching der kan give mest.
Det indhold der skal hentes ud er ikke muligt at cache, da det aldrig er ens.
Omkring bogmærker, vil det ikke være et problem, da al data ligger bag et logind. Og et direkte bogmærke vil alligevel ikke være gyldigt.
Og omkring javascript og søgemaskiner, så bliver siderne lavet i en grundlæggende statisk side, og det bliver så muligt at bladre (s. 1 - 2 - 3 - 4, osv), hjælpefunktioner, ændring af lignende mindre funktioner vha. AJAX.
Så jeg vil mene at AJAX vil være helt perfekt til mit formål :)
Som sagt afhænger performance-delen meget af den enkelte server - og det enkelte site - men hvis du betaler for trafik, vil du helt klart kunne se en væsentlig forbrugsnedgang, hvis du omlægger dele af sitet til AJAX ... men det er som sagt vigtigt at undgå at formidle alm. indhold via AJAX (jvnf. Eriks og keyserzose's argumeter ovenfor).
Det er også vigtigt, du ikke sender HTML-formaterede data til klienten, men nøjes med 'rå' data i f.eks. XML- eller JSON-format. Sidstnævnte fylder som oftest en del mindre end XML og er mere direkte at bruge med JS/DOM =)
Det er godt nok længe siden, denne tråd er kørt, men jeg tager den lige op igen.
Hvorfor er det vigtigt IKKE at sende HTML-formateret data til klienten via ajax? Jeg bruger ajax til en lille chat på mit website, men er blevet interesseret i, om jeg skal lave en af de store sider på mit site om til AJAX.
Men der vil jeg da nok højst sandssynligt sende HTML-formatteret data? Eller mener du at data først skal laves om til HTML, når AJAX modtager igen via en php?
(beklager, hvis jeg skriver lidt kringlet, men jeg er endnu ikke helt inde i ajax)
Du kan kun bruge HTML-formatteret data med element.innerHTML, som ikke understøttes i nogen standard. Den understøttes for tiden i de store browsere, og skal din løsning kun holde "weekenden over", og kun køre på almindelige PC-ere, så går det jo nok. Vi er andre, der skal være lidt mere visionære ;)
Men så forstår jeg blot ikke helt, hvorledes man får data (trukket med AJAX) vist på siden? Vil meget gerne have en uddybning :) Jeg kan læse mig til (ovenfor) at det er i XML eller JSON-format. Men man skal jo alligevel have det vist i HTML? Eller?
Man bruger http://developer.mozilla.org/en/docs/DOM:document.createElement og tilsvarende funktioner - måske mange gange. En AJAX-tutorial, der ikke gør det, skal man bare springe over - de har ikke forstået hvad det handler om, selv om det sikkert er lykkedes dem at få noget til at virke i en browser.
Hvis man erstatter 1:1 total refresh med AJAX requests, så bør belastningen faktisk være mindre.
Men realiteterne er jo at en konvertering til AJAX tit resulterer i rigtigt mange flere requests og dermed en betydeligt større belastning.
Det er vel reelt mere requirements creep end det er et problem ved AJAX, men hvis det er en site opdatering, så pas på alligevel !
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.