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-07 19:16

Citat:

Originally posted by WizKid@Nov 7 2004, 18: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.
En sån funktion skulle förstöra hela funktionen med programmet. Du kan läsa mer om ApacheBench här:
httpd.apache.org/docs/programs/ab.html

kullervo 2005-08-18 21:17

Drar upp den här gamla tråden eftersom jag sitter i samma sits nu.

Jag vill alltså gärna låta PHP sköta berhörighetskontroll för bilder. Jag har kört benchmark och kommit fram till att det är hälften så snabbt att göra detta med PHP. Nu är frågan om det har hänt något på den här fronten och alltså om det finns några bra metoder att snabba upp PHP. Jag har testat olika inställningar för output buffer utan nämnvärt resultat. Kan det vara så att PHP 5 av någon anledning är snabbare på detta? Andra tips på trim uppskattas (allt från kompileringsflaggor till inställningar).

Mjukvara:
Linux
Apache 2 (prefork MPM)
PHP 4

Testkörd kod:
Citat:

<?php
readfile('testfil');
?>


Micke04 2005-08-19 14:39

Jag använder eAccelerator som cachar phpfilerna färdigkompilerade. Detta hjälper mig en hel del. Jag vet inte hur mycket det hjälper vid bildvisning, men det är jag nyfiken på.

eAccelerator är en vidareutveckling av turckmmcache.

kullervo 2005-08-19 16:25

Med eAccelerator tjänar jag ca. 5-7% i tid. Det medgör att det bara tar 60% mer tid med PHP. Hur jag kunde få det till att det tog dubbelt så lång tid med PHP igår vet jag inte för det är samma kod jag kört testet på. Men men, 60% är inte så farligt mycket.

WizKid 2005-08-19 17:21

Hittade denna kommentar på php.net "readfile and fpassthru are about 55% slower than doing a loop with "feof/echo fread"." Vet inte om det stämmer men du skulle ju alltid kunna testa.

Tvartom 2005-08-23 12:09

Kul att denna gamla tråden kom upp igen.
Jag håller på med ett system där jag har stått inför precis
samma övervägande.

För att undvika att databasen behöver tillkallas vid var bild som ska skickas till webläsaren,
så funderar jag på följande.

Sidan som generarar alla [img]image.php?id...[/img]-tagar
kontrollerar ju även att bilden är godkänd för användarn
(Annars skulle inte tagen-skrivas)
Således behöver inte detta test göras fler gånger så en cache med
denna information lägges i en session-variabel.

Så image.php kontrollerar enbart mot databasen om bilden saknas i session-variabeln.
image.php rensar även i session-variabeln när bilden visasts, för att sessions-datamängden inte
ska växa ohämat.

Jag har inte haft tid att testa systemets prestanda än, men jag hoppas det ska snabba upp det hela!

/ Lasse

eg0master 2005-08-23 13:44

Tvartom: Jag tror inte din egen hemmagjorda cachning ger något nämnvärt i performance vinst.

För image.php måste ju läsa filen (readfile, read eller passthru) oavsett och det är där flaskhalsen ligger tror jag. Inte i hur effektivt du kollar om bilden är ok eller inte mot databasen.

Weaver 2007-08-28 14:23

Halkade in på denna gamla tråden.

Varför inte kombinera det bästa av två världar. Låt php kontrollera om användaren får ladda ned bilden och låt apache skicka den.

Jag tänker mig nått i stil med detta:
Kod:

image.php
Kontrollera om användaren får ladda ned bilden
  Ja användaren har rättighet
    header('Location: <bildens url>');
  Nej användaren har inte rättigheter att se bilden
    header('<sänd forbidden header>');

Någon kanske har lust att benchmarka

Dock så kan tekniska användare hotlinka till denna bilden om de tittar på headrarna som servern skickar tillbaka. Men i slutändan är väl allt en avvägning.

Edit: Formattering av pseudokod

WizKid 2007-08-28 14:39

Men om du gör header('Location: <bildens url>'); vad hindrar då någon att gå direkt till bilden?

Däremot om man använder lighttpd kan man göra det. Då kan man göra auth-kollen i php och sen sätta headern x-sendfile vilket gör att Lighttpd kommer outputa bilden åt en. Mer info finns på http://blog.lighttpd.net/articles/2006/07/...7/02/x-sendfile.

Weaver 2007-08-28 14:56

Citat:

Men om du gör header(Location: bildens url); vad hindrar då någon att gå direkt till bilden?

Läs min postning igen...

Citat:


Däremot om man använder lighttpd kan man göra det. Då kan man göra auth-kollen i php och sen sätta headern x-sendfile vilket gör att Lighttpd kommer outputa bilden åt en. Mer info finns på http://blog.lighttpd.net/articles/2006/07/02/x-sendfile.

Intressant, gjorde lite mer research på X-Sendfile. Finns en mod så att också Apache användare kan få tillgång till denna utmärkta funktion: http://tn123.ath.cx/mod_xsendfile/

Så då är det bara att ta mitt exempel och byta ut Location mot x-sendfile och se till att modden är installerad på din Apache server.

Nu är det verkligen det bästa av två världar ;)


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