Hi!
#1 str_replace 2 Version
$str_repl_2 = str_replace("+","%2B",$data);
$str_repl_2 = str_replace("/","%2F",$str_repl_2);
#2 urlencode Version
$urlencode = urlencode($data);
dicht gefolgt von
#3 POSIX 1 Version
$from = array("+","/");
$to = array("%2B","%2F");
$regExp_3 = ereg_replace($from,$to,$data);
#4 str_replace 1 Version
$from = array("+","/");
$to = array("%2B","%2F");
$str_repl_1 = str_replace($from,$to,$data);
Obwohl str_replace 2 meist knapp in Führung liegt, werde ich wohl urlencode verwenden, das ist irgendwie einfacher und so gut wie nicht langsamer.
Nochmal die aktuelle Ausgabe:
generate string: 0.0422719717026 seconds
compress string: 0.00347793102264 seconds
generate base64: 8.30888748169E-005 seconds
data-string: 57877 bytes
compressed string: 7036 bytes
base64-string: 9384 bytes
"+" in base64-string: 142
"/" in base64-string: 147
Urlencode: 0.000148057937622 seconds
1 regExp(perl): 0.000293016433716 seconds
2 regExp(perl): 0.000200986862183 seconds
1 regExp(posix): 0.0001540184021 seconds
2 regExp(posix): 0.0093799829483 seconds
1 str_Replace: 0.000180006027222 seconds
2 str_Replace: 0.000147938728333 seconds
Explode-Implode: 0.000357031822205 seconds
substr: 0.0550709962845 seconds
Was passiert, wenn du das ganze Zeug in eine for-Schlaufe packst und etwa 1'000'000 mal iterieren lässt? - So genau kann auch Microtime nicht sein, dass du die Ablaufgeschwindigkeit eines einzigen Befehls signifikant messen kannst.
Wieso? es kommen die Zeichen knapp 300 mal vor, und immer wenn ich es wiederhole erhalte ich fast dasselbe Ergebnis. microtime ist IMHO sehr wohl genau genug! Woher kommt sonst die gleichbleibende Tendenz? Nur wie man sieht sind ander teile des Scriptes erheblich langsamer, vor allem das Komrimieren zuvor, und noch viel schlimmer das generieren der Daten aus der Datenbank. Aber ich kann das ja mal mit der kompletten Datenbank probieren, dann sind das nochmal erheblich mehr Daten, wobei ich selten mehr als die gerade getesteten DAten verwenden werde. Also ist das ganze eigentluch total egal mich hier um ein paar millisekunden zu streiten, wenn alleien die Übertagung von 10KB 1-2 Sekunden dauert!
Hier nochmal alle meine Versuche, der eingerückte Code ist der entscheidene:
$time_start = getmicrotime();
$urlencode = urlencode($data);
$time_end = getmicrotime();
$time = $time_end - $time_start;
echo str_pad ("Urlencode: ",20)."$time seconds\n";
$time_start = getmicrotime();
$from = array("/+/","///");
$to = array("%2B","%2F");
$regExp_1 = preg_replace($from,$to,$data);
$time_end = getmicrotime();
$time = $time_end - $time_start;
echo str_pad ("1 regExp(perl): ",20)."$time seconds\n";
$time_start = getmicrotime();
$regExp_2 = preg_replace("/+/","%2B",$data);
$regExp_2 = preg_replace("///","%2F",$regExp_2);
$time_end = getmicrotime();
$time = $time_end - $time_start;
echo str_pad ("2 regExp(perl): ",20)."$time seconds\n";
$time_start = getmicrotime();
$from = array("+","/");
$to = array("%2B","%2F");
$regExp_3 = ereg_replace($from,$to,$data);
$time_end = getmicrotime();
$time = $time_end - $time_start;
echo str_pad ("1 regExp(posix): ",20)."$time seconds\n";
$time_start = getmicrotime();
$regExp_4 = ereg_replace("+","%2B",$data);
$regExp_4 = ereg_replace("/","%2F",$regExp_4);
$time_end = getmicrotime();
$time = $time_end - $time_start;
echo str_pad ("2 regExp(posix): ",20)."$time seconds\n";
$time_start = getmicrotime();
$from = array("+","/");
$to = array("%2B","%2F");
$str_repl_1 = str_replace($from,$to,$data);
$time_end = getmicrotime();
$time = $time_end - $time_start;
echo str_pad ("1 str_Replace: ",20)."$time seconds\n";
$time_start = getmicrotime();
$str_repl_2 = str_replace("+","%2B",$data);
$str_repl_2 = str_replace("/","%2F",$str_repl_2);
$time_end = getmicrotime();
$time = $time_end - $time_start;
echo str_pad ("2 str_Replace: ",20)."$time seconds\n";
$time_start = getmicrotime();
$implode = implode("%2B",explode("+",$data));
$implode = implode("%2F",explode("/",$implode));
$time_end = getmicrotime();
$time = $time_end - $time_start;
echo str_pad ("Explode-Implode: ",20)."$time seconds\n";
$time_start = getmicrotime();
for ($i = 0; $i < strlen($data); $i++) {
if(substr ($data, $i, 1) == "+") {
$data = substr_replace ( $data, "%2B", $i, 1);
}
else if (substr ($data, $i, 1) == "/") {
$data = substr_replace ( $data, "%2F", $i, 1);
}
}
$time_end = getmicrotime();
$time = $time_end - $time_start;
echo str_pad ("substr: ",20)."$time seconds\n";
Viele Grüße
Andreas