вводить
Simd json _ php (https://github.com/crazyxman/…), который связывает simdjson для быстрого синтаксического анализа, является высокоскоростным синтаксическим анализатором JSON, использующим большинство одиночных инструкций SIMD. Введение в simd json: https://github.com/lemire/sim…
Зависимость от окружающей среды
- php7+
- Процессоры с AVX2 (т. е. процессоры Intel с микроархитектурой Haswell, выпущенные в 2013 году, и процессоры AMD с микроархитектурой Zen, выпущенные в 2017 году) поддерживаются большинством процессоров.
- Последние компиляторы C++ (например, GNU GCC или LLVM CLANG или Visual Studio 2017), давайте предположим, что C++ 17. GNU GCC 7 или выше или LLVM clang 6 или выше
Проверьте, поддерживает ли его операционная система/процессор:
- OS X: sysctl -a | grep machdep.cpu.leaf7_features
- Linux: grep avx2/proc/cpuinfo
Введение в использование
- Целесообразно использовать simdjson_key_value (), когда вам нужно получить ключ в более крупной строке JSON, в отличие от json_decode (), который анализирует всю строку JSON в массивы и открывает ненужную память, что немного хуже по производительности, чем поиск по хэшу.
- При проверке того, является ли строка json, некоторые json_ действительны() подходят и очень быстры, и их не нужно проверять с помощью json_decode().
// Check that the string is a valid json:
$isValid = simdjson_isvalid($jsonString); //return bool
// Parse a JSON string, return an array, object, null, similar to json_decode(), and the third parameter is the depth of parsing
$parsedJSON = simdjson_decode($jsonString, true, 512); //return array|object|null. "null" string is not a standard json
/*
{
"Image": {
"Width": 800,
"Height": 600,
"Title": "View from 15th Floor",
"Thumbnail": {
"Url": "http://www.example.com/image/481989943",
"Height": 125,
"Width": 100
},
"Animated" : false,
"IDs": [116, 943, 234, 38793, {"p": "30"}]
}
}
*/
// Note. "t" is a partitioner. It must be a control character. It is used to partition the subscript of an object's key or array.
// For example,'Image tThumbnail tUrl'is correct.'Image tThumbnail tUrl' is wrong.
// Get the value of the specified key from the JSON string
$value = simdjson_key_value($jsonString, "Image\tThumbnail\tUrl");
var_dump($value); // string(38) "http://www.example.com/image/481989943"
$value = simdjson_key_value($jsonString, "Image\tIDs\t4", true);
var_dump($value);
/*
array(1) {
["p"]=>
string(2) "30"
}
*/
// Get the resource parsed by json, parse it only once, and then use it no longer
$resource = simdjson_resource($jsonString);
// Get the value of the specified key from the JSON resource
$value = simdjson_key_value($resource, "Image\tThumbnail\tUrl");
var_dump($value); // string(38) "http://www.example.com/image/481989943"
$value = simdjson_key_value($resource, "Image\tIDs\t4", true);
var_dump($value);
/*
array(1) {
["p"]=>
string(2) "30"
}
*/
// Check whether the key exists, the parameter can be a JSON string or a JSON resource, returning true, false, null. Returning null when the first parameter is a string represents a parsing failure
$res = simdjson_key_exists($jsonString, "Image\tIDs\t1");
var_dump($res) //bool(true)
$res = simdjson_key_exists($resource, "Image\tIDs\t1");
var_dump($res) //bool(true)Тестирование производительности (секунды)
| Тестирование производительности (секунды) | 0.003073 | 0.002252 | 0.000181 |
| Тестирование производительности (секунды) | 0.139550 | 0.027739 | 0.003583 |
| Тестирование производительности (секунды) | 0.030309 | 0.013340 | 0.001170 |
| Тестирование производительности (секунды) | 0.002941 | 0.000904 | 0.000085 |
| Тестирование производительности (секунды) | 0.042925 | 0.011120 | 0.001867 |
| Тестирование производительности (секунды) | 0.005097 | 0.002318 | 0.000175 |
| Тестирование производительности (секунды) | 0.098336 | 0.044175 | 0.004634 |
| Тестирование производительности (секунды) | 0.018692 | 0.007226 | 0.001148 |
| Тестирование производительности (секунды) | 0.035762 | 0.007381 | 0.001634 |
| Тестирование производительности (секунды) | 0.002636 | 0.000699 | 0.000182 |
| Тестирование производительности (секунды) | 0.017135 | 0.009739 | 0.000630 |
| Тестирование производительности (секунды) | 0.012586 | 0.006184 | 0.000574 |
| Тестирование производительности (секунды) | 0.014359 | 0.006504 | 0.000743 |
| Тестирование производительности (секунды) | 0.015060 | 0.008691 | 0.000478 |
Вы можете запустить тесты, выполнив команды:
- php benchmark/benchmark.php
Если есть какие-либо недостатки, просто оставьте сообщение ниже. Вы можете критиковать и исправлять их. Я приму их скромно.