Du må være registrert og logget inn for å kunne legge ut innlegg på freak.no
X
LOGG INN
... eller du kan registrere deg nå
Dette nettstedet er avhengig av annonseinntekter for å holde driften og videre utvikling igang. Vi liker ikke reklame heller, men alternativene er ikke mange. Vær snill å vurder å slå av annonseblokkering, eller å abonnere på en reklamefri utgave av nettstedet.
  22 1670
Hei,

Jeg begynte, av ren nysjerrighet, å se på webutvikling for omtrent to uker siden. Jeg har siden da lest to bøker om PHP og jQuery. Likevel har jeg ikke klart å forstå de fundamentale mekanismene ved server-side og client-side scripting. Jeg har prøvd å lete opp bøker på amazon og ibooks uten lykke.

Det er klart selvindikerende at server-side skripting skjer på serveren, og klienten har ikke mulighet til å se kildekoden. Client-side derimot skjer direkte på nettleseren til klienten, og kildekoden er tilgjengelig.

Når en klient besøker en nettside, blir nettsiden lastet ned fra serveren. Det må bety at serveren er direkte involvert når noen besøker en nettside. Det må igjen bety at serveren blir belastet når noen trykker seg inn på en nettside. Har jeg forstått det riktig?

Gitt at avsnittet ovenfor er korrekt, hvordan regner man matematisk på dette? Jeg har meget god kompetanse i fysikk, matematikk og kjemi. Men jeg klarer likevel ikke å resonnere meg frem til et konkret regnestykke. Jeg finner heller ingenting om dette i bøker eller på internett.

La oss si, i tillegg til å måtte laste opp siden for klienten, må serveren også gjennomføre en rekke PHP skript med databaseforespørsel. Betyr det at serveren blir enda mer belastet? Hvordan regner man på det?

La oss nå snu paragrafen ovenfor og si at du har en rekke sider.html/.php og sidene er ikke-dynamiske, men heller statiske sider. Betyr det serveren blir mindre belastet eller ikke belastet i det hele tatt? Hvordan regner man det ut?

Jeg beklager at jeg har veldig mange spørsmål, og jeg beklager på det sterkeste dersom spørsmålene mine er rare. Jeg ber om tolleranse, da jeg er nokså ny i scripting. De bøkene jeg har lest handler direkte om selve språket (som forøvrig er meget logisk). Problemet er at bøkene skriver ikke noe om mekanismen bak det som skjer.

Mange takk
Sist endret av 852; 25. mai 2011 kl. 13:06. Grunn: Feil overskrift, skrivefeil
Sikkerhetsklarert
Hva vil du egentlig regne ut?
Om siden er en statisk side så er det i grunn kun snakk om at du laster ned alt innhold ned til klienten. I de fleste nettlesere ser du i statusbar hvor mange bytes den laster for gjeldene side. Dette vil til en viss grad også belaste serveren din. I et tenkt scenario der f.eks 100.000 klienter samtidig forsøker å laste ned /../banner.jpg fra siden din. Så vil den nok slite litt med å ta unna alle forespørsler.

For dynamiske sider med serverside språk (f.eks php) så er det serveren som genererer den ferdige html koden som siden består av. Er det databasekall osv med i bildet så er dette også noe serveren står for, før den til slutt serverer ferdig generert resultat.
Og ja serveren blir direkte belastet når en klient laster slike sider.
Sist endret av Pjukern; 25. mai 2011 kl. 13:27.
Det du må lese deg opp på er båndbredde/bandwidth, hvis du skal forstå dette:

http://www.findmyhosting.com/bandwidth-explained/
852
852's Avatar
Trådstarter
Presist.

Jeg vil regne ut hvor mye serveren klarer, nøyaktig. Du tar opp en hypotetisk situasjon hvor 100 000 laster ned banner.jpg. Du mener at serveren vil få problemer med det, og jeg sier jeg er uenig med deg og at du tar feil. Jeg sier serveren klarer det helt fint. Hvordan beviser du meg det motsatte?
Du kan ikke gjøre noen matematiske beregninger på dette uten først å gjøre målinger. Det gjør ofte gjør er å stressteste serveren ved å sette opp scripts/verktøy som gjør MANGE forespørsler over en gitt periode mens man måler belastningen på serveren (CPU etc) og responstid. Deretter kan man gjøre antagelser. Men en server skalerer ikke lineært eller etter noen annen enkel formel, man når i stedet normalt flaskehalser som brått reduserer kapasiteten.

Hjalp det?
852
852's Avatar
Trådstarter
Sitat av tormaroe Vis innlegg
Du kan ikke gjøre noen matematiske beregninger på dette uten først å gjøre målinger. Det gjør ofte gjør er å stressteste serveren ved å sette opp scripts/verktøy som gjør MANGE forespørsler over en gitt periode mens man måler belastningen på serveren (CPU etc) og responstid. Deretter kan man gjøre antagelser. Men en server skalerer ikke lineært eller etter noen annen enkel formel, man når i stedet normalt flaskehalser som brått reduserer kapasiteten.

Hjalp det?
Vis hele sitatet...
Det hjalp uendelig mye.
Kan jeg eventuelt få en referanse av deg slik at jeg får oppdatert meg?
Sitat av 852 Vis innlegg
Det hjalp uendelig mye.
Kan jeg eventuelt få en referanse av deg slik at jeg får oppdatert meg?
Vis hele sitatet...
Har ingen på hånden, men et enkelt google-søk gir meg følgende linker som kan være av interesse:

http://en.wikipedia.org/wiki/Web_server_benchmarking

http://www.xenoclast.org/doc/benchma...WTO/node5.html

http://sunsite.uakom.sk/sunworldonli...webserver.html

http://stackoverflow.com/questions/4...f-a-web-server

http://www.opensourcetesting.org/performance.php
Sikkerhetsklarert
Sitat av 852 Vis innlegg
Hvordan beviser du meg det motsatte?
Vis hele sitatet...
For å bevise det kan man ikke gjøre annet enn testing for å se hvordan løsningen din skalerer etter hvor mange besøkende du har.

Det er så mange variabler inne i bildet at dette tviler jeg på at det er mange som går å regner ut veldig detaljert på forhånd.

Det finnes også et hav av software til webservere for å f.eks legge ofte brukte elementer i minne/cache for å avlaste disker.

Men tilbake til mitt eksempel. La oss nå si at serveren din skal tilby dette tenkte bildet til 100.000 samtidig. Vi tenker oss at bildet er på 100 Kb. Ganget med 100.000 så betyr jo det enkelt at du skal sende fra deg 10 Gb med data. Så må vite hva linjen din greier, hva diskene greier. Om du har dette i cache, om du har et cluster eller load balancing tilgjengelig.
Et godt verktøy for å stresse en server og måle hvor mange samtidige forespørsler den klarer er JMeter.
852
852's Avatar
Trådstarter
Fantastiske svar her. Dette har jeg stor respekt for.

Men la oss si at 1 fiktiv person går inn på nettsiden og laster ned totalt 50Kb. Siden er ferdig nedlastet, men jQuery er fortsatt aktiv inne i siden uten at selve forespørsel etter siden blir gjentatt. Vi utelukker ikke at personen kan laste inn andre sider via AJAX inn på denne "hovedsiden", men vi bestemmer at disse undersidene som eventuelt blir lastet inn er statiske.

Vil belastingen på serveren bli noe mer enn forespørselen etter "hovedsiden" og de aktuelle undersider? Med andre ord, finnes det tilfeller hvor client-side scripting belaster serveren?
Sist endret av 852; 25. mai 2011 kl. 15:45. Grunn: skrivefeil
Tastaturkriger
Deezire's Avatar
Jeg bruker stort sett httperf til benchmarking, men det sagt, tallene du får er kunstige og sier gjerne ikke mye om generell ytelse ved normal drift. Eneste grunnen til at benchmarking er interessant er at du kontrollerer alle forholdene, slik at tallene kan brukes opp mot hverandre.

Når det kommer til statiske elementer så er det gjerne bundet av pipe eller disk. Det er også forskjellige teknikker som blir brukt, hvor alle har side positive og negative sider, det er her man må undersøke hva som passer best for sitt eget bruk.

Personlig ender jeg stort sett opp med en kombinasjon av Apache2 og Varnish. Jeg drev en liten periode med nginx og lighttpd, men mengden dokumentasjon og webapps som er tilpasset Apache2 gjør at du bruker minst like mye tid på å tilpasse dem for nginx og lighttpd som du bruker på å konfigruere Varnish. Jeg bruker det jeg føler meg mest komfortabel med, ikke nødvendigvis det som gir best ytelse out of the box, her finnes det en skog av andre teknikker som virkelig utgjør forskjeller.
Om jeg forstår deg rett, så mener du at du har en side der du inkluderer andre sider i form av f.eks. jQuery? Dette vil belaste serveren mer enn om det bare var den enkelte siden, ja.
Sitat av 852 Vis innlegg
Vil belastingen på serveren bli noe mer enn forespørselen etter "hovedsiden" og de aktuelle undersider? Med andre ord, finnes det tilfeller hvor client-side scripting belaster serveren?
Vis hele sitatet...
Nei! Client-side må defineres som at det eksekverer client-side, og hvis du begrenser til å si at klient-skriptet ikke gjør noen andre forespørsler enn de du nevner så har de altså ikke lenger noe med serveren å gjøre, og vil ikke påvirke denne på noen som helst måte.
852
852's Avatar
Trådstarter
Mener dere altså at forskjellen blir såpass stor at man bør helst velge så mye client-side scrpting som mulig når man scripter? Altså at man rett og slett skriver .html sidene isteden for å lagre informasjonen i en database og hente dem ut når det blir en request fra klienten.

Hvordan har freak.no taklet dette? Er det i en db eller har dere alt i .html filer?
Sist endret av 852; 26. mai 2011 kl. 19:48. Grunn: scrripter ble endret til scripter
Jeg bruker som regel tshark for å analysere trafikk, der finnes også en GUI utgave: http://www.wireshark.org/

I hovedsak vil jeg at sortering av data og visningsrelaterte script ofte kan være formålstjenlige å ha client side, for å unngå å hente ut de samme postene flere ganger. Også i tilfeller hvor man skal videreforedle data kun for den ene brukeren og andre ikke har utbytte av prosesseringen vil jeg si at det kan være greit å kjøre client side.
Sitat av 852 Vis innlegg
Mener dere altså at forskjellen blir såpass stor at man bør helst velge så mye client-side scrpting som mulig når man scripter? Altså at man rett og slett skriver .html sidene isteden for å lagre informasjonen i en database og hente dem ut når det blir en request fra klienten.

Hvordan har freak.no taklet dette? Er det i en db eller har dere alt i .html filer?
Vis hele sitatet...
Servere i dag er ikke så dårlige. Et .php script er ingenting mot det en serveren kan klare, med mindre den er svært gammel.

Å skrive alt som .html filer er en svært dårlig ide, fordi hele designet på siden, alle menyer og alt må kopieres for hver fil. Dersom du da skal endre et bilde i headeren, et menyelement eller noe liknende, får du en umulig jobb, hvis du har mange filer. Ikke gjør det

Et forum som freakforum kan ikke benytte seg at statiske .html filer, fordi innholdet er dynamisk. For å få til funksjonalitet med posting og så videre, må man bruke et server-side språk. Freakforum bruker php (se i URL-en).

Man bør lage sidene sine dynamiske, enten man kan gjøre det selv, eller man bruker et CMS som wordpress eller joomla eller umbraco. Det er svært sjelden at en side bruker statiske filer.

Serveren takler det. Serveren er bygd for det.

Det du må være forsiktig med, er å kode dårlig. Da begynner serveren å slite. Hvis du, for eksempel, har en løkke (while), som av en eller annen grunn ikke avbrytes, slik at samme løkke kjøres uendelig mange ganger, da begynner serveren fort å slite. PHP har en sperre for slikt, mens andre språk ikke har det.

En annen felle er å lagre for mye i minnet. Det er ikke så lett å få til det i PHP, der har du stort sett bare $_SESSION variabelen. I ASP.NET, derimot, har du et program som kjører i bakgrunnen hele tiden, og der kan man lagre ting i minnet på mange måter, gjennom statiske variabler eller session. Er man uforsiktig med minne, begynner serveren å merke det.

Så lenge du har en god måte å programmere på, klarer serveren det fint, selv på sider som blir besøkt mye.
Sitat av Jannis! Vis innlegg
Servere i dag er ikke så dårlige. Et .php script er ingenting mot det en serveren kan klare, med mindre den er svært gammel.

...

Serveren takler det. Serveren er bygd for det.

Det du må være forsiktig med, er å kode dårlig. Da begynner serveren å slite. Hvis du, for eksempel, har en løkke (while), som av en eller annen grunn ikke avbrytes, slik at samme løkke kjøres uendelig mange ganger, da begynner serveren fort å slite. PHP har en sperre for slikt, mens andre språk ikke har det.
Vis hele sitatet...
Syns du det at fordi prosessorene er raskere og vi har mer minne er et argument for å lage klønete løsninger?

Du kan fortsatt lage .HTML filer for designet, evt med templating, det er ofte lurt i større prosjekter å skille design( HTML / CSS ) og business logic( .php / .py[c] / .asp / .jsp ) .js kan representere design og business logic...

Jeg tror at det å planlegge hvert steg( form follows function ) er optimalt, uansett ytelse, hva om løsningen skal skaleres?
Sist endret av fxxked; 27. mai 2011 kl. 09:09.
Det finnes mange måter å sy sammen en website på. Her er noen eksempler:
  1. Siten består bare av statiske filer (html, css, js, bilder, etc)
  2. Siden består bare av statiske filer, men de har blitt generert i en batch av et program. På denne måten unngår man å måtte duplisere effort når man lager siten. Et eksempel på en sånn side som jeg knoter litt med når jeg har litt tid til overs er languageheap.com. Den består bare av statiske filer, men genereres av en kombinasjon av Clojure og Ruby.
  3. Siden består av statiske filer + dynamiske scripts på serveren som modifiserer de statiske filene ved behov. Et eksempel kan være en fil-basert blog hvor innhold lagres som XML, og statiske sider genereres hver gang man lager en ny post.
  4. Siden består i hovedsak av dynamiske scripts på serveren + noen dynamiske filer. De dynamiske scriptene genererer html hver gang, men innholdet kan caches for å øke ytelsen.

Klient-side scripting brukes på alle disse sidene, men er viktigere på de første på listen fordi disse ikke har mulighetene som finnes på serveren.

For 15+ år siden var de fleste sider av type 1. I dag er de fleste sider av type 4, laget i PHP, Python, Perl, Ruby, ASP.NET, JSP eller lignende.

Type 2 kan være lurt om serveren ikke har mulighet for å kjøre scripts, og øker ytelsen.

Type 3 kan også øke ytelsen om man gjør det riktig.

Rettelse: I punkt 4 skulle det selvsagt stå "+ noen statiske filer"
Sist endret av tormaroe; 29. mai 2011 kl. 07:50.
▼ ... over en uke senere ... ▼
Sitat av fxxked Vis innlegg
Syns du det at fordi prosessorene er raskere og vi har mer minne er et argument for å lage klønete løsninger?

Du kan fortsatt lage .HTML filer for designet, evt med templating, det er ofte lurt i større prosjekter å skille design( HTML / CSS ) og business logic( .php / .py[c] / .asp / .jsp ) .js kan representere design og business logic...

Jeg tror at det å planlegge hvert steg( form follows function ) er optimalt, uansett ytelse, hva om løsningen skal skaleres?
Vis hele sitatet...
Man skal ikke lage klønete løsninger. Man skal lage bra løsninger. Å lage hele dynamikken på en side som javascript, og sette opp hele siden som .html filer, å kopiere samme HTML-mal over på hver fil, det er svært klønete og vanskelig å bruke.

Man skal ikke lage dårlige og klønete løsninger fordi man tro at include brenner prosessoren. Da har man misforstått.
Sist endret av Jannis!; 6. juni 2011 kl. 13:20.
Jeg ser enkelte som fortsatt lager énbrukerløsninger, og ikke tenker på bruken av objektene fra flere brukeres ståsted med den idéen tilgjengelig at dersom det begynner å gå tregt, kjøper vi bare ny hardware.

Sitat av Jannis! Vis innlegg
Å lage hele dynamikken på en side som javascript, og sette opp hele siden som .html filer, å kopiere samme HTML-mal over på hver fil, det er svært klønete og vanskelig å bruke.
Vis hele sitatet...
Høres jo ut som en helt vanlig norsk avis, bortsett fra at man sansynligvis ville gjort det serverside.
Sist endret av fxxked; 6. juni 2011 kl. 13:25.
852
852's Avatar
Trådstarter
Føler jeg blir møtt av to helt adskilte holdninger/prinsipper. Den ene ser ut til å satse på gode servere, mens den andre vil ikke tenke på servere men satse på god koding selv om serveren er veldig god. Jeg tror jeg hører til kategori to her, fordi jeg vet at jeg med glede går gjennom flere koder/kopier-lim inn osv... selv om jeg har bare (f.eks) 0,0001 ms å spare. Dette er fordi jeg liker å skalere alt, og optimaliserer derfor til størst mulig grad.

Jeg har nå lest en god stund frem og tilbake og jeg vet at man kan kjøpe skikkelig gode servere, og hvis ikke kan man leie dedikerte servere (ikke VPS) til et par tusen i måneden som klarer det meste. Men det er ikke poenget. Jeg tror vi alle får våre egne prinsipper etterhvert som vi utvikler oss personlig. Det er kanskje vanskelig å si hvilken av de to ovennevnte prinsippene som er "best" m.t.p at begge har ulike fordeler og ulemper helt avhengig av formålet. Derfor mener jeg at vi kan bli enige om å være uenig. Men jeg synes likevel at det er veldig viktig, gøy, og utrolig interessant å diskutere dette. Jeg mener også at det er ubeskrivelig viktig å være åpen for andres synspunkter og meninger. Jeg føler jeg lærer veldig mye av dere. Forumet har uten tvil stor samfunnsverdi. Mange takk.
Det er vel ikke noe å være for eller imot er du tvil kjør tshark og mål.

Jeg syns ikke det har noe med 0,0001 ms å spare å gjøre, jeg syns det har mer med at løsningen kan optimaliseres om man gjør refactoring riktig.
Dette er et svar til begge trådene:
Enig i at det er viktig, og riktig, å optimalisere siden sin.
Enig i at det er viktig, og riktig, å skrive god kode.

Men, å kopiere og lime inn samme kode flere ganger, for å slipe include, er ikke måten å gjøre det på. Du må finne andre og mer effektive måter.

Kopiering av kode på den måten gjør det umulig dersom du senere skal legge inn noe nytt i den snutten. Da må du gjøre samme jobb i hver fil den koden ligger. Venn deg til å kun skrive funksjonalitet en eneste gang, og deretter bare kalle på samme funksjon, fil, klasse, for å gjøre det samme igjen. Å kopiere og lime inn lik kode mange ganger er ikke bra, på noen måte, det er det jeg vil fram til.

Det er selvfølgelig lurt å optimalisere kode
Og det er selvfølgelig lurt å spare serveren Finn den gylne middelvei.

852 snakker om å kopiere toppen på HTML-koden sin inn i hver fil, i stedet for å kalle include("header.php");
Det mener jeg er feil. Det sparer ikke 0,0001 ms engang. Dersom du da skal ha inn jQuery.1.6.1.min.js på siden din, får du en umulig jobb, der du må legge inn den <script> taggen på hver eneste side.

Du må skrive kode slik at du kun gjør en jobb en gang. Ikke lag samme funksjonalitet flere steder.

Håper jeg fikk uttrykt det jeg ville denne gangen
Jeg var aldri negativ til å spare serveren, jeg var negativ til å kutte ut viktig funksjonalitet for å spare serveren, spesielt når denne viktige funksjonaliteten ikke krever så mye.

Denne tråden handlet om å kutte ut serverside, og kun kjøre client-side. Det er ikke lurt, men du må kode server-side på en måte som gjør at det ikke krever for mye.
Den andre tråden handlet om å kutte ut include for å spare serveren. Det er heller ikke lurt. De aller aller fleste PHPsider i dag bruker include på ett eller annet sted.

Jeg jobber ofte med å forbedre koden min, slik at den ikke krever for mye av serveren, men husk på å gjøre det på riktig måte

Nå har jeg gjentatt meg selv mange ganger her, håper bare det kom tydelig fram denne gangen