WN

WN (https://www.wn.se/forum/index.php)
-   Serversidans teknologier (https://www.wn.se/forum/forumdisplay.php?f=4)
-   -   Performance (https://www.wn.se/forum/showthread.php?t=4265)

Mikael Simonsson 2004-11-03 12:07

Jag glömde ange storlek på bilden, jag testade med en JPEG på 2.2 MiB.

/ mikael

netflax 2004-11-03 14:54

Tack Mikael, mycket bra redovisning!

3 ggr är ganska mkt... dock är mitt problem att jag vill kunna begränsa access till vissa bilder / filer vilket avgörs i PHP-filen. Får nog ta och överväga det hela och se om det verkligen är värt det.

Mikael Simonsson 2004-11-05 15:39

Personligen tycker jag att du ska köra med PHP om du behöver begränsa tillgången som du säger. 3 gånger är INTE mycket om man tänker på vad som sker på servern när PHP används instället för att anropa bilden direkt.

Citat:

Requests per second: 37.41 [#/sec]
För att ha något att jämföra med så brukar sidor som den du just nu tittar på ligga runt 5-10 #/sec.

/ mikael

eg0master 2004-11-05 16:28

Citat:

Originally posted by Mikael Simonsson@Nov 5 2004, 16:39
Personligen tycker jag att du ska köra med PHP om du behöver begränsa tillgången som du säger. 3 gånger är INTE mycket om man tänker på vad som sker på servern när PHP används instället för att anropa bilden direkt.

Citat:

Requests per second: 37.41 [#/sec]
För att ha något att jämföra med så brukar sidor som den du just nu tittar på ligga runt 5-10 #/sec.

/ mikael

Jag håller med. Dessutom gjordes ju testen med en stor bild (2.2 MB) och med 10 samtidiga hämtningar. Det tolkar jag som om bilden kunde överföras 3.741 gånger per sekund requesttråd. Nedladdningstiden borde vara begränsande i det testet. Det kan ju vara overheaden i fpassthru som gör större skillnad än att PHP i övrigt anropas.

Testet borde göras om med en mindre fil (om det är mindre filer du vill accesskolla), men i det stora hela tycker jag du ska köra på en PHP lösning för att sfå den funktionalitet du vill ha.

I slutänden vill du ju göra så mkt mer än att bara hämta filen. Din accesskontroll (mot DB förmodar jag) kommer sannolikt stå för större del av tiden än vad fpassthru komemr göra.

kullervo 2004-11-05 20:37

Citat:

Originally posted by Mikael Simonsson@Nov 3 2004, 12:31
image.php:
Kod:

$sFilename = "./image.jpg";
$f = fopen($sFilename, 'rb');

header('Content-Type: image/jpeg');
header('Content-Length: ' . filesize($sFilename));

fpassthru($f);
exit();


Man kan göra koden något snabbare med readfile() istället för att öppna filen manuelt. Om PHP ska använda sig av mySQL för att beräkna behörigheten, kan en anslutning mot databasen som aldrig stängs öppnas. Då slipper man upprätthålla en anslutning samt logga in på mySQL för varje bild.

Mikael Simonsson 2004-11-06 11:08

Citat:

Originally posted by kullervo@Nov 5 2004, 21:37
Man kan göra koden något snabbare med readfile() istället för att öppna filen manuelt.
I det här fallet är det ingen skillnad i prestanda eftersom PHP måste göra samma sak internt, d.v.s. få ett handle till filen och sen anropa en annan funktion för att läsa innehållet. Istället skulle man kunna tänka sig att byta ut filesize() mot fstat(), men samma sak där, det gör ingen skillnad i prestanda.

Däremot kanske readfile() är enklare att använda här och ger lite snyggare kod.

zoran 2004-11-07 10:05

Citat:

Ursprungligen postat av kullervo
Citat:

Ursprungligen postat av Mikael Simonsson
image.php:
Kod:

$sFilename = "./image.jpg";
$f = fopen($sFilename, 'rb');

header('Content-Type: image/jpeg');
header('Content-Length: ' . filesize($sFilename));

fpassthru($f);
exit();


Man kan göra koden något snabbare med readfile() istället för att öppna filen manuelt. Om PHP ska använda sig av mySQL för att beräkna behörigheten, kan en anslutning mot databasen som aldrig stängs öppnas. Då slipper man upprätthålla en anslutning samt logga in på mySQL för varje bild.

Man kan dessutom använda sig av mysqli_prepare om man har blivit välsignad med PHP5. Det är något jag saknat i PHP sen länge. Många likadana querys där bara enstaka villkor ändras snabbas upp betydligt med detta. Perfekt för autenticeringssystem.

Sen det där med bilden, hur snabbt det blir beror lite hur PHP är implementerat på servern. Att bara göra en bench utan att tala om något om konfigurationen säger i princip inte ett dyft.

Den överheaden som tillkommer gentemot en "statisk" bild är ju först och främst att sidan måste parsas av PHP-tolken. Om det är CGI-installerad PHP så får man enorm overhead jämfört om man kör FastCGI eller som apachemodul.

Den andra överheaden som tillkommer är hur optimerad din kod är. Det exempel vi såg är den enklaste och som ger minimal overhead. Sen kan det ju vara så att man vill fippla med bilden i sig och då får man använda sig av andra imagefunktioner som säkert ger ännu mer överhead.

/Zoran

Mikael Simonsson 2004-11-07 16:30

Citat:

Originally posted by zoran@Nov 7 2004, 11:05
Sen det där med bilden, hur snabbt det blir beror lite hur PHP är implementerat på servern. Att bara göra en bench utan att tala om något om konfigurationen säger i princip inte ett dyft.

Den överheaden som tillkommer gentemot en "statisk" bild är ju först och främst att sidan måste parsas av PHP-tolken. Om det är CGI-installerad PHP så får man enorm overhead jämfört om man kör FastCGI eller som apachemodul.

Den andra överheaden som tillkommer är hur optimerad din kod är. Det exempel vi såg är den enklaste och som ger minimal overhead. Sen kan det ju vara så att man vill fippla med bilden i sig och då får man använda sig av andra imagefunktioner som säkert ger ännu mer överhead.

Jag ville bara visa ett så enkelt exempel som möjligt, jag tror att alla här är medvetna om att det blir skillnad om man blandar in databasanrop och liknande. Men som jag skrev tidigare så är detta ändå en bra bit ifrån vad normala "tunga" sidor tar att generera.

Givetvis kör jag PHP som en Apachemodul, ledsen att det inte framgick i mitt exempel.

/ mikael

WizKid 2004-11-07 17:29

Vet inte hur ApacheBench funkar men är det möjligt att den cachar bilderna och därför bara får ett 304 svar? För isåfall bör man lägga in samma sak i PHP skriptet vilket är rätt enkelt gjort.

FredrikMH 2004-11-07 19:09

Jag tror inte du ska bli så förskräckt av att php tar 3 gånger längre tid på sig att läsa filen än om apache skulle göra det. Jag vet inte vilken typ av sida du driver men du tvingar användaren att bli medlem (ha seession) för att se bilden och hotlinking slipper du. Har du otur kan hotlinking göra din servern mer beslastad än vad du kan tänka dig.


Alla tider är GMT +2. Klockan är nu 12:08.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson