Рубрики
Uncategorized

<код возврата>УСПЕХ возврата>OK Подробное объяснение примеров операций обработки сигналов в PHP Simdjson_php высокоскоростной синтаксический анализ JSON возврата>OK Подробное объяснение примеров операций обработки сигналов в PHP Simdjson_php высокоскоростной синтаксический анализ JSON

Автор оригинала: David Wong.

вводить

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

Введение в использование

  1. Целесообразно использовать simdjson_key_value (), когда вам нужно получить ключ в более крупной строке JSON, в отличие от json_decode (), который анализирует всю строку JSON в массивы и открывает ненужную память, что немного хуже по производительности, чем поиск по хэшу.
  2. При проверке того, является ли строка 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

Если есть какие-либо недостатки, просто оставьте сообщение ниже. Вы можете критиковать и исправлять их. Я приму их скромно.