Gå til innhold

Hvordan skrive ut innholdet i en tekst fil?


Anbefalte innlegg

Å 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 av loathsome
Lenke til kommentar
Videoannonse
Annonse

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: 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
print nl2br(file_get_contents('filnavn.txt'));

 

echo '<pre>', file_get_contents('filnavn.txt'), '</pre>';

 

:closedeyes:

 

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 av loathsome
Lenke til kommentar

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...