FAQ |
Kalender |
2004-11-02, 10:30 | #1 | ||
|
|||
Medlem
|
Hej,
Jag funderar lite över performance vid hantering av bilder. Jag har två metoder att välja på: 1. Alla bilder går via image.php image.php öppnar filen och läser filen från en katalog på disk och spottar därefter ut bilden till webbläsaren. 2. Bilder länkas som vanligt Alltså en <img>-tagg pekar direkt på bildens position. Min fråga är; är alternativ 1 mycket långsammare än alternativ 2? Jag trodde först att så var fallet, men sedan började jag tänka i banor som att "Någon måste ju ändå läsa filen från disk, om det är ett PHP-script (image.php) eller Apache som gör detta borde väl inte spela någon stor roll?" Vad tror ni? Anledningen till att jag helst vill gå via image.php är för att jag vill kunna styra vilka som skall få tillgång till bilderna genom att kontrollera deras SESSION. Tacksam för svar från performance-gurus! |
||
Svara med citat |
2004-11-02, 11:18 | #2 | |||
|
||||
Klarade millennium-buggen
|
En webläsare kan göra flera simultana anrop mot exempelvis en img. Hur php filer exekveras vet jag inte, men då en webläsare förväntar ett svar ifrån ett php skript så vet jag inte om de läggs på "kö" eller dylikt. Du har ju en php som i sitt htmlsvar anropar en php. En php i sig bör ju ta något längre tid att exekvera även fast den är mycket simpel. Frågan är om det är så pass mycket tid så du behöver bry dig om det.
Någon? |
|||
Svara med citat |
2004-11-02, 11:25 | #3 | ||
|
|||
Medlem
|
Jag har bilder och vanliga dokument också. Låt säga att någon laddat upp en TIFF-bild på 10MB.. om PHP-scriptet skall läsa in filen och spotta ut den till webbläsaren kommer detta att ta lite tid. Men filen måste ju ändå spottas ut till läsaren av något... PHP eller via direkt länk och då av Apache?
Vad tror ni? |
||
Svara med citat |
2004-11-02, 16:32 | #4 | ||
|
|||
Mycket flitig postare
|
Citat:
I början av php-dokumentet så spottar du ut klockslaget/sekunder, och samma sak nederst i dokumentet, så ser du juh hur snabbt sidan laddas? |
||
Svara med citat |
2004-11-02, 16:36 | #5 | ||
|
|||
Medlem
|
Citat:
|
||
Svara med citat |
2004-11-02, 17:23 | #6 | |||
|
||||
Klarade millennium-buggen
|
Citat:
Du kanske hittar svaret redan i apache servern (som jag vet 0 om). Finns det "trådar" den kör anrop i eller ställs allt på kö, eller är det bara anrop till php som går i en kö och bilder/html whatever i egen etc etc. |
|||
Svara med citat |
2004-11-02, 18:06 | #7 | ||
|
|||
Supermoderator
|
Gör som nomicon sa, testa. Det blir ju en viss overhead jämfört med en img-tag i HTML, men det verkar ju funka för Lunar...
|
||
Svara med citat |
2004-11-02, 22:36 | #8 | ||
|
|||
Medlem
|
Min syn på saken:
Har du alternativet att generera en korrekt bildurl i htmlen, gör det. Att köra script som läser och skickar filen är overkill i de fall bilden är en statisk bild. (genererar du en bild är det en annan sak.) http 1.1 tillåter att man (webläsaren) kan återanvända en koppling mot servern för flera requests, vilket ger ett "kösystem" i sig. Men ie tillåter i sin tur (som standard) 4 kopplingar mot servern samtidigt, vilket gör att du har 4 köer som hämtar html/bilder/css/javascript/whatever. Har du stora bilder så är det en sak. Men har du många små bilder så blir det en anhopning förfrågningar på scriptet och då kommer scriptet vara avsevärt långsamare är httpd. Jag har inga siffror, men vi gjorde en dylik lösning för ett antal år sedan, och det är skillnad. (för besökaren that is). Det var iofs en äldre cgi installation av php. httpd har långt mer erfarenhet av att spotta ut filer. Så är det det den ska göra så rekomenderar jag att köra på "statiska" bilder. |
||
Svara med citat |
2004-11-03, 09:57 | #9 | ||
|
|||
Supermoderator
|
Som jag förstod det ska användaren kunna ladda ner bilder om vissa parametrar i hans/hennes session stämmer, inte på alla bilder som hör till designen. Om det rör alla bilder (även små) som ligger på sidan och ingår i designen bör man inte köra dem genom ett script. Men om du vill räkna antal nerladdningar mm så borde det gå bra att köra genom ett script.
|
||
Svara med citat |
2004-11-03, 11:31 | #10 | |||
|
||||
Nykomling
|
Ett snabbt test med ApacheBench visar att det går ungefär 3 gånger snabbare att anropa bilden direkt.
Direkt: Citat:
Citat:
Citat:
Kod:
$sFilename = "./image.jpg"; $f = fopen($sFilename, 'rb'); header('Content-Type: image/jpeg'); header('Content-Length: ' . filesize($sFilename)); fpassthru($f); exit(); |
|||
Svara med citat |
Svara |
|
|