我的應用程序廣泛使用mb_字符串函數,切換到php 7導致應用程序整體速度較慢。我跟蹤了mb_字符串函數的問題。下面是基準代碼和結果:php 7 mb_(多字節)函數比5.3版本慢60%(僅限Windows問題)
$time = microtime();
$time = explode(' ', $time);
$start = $time[1] + $time[0];
$startms = $time[0];
for ($i=0; $i<100000; $i++) {
$a = mb_strlen("fdsfdssdfoifjosdifjosdifjosdij:ά", "UTF-8");
}
$time = microtime();
$time = explode(' ', $time);
$finish = $time[1] + $time[0];
$finishms = $time[0];
$total_time = round(($finish - $start), 4);
echo "mb_strlen: " . $total_time*1000 ." milliseconds<br/>";
$time = microtime();
$time = explode(' ', $time);
$start = $time[1] + $time[0];
$startms = $time[0];
for ($i=0; $i<100000; $i++) {
$a = mb_stripos("fdsfdssdfoifjosdifjosdifjosdij:ά", "α", 0, "UTF-8");
}
$time = microtime();
$time = explode(' ', $time);
$finish = $time[1] + $time[0];
$finishms = $time[0];
$total_time = round(($finish - $start), 4);
echo "mb_stripos: " . $total_time*1000 ." milliseconds<br/>";
$time = microtime();
$time = explode(' ', $time);
$start = $time[1] + $time[0];
$startms = $time[0];
for ($i=0; $i<100000; $i++) {
$a = mb_substr("fdsfdssdfoifjosdifjosdifjosdij:ά", $i, 1, "UTF-8");
}
$time = microtime();
$time = explode(' ', $time);
$finish = $time[1] + $time[0];
$finishms = $time[0];
$total_time = round(($finish - $start), 4);
echo "mb_substr: " . $total_time*1000 ." milliseconds<br/>";
平臺爲Windows 7 64位,IIS 7.5:
php 5.3.28
mb_strlen: 250 milliseconds
mb_stripos: 3078.1 milliseconds
mb_substr: 281.3 milliseconds
php 7.1.1
mb_strlen: 406.3 milliseconds
mb_stripos: 4796.9 milliseconds
mb_substr: 421.9 milliseconds
我不知道如果我的設立是錯了或什麼,但似乎是不可思議多字節函數應該更慢。任何想法爲什麼和如何解決這個問題?先謝謝你。
編輯:正如apokryfos的評論所暗示的,這可能是Windows唯一的問題。
對不起,我只是沒有看到它http://sandbox.onlinephpfunctions.com/code/401f138baf7c4110f1370f8e597bba5610dd0a47 – apokryfos
@apokryfos我不知道是什麼操作系統運行你提供的測試鏈接,也許這是一個與windows版本的問題php – MIrrorMirror
只是爲了可讀性:'microtime'需要一個布爾參數,它已經返回一個浮點數 - 不需要'爆炸'等 - 思考它:這可能是整個問題,'$ time = explode('',$ time); $ start = $ time [1] + $ time [0];'應該表示?你只是將當前時間戳的msec部分添加到秒部分? – ccKep