项目作者: akondas

项目描述 :
PHP internals benchmarks.
高级语言: PHP
项目地址: git://github.com/akondas/php-benchmark.git
创建时间: 2018-02-14T22:50:13Z
项目社区:https://github.com/akondas/php-benchmark

开源协议:MIT License

下载


PHP internals benchmark

My personal php internals benchmarks. :rocket:
You do not believe? check on your own:

To run:

  1. composer install
  2. vendor/bin/phpbench run benchmarks/__BenchmarkName__ --report=time --retry-threshold=1

Table of Contents

Benchmark results

Check is array empty

How to fast check if array is empty. Remember that empty can lead to confusion results (automatic cast type).

  1. vendor/bin/phpbench run benchmarks/Array/EmptyArrayBench.php --report=time --retry-threshold=1
  2. +------------------+---------+---------+--------+-------+
  3. | subject | mode | mean | rstdev | diff |
  4. +------------------+---------+---------+--------+-------+
  5. | benchEmpty | 0.027μs | 0.027μs | 0.41% | 1.00x |
  6. | benchCount | 0.048μs | 0.048μs | 0.54% | 1.75x |
  7. | benchCountStrict | 0.051μs | 0.051μs | 0.26% | 1.87x |
  8. | benchComparision | 0.028μs | 0.028μs | 0.37% | 1.01x |
  9. +------------------+---------+---------+--------+-------+

json_decode vs unserialize

Faster way to decompress serialized arrays

  1. vendor/bin/phpbench run benchmarks/Array/JsonDecodeBench.php --report=time --retry-threshold=1
  2. suite: 1343ab2c7ea88c1f4e096d667ee3e7fc90c7fbc5, date: 2020-01-14, stime: 10:03:37
  3. +------------------+---------+---------+--------+-------+
  4. | subject | mode | mean | rstdev | diff |
  5. +------------------+---------+---------+--------+-------+
  6. | benchJsonDecode | 7.687μs | 7.697μs | 0.42% | 3.58x |
  7. | benchUnserialize | 2.155μs | 2.150μs | 0.33% | 1.00x |
  8. +------------------+---------+---------+--------+-------+

isset vs in_array

Find value in array (1000 elements).

  1. vendor/bin/phpbench run benchmarks/Array/IsSetVsInArray.php --report=time --retry-threshold=1
  2. +--------------+---------+---------+--------+--------+
  3. | subject | mode | mean | rstdev | diff |
  4. +--------------+---------+---------+--------+--------+
  5. | benchIsSet | 0.095μs | 0.095μs | 0.45% | 1.00x |
  6. | benchInArray | 3.289μs | 3.294μs | 0.32% | 34.51x |
  7. +--------------+---------+---------+--------+--------+

Exponential expression

pow function vs ** operator.

  1. vendor/bin/phpbench run benchmarks/Math/PowBench.php --report=time --retry-threshold=1
  2. +-----------------------------+---------+---------+--------+-------+
  3. | subject | mode | mean | rstdev | diff |
  4. +-----------------------------+---------+---------+--------+-------+
  5. | benchPowFunction | 0.090μs | 0.090μs | 0.40% | 3.60x |
  6. | benchExponentiationOperator | 0.025μs | 0.025μs | 0.42% | 1.00x |
  7. +-----------------------------+---------+---------+--------+-------+

Square root

sqrt function vs ** .5 operator

  1. vendor/bin/phpbench run benchmarks/Math/SqrtBench.php --report=time --retry-threshold=1
  2. +-----------------------------+---------+---------+--------+-------+
  3. | subject | mode | mean | rstdev | diff |
  4. +-----------------------------+---------+---------+--------+-------+
  5. | benchSqrtFunction | 0.038μs | 0.038μs | 0.56% | 1.53x |
  6. | benchExponentiationOperator | 0.025μs | 0.025μs | 0.53% | 1.00x |
  7. +-----------------------------+---------+---------+--------+-------+

in_array strict mode

Test strict mode in in_array function:

  1. vendor/bin/phpbench run benchmarks/Strict/InArrayBench.php --report=time --retry-threshold=1
  2. +-------------------------+---------+---------+--------+-------+
  3. | subject | mode | mean | rstdev | diff |
  4. +-------------------------+---------+---------+--------+-------+
  5. | benchInArray | 0.053μs | 0.053μs | 0.41% | 1.00x |
  6. | benchInArrayMixed | 0.094μs | 0.094μs | 0.51% | 1.78x |
  7. | benchInArrayStrict | 0.066μs | 0.066μs | 0.48% | 1.26x |
  8. | benchInArrayStrictMixed | 0.078μs | 0.078μs | 0.41% | 1.48x |
  9. +-------------------------+---------+---------+--------+-------+

match vs array map

Test if match is faster than using array key to match value:

  1. vendor/bin/phpbench run benchmarks/Syntax/MatchVsArrayMapBench.php --report=time --retry-threshold=1
  2. +---------------+---------+---------+--------+-------+
  3. | subject | mode | mean | rstdev | diff |
  4. +---------------+---------+---------+--------+-------+
  5. | benchMatch | 0.841μs | 0.838μs | 0.63% | 1.01x |
  6. | benchArrayMap | 0.829μs | 0.828μs | 0.35% | 1.00x |
  7. +---------------+---------+---------+--------+-------+

Short class name

Test if reflection short class name is faster than using get_class and string manipulation:

  1. vendor/bin/phpbench run benchmarks/Reflection/ShortClassNameBench.php --report=time --retry-threshold=2
  2. +-----------------+---------+---------+--------+
  3. | subject | mode | mean | rstdev |
  4. +-----------------+---------+---------+--------+
  5. | benchBasename | 0.184μs | 0.185μs | ±1.19% |
  6. | benchReflection | 0.145μs | 0.145μs | ±0.22% |
  7. +-----------------+---------+---------+--------+