Kim Tetzlaff - KTJ-Media.dk: Men jeg siger at de redirects som laves fx med rewrite i htaccess, belaster serveren unødvendigt meget, og at det er bedre for serveren og brugerne, og ja den generelle hastighed på siden, at man flytter disse redirects over i vHost hvor det kun læses en gang eller PHP hvor det kun læses 1 gang.
Jeg er enig i vHost, men det er stadig mod_rewrite (htaccess) der bliver brugt. PHP er jeg ikke enig i. Det kan også siges, at de brugere der skal redirectes vil opleve et langsommere site af at det kører gennem PHP, fordi de skal sende 2 HTTP requests for at komme til siden, i stedet for 1 hvis det var via htaccess.
Når brugeren skal redirectes, vil denne ikke kunne mærke forskel om det er den ene eller den anden der laver det. Det er kun i det tilfælde at rigtig mange brugere pludselig skal redirectes inden for meget kort tid at brugerne vil kunne mærke forskellen. Men det scenarie har jeg i min tid med optimering 12+ år, ikke oplevet ske. og det er selv på sites der har mere end 10.000 redirects indskrevet.
Tror stadig ikke rigtig du forstår hvad det er jeg skriver, jeg siger ikke at selve redirecten er hurtigere i PHP end i htaccess, men at alt hvad du skriver i din htaccess, belaster serveren mere end hvis det bare stod i PHP.
også selvom du skriver dette
Kim Tetzlaff - KTJ-Media.dk: Jeg prøvede dette med 300 redirects (via rewrites) på en normal hjemmeside. Jeg testede forsiden på hjemmesiden med og uden htaccess, først uden for at se hvad hjemmesiden kunne klare , og derefter med htaccess og de 300 redirects (3 gange langsommere end udgangspunktet). Dernæst flyttede jeg de 300 redirects over i php, omskrev dem selvfølgelig så de testede om det var den rette url, ca 1200 linjer PHP blev lavet i denne forbindelse. Jeg testede så forsiden igen, og performance kom næsten helt op til udgangspunktet (10 forespørgslers forskel). altså det samme som hvis ikke der havde været nogen htaccess fil på serveren.
Og dette er som sagt fordi htaccess læses linje for linje ved hvert forespørgsel til en fil, uanset om du har brug for det eller ikke.
Ja okay, 300 redirects linje for linje er vel også en edge case som skal behandles individuelt. Det kan godt være du får en forbedring ved at lave 1200 linjer if-else-redirect-helvede i PHP, men du kunne jo også have optimeret htaccess filen og nok opnå samme effekt.
htaccess filen bliver kun læst linje for linje hvis du laver den på den måde. Der er et skip flag man kan bruge til at springe linjer over i htaccess filen. Hvis du har 300 linjer med f.eks. ?page=ID som skal redirectes til en bedre struktur, kan man bruge noget i stil med:
RewriteCond %{QUERY_STRING} ^page=([0-9]*)$
RewriteRule . - [S=300]
...300 redirects her...
Hvis den så ikke matcher den første linje, vil den springe de næste 300 RewriteRule's over, som så ikke vil blive læst linje for linje. Præcis det samme som en if statement i PHP.
Nej det er nu ikke en edge case, har mødt hundredvis af sites, der faktisk laver 1000+ redirects i deres htaccess, og har mødt endnu flere der laver 500+. og selv hvis du laver din skip, vil den rewrite alligevel belaste mere end hvis det stod i PHP. se fx eksemplet med den rewrite som wp bruger til permalinks, den er meget lille, men alligevel gør den at forespørgsler daler med næsten 16%.
og med den skipmetode vil du i de fleste tilfælde ende ud i at skrive en langt større rewrite. en ting er query_string som man netop kan klare med lidt kode (som alligevel vil belaste). Men prøv at tage et scenarie som hedder:
forside.php -> /
index.php -> /
testurlen.html -> /urlen-vi-tester/
osv. hvor der stort set ikke er noget pattern at gå efter.
Uanset hvordan du vender og drejer det du siger så lyver tallene nu engang ikke, næsten uanset hvad du skriver i din htaccess, så belaster du mere end hvis du skrev det i php især når vi snakker rewrites. og det vil som jeg har skrevet en del gange før, belaste ved alle filer der bliver hentet, og der hentes typisk mere end 1 fil fra en webserver, når man besøger en hjemmeside.
Og i disse dage med page caching mm, så er det endnu mere omsonst at skrive i htaccess filen, da selv kaldet til html filen vil blive belastet mere end hvis dine redirects stod i php. stod det i PHP, ville det slet ikke blive berørt når en helt almindelig bruger besøger siden. og jeg kan love dig for at langt de fleste kald til din server/hjemmeside, vil være til filer der findes og sider der eksisterer og dermed ikke skal redirectes på nogen måde.
Kim Tetzlaff - KTJ-Media.dk: Yderligere giver det også andre fordele såsom catch all, ingen tab af linkjuice mm. så der nu engang kun fordele ved at putte det over i php frem for at blive ved med at spæde til i sin htaccess.
De ting har ikke noget at sige. Du kan lave de samme ting i en .htaccess fil (catch-all, ingen tab af linkjuice).
selvfølgelig kan man det, men så skal du jo så bare spæde til htaccess filen, frem for at lave en smartere og bedre løsning. og det kræver samtidig også at du hele tiden holder øje med om der nu er noget der skal redirectes.
En catch all vil dog være noget svær for dig at lave i en htaccess fil, da den som ordet siger, fanger alt, også dem man ikke kender til, og skal du lave det i htaccess, vil det kræve at htaccess filen ved eksakt hvilke sider der findes på dit site.
Vi kan blive enige om at være uenige, men som en sidste ting, følger du de ting jeg siger, vil du opleve en hurtigere server der kan håndtere langt flere brugere. Og det er uanset om du tror på det eller ikke :)
MVH Kim