loathsome Skrevet 17. juli 2008 Del Skrevet 17. juli 2008 (endret) Å samle all evt. output fra en loop i en "output variabel" (så fremt man ikke bruker output buffering) og så printe denne ut ETTER loopen er ferdig sparer også en del tid. Her har du et script jeg har skrevet for å teste dette; <?php set_time_limit (0); $time = microtime(); $time = explode(' ', $time); $time = $time[1] + $time[0]; $begintime = $time; for ($i=0; $i < 1000000; $i++){ echo '<!-- '.$i.' -->'; } $time = microtime(); $time = explode(" ", $time); $time = $time[1] + $time[0]; $endtime = $time; $totaltime = ($endtime - $begintime); echo "\nWithout output variable: $totaltime seconds.\n\n"; $time = microtime(); $time = explode(' ', $time); $time = $time[1] + $time[0]; $begintime = $time; $output='';for ($i=0; $i < 1000000; $i++){ $output .= '<!-- '.$i.' -->'; } print $output; $time = microtime(); $time = explode(" ", $time); $time = $time[1] + $time[0]; $endtime = $time; $totaltime = ($endtime - $begintime); echo "\nWith output variable: $totaltime seconds.\n\n"; $time = microtime(); $time = explode(' ', $time); $time = $time[1] + $time[0]; $begintime = $time; ob_start (); for ($i=0; $i < 1000000; $i++){ echo '<!-- '.$i.' -->'; } ob_end_flush(); $time = microtime(); $time = explode(" ", $time); $time = $time[1] + $time[0]; $endtime = $time; $totaltime = ($endtime - $begintime); echo "\nWith Output Buffering: $totaltime seconds."; ?> Så konklusjonen er at "echo" direkte i en loop er ca dobbelt så treg (CPU-tidkrevende) som alternativene. En forskjell som vil bare bli mer notisbar på en webside, når HTTP-protokollen kommer inn i spillet også. Eventuelle forskjeller mellom OB og en output variabel er såpass små, at jeg vil påstå at det lønner seg å bruke output variabel når en har mulighet da dette gir større fleksibilitet (samt er en smule raskere i snitt, uansett om dette er mer eller mindre ubetydelig). @Ernie: Jeg skjønner poenget ditt, men når man allerede vet hva som er det beste å gjøre (enten det er relativt sett eller ikke), er det like greit å gjøre det såfremt det ikke går utover brukervennlighet for enten sluttbruker eller programmør. Endret 17. juli 2008 av loathsome Lenke til kommentar
JohndoeMAKT Skrevet 17. juli 2008 Del Skrevet 17. juli 2008 loathsome : Grunnen til at output buffering er raskere skal være fordi den allokerer minne i større blokker enn nødvendig, så PHP må skjeldnere be OS som mer minne i motsettning til variabelutvidelse som bare bruker akkurat brukt mengde minne. I et statistikkverktøy jeg har laget hvor hastighet er paramount fikk jeg omtrent 10% flere registreringer per tidsenhet i Apache Benchmark ved å echoe JSON i et buffer enn å appende til en variabel. Lenke til kommentar
Ernie Skrevet 18. juli 2008 Del Skrevet 18. juli 2008 @Ernie: Jeg skjønner poenget ditt, men når man allerede vet hva som er det beste å gjøre (enten det er relativt sett eller ikke), er det like greit å gjøre det såfremt det ikke går utover brukervennlighet for enten sluttbruker eller programmør. Uenig. Å fokusere på den type optimaliseringer er poengløst og bortkastet. At linje A tar 1µs mindre enn linje B har absolutt ingenting å si når man trenger 1000 av de får å få 1ms. Det er ikke uten grunn at Donald Knuth har uttalt «We should forget about small efficiencies, say about 97% of the time: premature optimization is the root of all evil.». Slikt fokus leder til mindre lesbar kode og ikke minst kode som kan være verre å feilsøke. Prøv ikke å påstå at man får ytelsesproblemer fordi man bruker print over echo, " over ', ikke bruker statiske metoder når mulig, bruker strlen for å sjekke lengde, splitter opp koden i «unødvendig» mange funksjoner osv. Det har rett og slett ingen rot i virkeligheten. Det som teller er hvordan ting fungerer. Får noen ytelsesproblemer trenger man uannsett dedikert server, og da kan man installerer en PHP akselerator, hvilket vil gi opptil 10x bedre ytelse. Alt det styret rundt echo, fnutter osv. vil aldri noen gang klare å oppnå en slik forbedring, det er marginale besparelser på knapt 1µs pr. linje. Å fokusere på slike småting er bare et tydelig tegn på at man ikke veit hvor man faktisk bør se etter mulig optimalisering. Som sagt, valg av fremgangsmåte har mye, mye større innvirkning på ytelsen enn småting som echo og fnutter. Lenke til kommentar
Alastor Skrevet 20. juli 2008 Del Skrevet 20. juli 2008 (endret) Kan noen fortelle meg hvordan de siste 10 innleggene hjalp trådstarter med problemet sitt? Ikke det nei? Da går vi over til å hjelpe trådstarter igjen, om det fortsatt trengs . Endret 20. juli 2008 av Alastor Lenke til kommentar
JohndoeMAKT Skrevet 20. juli 2008 Del Skrevet 20. juli 2008 print file_get_contents('filnavn.txt'); Lenke til kommentar
Epower Skrevet 20. juli 2008 Del Skrevet 20. juli 2008 print nl2br(file_get_contents('filnavn.txt')); Lenke til kommentar
loathsome Skrevet 20. juli 2008 Del Skrevet 20. juli 2008 (endret) print nl2br(file_get_contents('filnavn.txt')); echo '<pre>', file_get_contents('filnavn.txt'), '</pre>'; Kan noen fortelle meg hvordan de siste 10 innleggene hjalp trådstarter med problemet sitt? Ikke det nei? Da går vi over til å hjelpe trådstarter igjen, om det fortsatt trengs . Synes egentlig en slik avsporing er greit i sånne sammenhenger. Trådstarter fikk svar på sitt spørsmål, og en drøss med (nyttig) ekstrainformasjon i tillegg. Endret 20. juli 2008 av loathsome Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå