@phre4k: Nicht jeder konfiguriert RAM Disks oder SSDs in seinem Server.
Abgesehen davon wird das bei großen Dateien oder umfangreichen Datensätzen weiterhin Datenbanken unterlegen sein.
Datenbanken erlauben eine Optimierung, die sich vor allem in der Skalierung nach oben hin bemerkbar macht. Die kannst du nicht durch SSDs oder RAM Disks ersetzen.
Wenn es sowieso nur statische Inhalte sind, kannst du auch gleich die Webseite in den verschiedenen Sprachen ablegen.
[src=text]de-de/template
de-ch/template
en-us/template
en-uk/template
fr-fr/template[/src]
Für rein statische Inhalte wäre das wiederum auch einer Datenbanklösung überlegen.
[src=php]echo("Statischer Text")[/src]
macht überhaupt keinen Sinn. Eine statische Textausgabe durch den PHP-Interpreter zu jagen ist so ziemlich das ineffektivste, was du konstruieren kannst.
Erst mal ist PHP mit Standardinterpretern eine verhältnismäßig langsame Sprache, wenn du nicht gerade die
HHVM verwendest.
Textausgabe ist grundsätzlich in JEDER Programmiersprache langsam. Daher solltest du den Aufruft von echo bzw. print (auch println etc) soweit es geht vermeiden.
Als einfaches Benchmark:
[src=php]<?php
// wrappers for echo, print, printf
function useEcho($text){
echo($text);
}
function usePrint($text){
print($text);
}
function usePrintf($text){
printf($text);
}
// wrappers for single output and multi output
function multiPrint($method, $max) {
for($i=0; $i<$max; $i++){
$method("A");
}
}
function singlePrint($method, $max) {
$output = "";
for($i=0; $i<$max; $i++){
$output .= "A";
}
$method($output);
}
// initiates output<single|multi> using method<echo|print|printf> for trials letters
function test($variant, $method, $trials){
echo '<div style="height: 150px; width: 400px; overflow: scroll; float: left;"><h1>'.$method.' '.$variant.'</h1>';
$s = microtime();
$variant($method, $trials);
$e = microtime();
echo '</div>';
return round($e - $s, 6);
}
function benchmark(){
$trials = 5000;
$results = array();
// benchmark echo single output vs multi outputs
$outputMethod = 'useEcho';
$timeS = test('singlePrint', $outputMethod, $trials);
$timeM = test('multiPrint', $outputMethod, $trials);
$results['echo'] = array('single' => $timeS, 'multi' => $timeM);
// benchmark print single output vs multi outputs
$outputMethod = 'usePrint';
$timeS = test('singlePrint', $outputMethod, $trials);
$timeM = test('multiPrint', $outputMethod, $trials);
$results['print'] = array('single' => $timeS, 'multi' => $timeM);
// benchmark printf single output vs multi outputs
$outputMethod = 'usePrintf';
$timeS = test('singlePrint', $outputMethod, $trials);
$timeM = test('multiPrint', $outputMethod, $trials);
$results['printf'] = array('single' => $timeS, 'multi' => $timeM);
return $results;
}
function displayResults($results){
$output = '<table>';
$output .= '<tr>';
$output .= '<td></td>';
$output .= '<td>echo</td>';
$output .= '<td>print</td>';
$output .= '<td>printf</td>';
$output .= '</tr>';
$output .= '<tr>';
$output .= '<td>single</td>';
$output .= '<td>'.$results['echo']['single'].'</td>';
$output .= '<td>'.$results['print']['single'].'</td>';
$output .= '<td>'.$results['printf']['single'].'</td>';
$output .= '</tr>';
$output .= '<tr>';
$output .= '<td>multi</td>';
$output .= '<td>'.$results['echo']['multi'].'</td>';
$output .= '<td>'.$results['print']['multi'].'</td>';
$output .= '<td>'.$results['printf']['multi'].'</td>';
$output .= '</tr>';
$output .= '</table>';
print($output);
}
displayResults(benchmark());[/src]
Anstelle von microtime kannst du auch time verwenden, wenn du dir wegen overflows Gedanken machst.
Dann solltest du jedoch die Menge des Outputs (trials) stark erhöhen.
Im Ergebnis sollte der Test zeigen, dass du mit mehreren Ausgaben (mehrere Schreibaufrufe) stets langsamer bist, als mit wenigen, unabhängig davon welche Ausgabe-Methode (echo, print, printf) du verwendest.