1
0
mirror of https://github.com/halaxa/json-machine.git synced 2025-02-22 15:12:21 +01:00
json-machine/test/performance/testPerformance.php
2021-12-21 16:13:39 +01:00

65 lines
1.9 KiB
PHP

<?php
use JsonMachine\Items;
require_once __DIR__ . '/../../vendor/autoload.php';
if (in_array('xdebug', get_loaded_extensions())) {
trigger_error('Xdebug enabled. Results may be affected.', E_USER_WARNING);
}
ini_set('memory_limit', -1); // for json_decode use case
$decoders = [
'Items::fromFile()' => function ($file) {
return Items::fromFile($file);
},
'Items::fromString()' => function ($file) {
return Items::fromString(stream_get_contents(fopen($file, 'r')));
},
'Items::fromFile() - debug' => function ($file) {
return Items::fromFile($file, '', null, true);
},
'Items::fromString() - debug' => function ($file) {
return Items::fromString(stream_get_contents(fopen($file, 'r')), '', null, true);
},
'json_decode()' => function ($file) {
return json_decode(stream_get_contents(fopen($file, 'r')), true);
},
];
$tmpJsonFileName = createBigJsonFile();
$fileSizeMb = (filesize($tmpJsonFileName)/1024/1024);
echo "File size: " . round($fileSizeMb, 2)," MB".PHP_EOL;
foreach ($decoders as $name => $decoder) {
$start = microtime(true);
$result = $decoder($tmpJsonFileName);
if (! $result instanceof \Traversable && ! is_array($result)) {
$textResult = "Decoding error";
} else {
foreach ($result as $key => $item) {
}
$time = microtime(true) - $start;
$textResult = round($fileSizeMb/$time, 2) . ' MB/s';
}
echo str_pad($name.": ", 37, '.')." $textResult".PHP_EOL;
}
@unlink($tmpJsonFileName);
function createBigJsonFile()
{
$tmpJson = tempnam(sys_get_temp_dir(), 'json_');
$f = fopen($tmpJson, 'w');
$separator = '';
fputs($f, '[');
for ($i=0; $i<6000; $i++) {
fputs($f, $separator);
fputs($f, file_get_contents(__DIR__.'/twitter_example_'. ($i%2) .'.json'));
$separator = ",\n\n";
}
fputs($f, ']');
fclose($f);
return $tmpJson;
}