{"id":16233738,"url":"https://github.com/akondas/php-benchmark","last_synced_at":"2025-03-19T14:31:43.442Z","repository":{"id":86313352,"uuid":"121570489","full_name":"akondas/php-benchmark","owner":"akondas","description":"PHP internals benchmarks.","archived":false,"fork":false,"pushed_at":"2025-02-02T10:46:20.000Z","size":70,"stargazers_count":7,"open_issues_count":0,"forks_count":0,"subscribers_count":6,"default_branch":"master","last_synced_at":"2025-02-28T19:21:17.785Z","etag":null,"topics":["benchmark","php","php-internals","phpbench"],"latest_commit_sha":null,"homepage":"","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/akondas.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-02-14T22:50:13.000Z","updated_at":"2025-02-02T10:46:24.000Z","dependencies_parsed_at":"2024-10-27T20:39:56.893Z","dependency_job_id":"39db555f-149c-45c0-987a-98f55dd0bf2d","html_url":"https://github.com/akondas/php-benchmark","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/akondas%2Fphp-benchmark","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/akondas%2Fphp-benchmark/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/akondas%2Fphp-benchmark/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/akondas%2Fphp-benchmark/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/akondas","download_url":"https://codeload.github.com/akondas/php-benchmark/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243997127,"owners_count":20380981,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["benchmark","php","php-internals","phpbench"],"created_at":"2024-10-10T13:13:43.070Z","updated_at":"2025-03-19T14:31:43.433Z","avatar_url":"https://github.com/akondas.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"# PHP internals benchmark\n\nMy personal php internals benchmarks. :rocket:\nYou do not believe? check on your own:\n\nTo run:\n```\ncomposer install\nvendor/bin/phpbench run benchmarks/__BenchmarkName__ --report=time --retry-threshold=1 \n```\n\n## Table of Contents\n\n * Array\n    * [Check is array empty](#check-is-array-empty)\n    * [json_decode vs unserialize](#json_decode-unserialize)\n    * [`isset` vs `in_array`](#isset-vs-in_array)\n * Math\n    * [Exponential expression](#exponential-expression)\n    * [Square root](#square-root)\n * Reflection\n   * [Short class name](#short-class-name)\n * Strict checking\n    * [`in_array` strict mode](#in_array-strict-mode)\n\n\n## Benchmark results\n\n### Check is array empty\n\nHow to fast check if array is empty. Remember that `empty` can lead to confusion results (automatic cast type).\n\n```\nvendor/bin/phpbench run benchmarks/Array/EmptyArrayBench.php --report=time --retry-threshold=1\n\n+------------------+---------+---------+--------+-------+\n| subject          | mode    | mean    | rstdev | diff  |\n+------------------+---------+---------+--------+-------+\n| benchEmpty       | 0.027μs | 0.027μs | 0.41%  | 1.00x |\n| benchCount       | 0.048μs | 0.048μs | 0.54%  | 1.75x |\n| benchCountStrict | 0.051μs | 0.051μs | 0.26%  | 1.87x |\n| benchComparision | 0.028μs | 0.028μs | 0.37%  | 1.01x |\n+------------------+---------+---------+--------+-------+\n\n```\n\n### `json_decode` vs `unserialize`\n\nFaster way to decompress serialized arrays\n\n```\nvendor/bin/phpbench run benchmarks/Array/JsonDecodeBench.php --report=time --retry-threshold=1 \n\nsuite: 1343ab2c7ea88c1f4e096d667ee3e7fc90c7fbc5, date: 2020-01-14, stime: 10:03:37\n+------------------+---------+---------+--------+-------+\n| subject          | mode    | mean    | rstdev | diff  |\n+------------------+---------+---------+--------+-------+\n| benchJsonDecode  | 7.687μs | 7.697μs | 0.42%  | 3.58x |\n| benchUnserialize | 2.155μs | 2.150μs | 0.33%  | 1.00x |\n+------------------+---------+---------+--------+-------+\n```\n\n### `isset` vs `in_array`\n\nFind value in array (1000 elements).\n\n```\nvendor/bin/phpbench run benchmarks/Array/IsSetVsInArray.php --report=time --retry-threshold=1\n\n+--------------+---------+---------+--------+--------+\n| subject      | mode    | mean    | rstdev | diff   |\n+--------------+---------+---------+--------+--------+\n| benchIsSet   | 0.095μs | 0.095μs | 0.45%  | 1.00x  |\n| benchInArray | 3.289μs | 3.294μs | 0.32%  | 34.51x |\n+--------------+---------+---------+--------+--------+\n\n```\n\n### Exponential expression\n\n`pow` function vs `**` operator.\n\n```\nvendor/bin/phpbench run benchmarks/Math/PowBench.php  --report=time --retry-threshold=1\n\n+-----------------------------+---------+---------+--------+-------+\n| subject                     | mode    | mean    | rstdev | diff  |\n+-----------------------------+---------+---------+--------+-------+\n| benchPowFunction            | 0.090μs | 0.090μs | 0.40%  | 3.60x |\n| benchExponentiationOperator | 0.025μs | 0.025μs | 0.42%  | 1.00x |\n+-----------------------------+---------+---------+--------+-------+\n```\n\n### Square root\n\n`sqrt` function vs `** .5` operator\n\n```\nvendor/bin/phpbench run benchmarks/Math/SqrtBench.php  --report=time --retry-threshold=1 \n\n+-----------------------------+---------+---------+--------+-------+\n| subject                     | mode    | mean    | rstdev | diff  |\n+-----------------------------+---------+---------+--------+-------+\n| benchSqrtFunction           | 0.038μs | 0.038μs | 0.56%  | 1.53x |\n| benchExponentiationOperator | 0.025μs | 0.025μs | 0.53%  | 1.00x |\n+-----------------------------+---------+---------+--------+-------+\n```\n\n### `in_array` strict mode\n\nTest strict mode in `in_array` function:\n\n```\nvendor/bin/phpbench run benchmarks/Strict/InArrayBench.php --report=time --retry-threshold=1\n\n+-------------------------+---------+---------+--------+-------+\n| subject                 | mode    | mean    | rstdev | diff  |\n+-------------------------+---------+---------+--------+-------+\n| benchInArray            | 0.053μs | 0.053μs | 0.41%  | 1.00x |\n| benchInArrayMixed       | 0.094μs | 0.094μs | 0.51%  | 1.78x |\n| benchInArrayStrict      | 0.066μs | 0.066μs | 0.48%  | 1.26x |\n| benchInArrayStrictMixed | 0.078μs | 0.078μs | 0.41%  | 1.48x |\n+-------------------------+---------+---------+--------+-------+\n```\n\n### `match` vs array map\n\nTest if match is faster than using array key to match value:\n\n```\nvendor/bin/phpbench run benchmarks/Syntax/MatchVsArrayMapBench.php --report=time --retry-threshold=1\n\n+---------------+---------+---------+--------+-------+\n| subject       | mode    | mean    | rstdev | diff  |\n+---------------+---------+---------+--------+-------+\n| benchMatch    | 0.841μs | 0.838μs | 0.63%  | 1.01x |\n| benchArrayMap | 0.829μs | 0.828μs | 0.35%  | 1.00x |\n+---------------+---------+---------+--------+-------+\n```\n\n### Short class name\n\nTest if reflection short class name is faster than using `get_class` and string manipulation:\n\n```\nvendor/bin/phpbench run benchmarks/Reflection/ShortClassNameBench.php --report=time --retry-threshold=2 \n\n+-----------------+---------+---------+--------+\n| subject         | mode    | mean    | rstdev |\n+-----------------+---------+---------+--------+\n| benchBasename   | 0.184μs | 0.185μs | ±1.19% |\n| benchReflection | 0.145μs | 0.145μs | ±0.22% |\n+-----------------+---------+---------+--------+\n\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fakondas%2Fphp-benchmark","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fakondas%2Fphp-benchmark","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fakondas%2Fphp-benchmark/lists"}