Zuletzt aktiv 6 months ago

Änderung 446f6d3749bebf67826f632cdee3495c4426f05b

bench.php Originalformat
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
26set_time_limit(0);
27ini_set('memory_limit', '2048M');
28
29$line = str_pad("-",78,"-");
30$padHeader = 76;
31$padInfo = 20;
32$padLabel = 62;
33
34function 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
44function 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?>