Sergey 已修改 10 years ago. 還原成這個修訂版本
1 file changed, 332 insertions
bench.php(檔案已創建)
| @@ -0,0 +1,332 @@ | |||
| 1 | + | <?php | |
| 2 | + | /* | |
| 3 | + | ########################################################################## | |
| 4 | + | # PHP Benchmark Performance Script # | |
| 5 | + | # © 2010 Code24 BV # | |
| 6 | + | # # | |
| 7 | + | # Author : Alessandro Torrisi # | |
| 8 | + | # Author : Sergey Dryabzhinsky # | |
| 9 | + | # Company : Code24 BV, The Netherlands # | |
| 10 | + | # Date : July 2, 2015 # | |
| 11 | + | # version : 1.0.6 # | |
| 12 | + | # License : Creative Commons CC-BY license # | |
| 13 | + | # Website : http://www.php-benchmark-script.com # | |
| 14 | + | # # | |
| 15 | + | ########################################################################## | |
| 16 | + | */ | |
| 17 | + | ||
| 18 | + | $scriptVersion = '1.0.6'; | |
| 19 | + | ||
| 20 | + | $stringTest = " the quick <b>brown</b> fox jumps <i>over</i> the lazy dog and eat <span>lorem ipsum</span> Valar morghulis \n\rабыр\nвалар дохаÑÑ€Ð¸Ñ "; | |
| 21 | + | $regexPattern = "/[\s,]+/"; | |
| 22 | + | ||
| 23 | + | // Need alot of memory - more 1Gb | |
| 24 | + | $doTestArrays = true; | |
| 25 | + | ||
| 26 | + | set_time_limit(0); | |
| 27 | + | ini_set('memory_limit', '2048M'); | |
| 28 | + | ||
| 29 | + | $line = str_pad("-",78,"-"); | |
| 30 | + | $padHeader = 76; | |
| 31 | + | $padInfo = 20; | |
| 32 | + | $padLabel = 62; | |
| 33 | + | ||
| 34 | + | function get_microtime() | |
| 35 | + | { | |
| 36 | + | $time = microtime(true); | |
| 37 | + | if (is_string($time)) { | |
| 38 | + | list($f, $i) = explode(" ", $time); | |
| 39 | + | $time = intval($i) + floatval($f); | |
| 40 | + | } | |
| 41 | + | return $time; | |
| 42 | + | } | |
| 43 | + | ||
| 44 | + | function convert($size) | |
| 45 | + | { | |
| 46 | + | $unit=array('b','kb','mb','gb','tb','pb'); | |
| 47 | + | return @round($size/pow(1024,($i=floor(log($size,1024)))),2).' '.$unit[$i]; | |
| 48 | + | } | |
| 49 | + | ||
| 50 | + | function test_Math($count = 1400000) { | |
| 51 | + | $time_start = get_microtime(); | |
| 52 | + | $mathFunctions = array("abs", "acos", "asin", "atan", "decbin", "dechex", "decoct", "floor", "exp", "log1p", "sin", "tan", "pi", "is_finite", "is_nan", "sqrt", "rad2deg"); | |
| 53 | + | foreach ($mathFunctions as $key => $function) { | |
| 54 | + | if (!function_exists($function)) unset($mathFunctions[$key]); | |
| 55 | + | } | |
| 56 | + | for ($i=0; $i < $count; $i++) { | |
| 57 | + | foreach ($mathFunctions as $function) { | |
| 58 | + | $r = call_user_func_array($function, array($i)); | |
| 59 | + | } | |
| 60 | + | } | |
| 61 | + | return number_format(get_microtime() - $time_start, 3); | |
| 62 | + | } | |
| 63 | + | ||
| 64 | + | function test_String_Concat($count = 14000000) { | |
| 65 | + | $time_start = get_microtime(); | |
| 66 | + | $s = ''; | |
| 67 | + | for($i = 0; $i < $count; ++$i) { | |
| 68 | + | $s .= "- Valar moghulis\n"; | |
| 69 | + | } | |
| 70 | + | return number_format(get_microtime() - $time_start, 3); | |
| 71 | + | } | |
| 72 | + | ||
| 73 | + | function test_String_Simple_Functions($count = 1300000) { | |
| 74 | + | global $stringTest; | |
| 75 | + | $time_start = get_microtime(); | |
| 76 | + | $stringFunctions = array("strtoupper", "strtolower", "strrev", "strlen", "str_rot13", "ord", "trim"); | |
| 77 | + | foreach ($stringFunctions as $key => $function) { | |
| 78 | + | if (!function_exists($function)) unset($stringFunctions[$key]); | |
| 79 | + | } | |
| 80 | + | for ($i=0; $i < $count; $i++) { | |
| 81 | + | foreach ($stringFunctions as $function) { | |
| 82 | + | $r = call_user_func_array($function, array($stringTest)); | |
| 83 | + | } | |
| 84 | + | } | |
| 85 | + | return number_format(get_microtime() - $time_start, 3); | |
| 86 | + | } | |
| 87 | + | ||
| 88 | + | function test_String_Multibyte($count = 130000) { | |
| 89 | + | global $stringTest; | |
| 90 | + | ||
| 91 | + | if (!function_exists('mb_strlen')) return '-.---'; | |
| 92 | + | ||
| 93 | + | $time_start = get_microtime(); | |
| 94 | + | $stringFunctions = array("mb_strtoupper", "mb_strtolower", "mb_strlen", "mb_strwidth"); | |
| 95 | + | foreach ($stringFunctions as $key => $function) { | |
| 96 | + | if (!function_exists($function)) unset($stringFunctions[$key]); | |
| 97 | + | } | |
| 98 | + | for ($i=0; $i < $count; $i++) { | |
| 99 | + | foreach ($stringFunctions as $function) { | |
| 100 | + | $r = call_user_func_array($function, array($stringTest)); | |
| 101 | + | } | |
| 102 | + | } | |
| 103 | + | return number_format(get_microtime() - $time_start, 3); | |
| 104 | + | } | |
| 105 | + | ||
| 106 | + | function test_String_Manipulation($count = 1300000) { | |
| 107 | + | global $stringTest; | |
| 108 | + | $time_start = get_microtime(); | |
| 109 | + | $stringFunctions = array("addslashes", "chunk_split", "metaphone", "strip_tags", "soundex", "wordwrap"); | |
| 110 | + | foreach ($stringFunctions as $key => $function) { | |
| 111 | + | if (!function_exists($function)) unset($stringFunctions[$key]); | |
| 112 | + | } | |
| 113 | + | for ($i=0; $i < $count; $i++) { | |
| 114 | + | foreach ($stringFunctions as $function) { | |
| 115 | + | $r = call_user_func_array($function, array($stringTest)); | |
| 116 | + | } | |
| 117 | + | } | |
| 118 | + | return number_format(get_microtime() - $time_start, 3); | |
| 119 | + | } | |
| 120 | + | ||
| 121 | + | function test_Regex($count = 1300000) { | |
| 122 | + | global $stringTest, $regexPattern; | |
| 123 | + | $time_start = get_microtime(); | |
| 124 | + | $stringFunctions = array("preg_match", "preg_split"); | |
| 125 | + | foreach ($stringFunctions as $key => $function) { | |
| 126 | + | if (!function_exists($function)) unset($stringFunctions[$key]); | |
| 127 | + | } | |
| 128 | + | for ($i=0; $i < $count; $i++) { | |
| 129 | + | foreach ($stringFunctions as $function) { | |
| 130 | + | $r = call_user_func_array($function, array($regexPattern, $stringTest)); | |
| 131 | + | } | |
| 132 | + | } | |
| 133 | + | return number_format(get_microtime() - $time_start, 3); | |
| 134 | + | } | |
| 135 | + | ||
| 136 | + | function test_Hashing($count = 1300000) { | |
| 137 | + | global $stringTest; | |
| 138 | + | $time_start = get_microtime(); | |
| 139 | + | $stringFunctions = array("crc32", "md5", "sha1",); | |
| 140 | + | foreach ($stringFunctions as $key => $function) { | |
| 141 | + | if (!function_exists($function)) unset($stringFunctions[$key]); | |
| 142 | + | } | |
| 143 | + | for ($i=0; $i < $count; $i++) { | |
| 144 | + | foreach ($stringFunctions as $function) { | |
| 145 | + | $r = call_user_func_array($function, array($stringTest)); | |
| 146 | + | } | |
| 147 | + | } | |
| 148 | + | return number_format(get_microtime() - $time_start, 3); | |
| 149 | + | } | |
| 150 | + | ||
| 151 | + | function test_Json_Encode($count = 1300000) { | |
| 152 | + | global $stringTest; | |
| 153 | + | ||
| 154 | + | if (!function_exists('json_encode')) return '-.---'; | |
| 155 | + | ||
| 156 | + | $time_start = get_microtime(); | |
| 157 | + | $data = array( | |
| 158 | + | $stringTest, | |
| 159 | + | 123456, | |
| 160 | + | 123.456, | |
| 161 | + | array(123456), | |
| 162 | + | null, | |
| 163 | + | false, | |
| 164 | + | ); | |
| 165 | + | for ($i=0; $i < $count; $i++) { | |
| 166 | + | foreach ($data as $value) { | |
| 167 | + | $r = json_encode($value); | |
| 168 | + | } | |
| 169 | + | } | |
| 170 | + | return number_format(get_microtime() - $time_start, 3); | |
| 171 | + | } | |
| 172 | + | ||
| 173 | + | function test_Json_Decode($count = 1300000) { | |
| 174 | + | global $stringTest; | |
| 175 | + | ||
| 176 | + | if (!function_exists('json_decode')) return '-.---'; | |
| 177 | + | ||
| 178 | + | $time_start = get_microtime(); | |
| 179 | + | $data = array( | |
| 180 | + | $stringTest, | |
| 181 | + | 123456, | |
| 182 | + | 123.456, | |
| 183 | + | array(123456), | |
| 184 | + | null, | |
| 185 | + | false, | |
| 186 | + | ); | |
| 187 | + | foreach ($data as $key => $value) { | |
| 188 | + | $data[ $key ] = json_encode($value); | |
| 189 | + | } | |
| 190 | + | for ($i=0; $i < $count; $i++) { | |
| 191 | + | foreach ($data as $value) { | |
| 192 | + | $r = json_decode($value); | |
| 193 | + | } | |
| 194 | + | } | |
| 195 | + | return number_format(get_microtime() - $time_start, 3); | |
| 196 | + | } | |
| 197 | + | ||
| 198 | + | function test_Serialize($count = 1300000) { | |
| 199 | + | global $stringTest; | |
| 200 | + | ||
| 201 | + | if (!function_exists('serialize')) return '-.---'; | |
| 202 | + | ||
| 203 | + | $time_start = get_microtime(); | |
| 204 | + | $data = array( | |
| 205 | + | $stringTest, | |
| 206 | + | 123456, | |
| 207 | + | 123.456, | |
| 208 | + | array(123456), | |
| 209 | + | null, | |
| 210 | + | false, | |
| 211 | + | ); | |
| 212 | + | for ($i=0; $i < $count; $i++) { | |
| 213 | + | foreach ($data as $value) { | |
| 214 | + | $r = serialize($value); | |
| 215 | + | } | |
| 216 | + | } | |
| 217 | + | return number_format(get_microtime() - $time_start, 3); | |
| 218 | + | } | |
| 219 | + | ||
| 220 | + | function test_Unserialize($count = 1300000) { | |
| 221 | + | global $stringTest; | |
| 222 | + | ||
| 223 | + | if (!function_exists('unserialize')) return '-.---'; | |
| 224 | + | ||
| 225 | + | $time_start = get_microtime(); | |
| 226 | + | $data = array( | |
| 227 | + | $stringTest, | |
| 228 | + | 123456, | |
| 229 | + | 123.456, | |
| 230 | + | array(123456), | |
| 231 | + | null, | |
| 232 | + | false, | |
| 233 | + | ); | |
| 234 | + | foreach ($data as $key => $value) { | |
| 235 | + | $data[ $key ] = serialize($value); | |
| 236 | + | } | |
| 237 | + | for ($i=0; $i < $count; $i++) { | |
| 238 | + | foreach ($data as $value) { | |
| 239 | + | $r = unserialize($value); | |
| 240 | + | } | |
| 241 | + | } | |
| 242 | + | return number_format(get_microtime() - $time_start, 3); | |
| 243 | + | } | |
| 244 | + | ||
| 245 | + | function test_Array_Fill($count = 3000) { | |
| 246 | + | global $doTestArrays; | |
| 247 | + | if (!$doTestArrays) return '-.---'; | |
| 248 | + | ||
| 249 | + | $time_start = get_microtime(); | |
| 250 | + | for($i = 0; $i < $count; ++$i) { | |
| 251 | + | for($j = 0; $j < $count; ++$j) { | |
| 252 | + | $X[ $i ][ $j ] = $i * $j; | |
| 253 | + | } | |
| 254 | + | } | |
| 255 | + | return number_format(get_microtime() - $time_start, 3); | |
| 256 | + | } | |
| 257 | + | ||
| 258 | + | function test_Array_Unset($count = 3000) { | |
| 259 | + | global $doTestArrays; | |
| 260 | + | if (!$doTestArrays) return '-.---'; | |
| 261 | + | ||
| 262 | + | $time_start = get_microtime(); | |
| 263 | + | $X = range(0, $count); | |
| 264 | + | for($i = 0; $i < $count; ++$i) { | |
| 265 | + | $X[ $i ] = range(0, $count); | |
| 266 | + | } | |
| 267 | + | for($i = $count-1; $i >= 0; $i--) { | |
| 268 | + | for($j = 0; $j < $count; ++$j) { | |
| 269 | + | unset($X[ $i ][ $j ]); | |
| 270 | + | } | |
| 271 | + | unset($X[ $i ]); | |
| 272 | + | } | |
| 273 | + | return number_format(get_microtime() - $time_start, 3); | |
| 274 | + | } | |
| 275 | + | ||
| 276 | + | function test_Loops($count = 190000000) { | |
| 277 | + | $time_start = get_microtime(); | |
| 278 | + | for($i = 0; $i < $count; ++$i); | |
| 279 | + | $i = 0; while($i++ < $count); | |
| 280 | + | return number_format(get_microtime() - $time_start, 3); | |
| 281 | + | } | |
| 282 | + | ||
| 283 | + | function test_IfElse($count = 90000000) { | |
| 284 | + | $time_start = get_microtime(); | |
| 285 | + | for ($i=0; $i < $count; $i++) { | |
| 286 | + | if ($i == -1) { | |
| 287 | + | } elseif ($i == -2) { | |
| 288 | + | } else if ($i == -3) { | |
| 289 | + | } else { | |
| 290 | + | } | |
| 291 | + | } | |
| 292 | + | return number_format(get_microtime() - $time_start, 3); | |
| 293 | + | } | |
| 294 | + | ||
| 295 | + | function test_Ternary($count = 90000000) { | |
| 296 | + | $time_start = get_microtime(); | |
| 297 | + | for ($i=0; $i < $count; $i++) { | |
| 298 | + | $r = ($i % 2 == 1) | |
| 299 | + | ? ( ($i % 3 == 1) | |
| 300 | + | ? ( ($i % 5 == 1) | |
| 301 | + | ? 3 | |
| 302 | + | : 2 ) | |
| 303 | + | : 1 ) | |
| 304 | + | : 0; | |
| 305 | + | } | |
| 306 | + | return number_format(get_microtime() - $time_start, 3); | |
| 307 | + | } | |
| 308 | + | ||
| 309 | + | $total = 0; | |
| 310 | + | $functions = get_defined_functions(); | |
| 311 | + | echo "<pre>\n$line\n|" | |
| 312 | + | .str_pad("PHP BENCHMARK SCRIPT", $padHeader," ",STR_PAD_BOTH) | |
| 313 | + | ."|\n$line\n" | |
| 314 | + | .str_pad("Start:", $padInfo) . " : ". date("Y-m-d H:i:s") . "\n" | |
| 315 | + | .str_pad("Server:", $padInfo) . " : ".php_uname() . "\n" | |
| 316 | + | .str_pad("PHP version:", $padInfo) . " : " .PHP_VERSION . "\n" | |
| 317 | + | .str_pad("Benchmark version:", $padInfo) . " : ".$scriptVersion . "\n" | |
| 318 | + | .str_pad("Platform:", $padInfo) . " : " .PHP_OS . "\n" | |
| 319 | + | ."$line\n"; | |
| 320 | + | foreach ($functions['user'] as $user) { | |
| 321 | + | if (preg_match('/^test_/', $user)) { | |
| 322 | + | $result = $user(); | |
| 323 | + | $total += $result; | |
| 324 | + | echo str_pad($user, $padLabel) . " : " . $result ." sec.\n"; | |
| 325 | + | } | |
| 326 | + | } | |
| 327 | + | echo $line . "\n" | |
| 328 | + | . str_pad("Total time:", $padLabel) . " : " . $total ." sec.\n" | |
| 329 | + | . str_pad("Current memory usage:", $padLabel) . " : " . convert(memory_get_usage()) .".\n" | |
| 330 | + | . (function_exists('memory_get_peak_usage') ? str_pad("Peak memory usage:", $padLabel) . " : " . convert(memory_get_peak_usage()) .".\n" : '') | |
| 331 | + | . "</pre>\n"; | |
| 332 | + | ?> | |
上一頁
下一頁