{"id":464325,"date":"2025-06-24T21:02:16","date_gmt":"2025-06-24T21:02:16","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=464325"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=464325","title":{"rendered":"<span>\u0422\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 c PHPBench: \u0447\u0442\u043e \u0438 \u043a\u0430\u043a?<\/span>"},"content":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p><a href=\"https:\/\/github.com\/phpbench\/phpbench\" rel=\"noopener noreferrer nofollow\">PHPBench<\/a> &#8212; \u044d\u0442\u043e, \u043a\u0430\u0436\u0435\u0442\u0441\u044f, \u043a\u0440\u0430\u0439\u043d\u0435 \u043d\u0435 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0439 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a \u0434\u043b\u044f \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043a\u043e\u0434\u0430 \u043d\u0430 PHP. \u041f\u043e \u043a\u0440\u0430\u0439\u043d\u0435\u0439 \u043c\u0435\u0440\u0435 \u0437\u0430 18 \u043b\u0435\u0442 \u043e\u043d \u043c\u043d\u0435 \u043d\u0438 \u0440\u0430\u0437\u0443 \u043d\u0438\u0433\u0434\u0435 \u043d\u0435 \u0432\u0441\u0442\u0440\u0435\u0442\u0438\u043b\u0441\u044f, \u0430 \u0443\u0441\u043b\u044b\u0448\u0430\u043b \u044f \u043e\u0431 \u043d\u0451\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0433\u043e\u0434 \u043d\u0430\u0437\u0430\u0434. \u0424\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a PHPUnit-\u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0439, \u0433\u0434\u0435 \u0431\u0435\u043d\u0447\u043c\u0430\u0440\u043a\u0438, \u043a\u0430\u043a \u0438 \u0442\u0435\u0441\u0442\u044b \u0432 PHPUnit \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u044f\u044e\u0442\u0441\u044f \u0432 \u043a\u043b\u0430\u0441\u0441\u044b, \u0433\u0440\u0443\u043f\u043f\u044b \u0438 \u0442.\u0434. \u0438 \u0442.\u043f. \u0427\u0442\u043e\u0431\u044b \u043c\u043d\u043e\u0433\u043e \u043d\u0435 \u0431\u043e\u043b\u0442\u0430\u0442\u044c, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043d\u0430\u043f\u0438\u0448\u0435\u043c \u0447\u0443\u0442\u044c \u043a\u043e\u0434\u0430 \u0438 \u043e\u0442\u0431\u0435\u043d\u0447\u043c\u0430\u0440\u043a\u0430\u0435\u043c \u0435\u0433\u043e.<\/p>\n<p>\u042f \u043f\u043e\u0448\u0430\u0433\u043e\u0432\u043e \u043e\u043f\u0438\u0448\u0443 \u0432\u0441\u0451, \u0447\u0442\u043e\u0431\u044b \u0432\u044b \u043c\u043e\u0433\u043b\u0438 \u0431\u044b\u0441\u0442\u0440\u043e \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u044c \u0432\u0441\u0451 \u044d\u0442\u043e \u0443 \u0441\u0435\u0431\u044f. \u0412\u043d\u0430\u0447\u0430\u043b\u0435 \u0441\u043e\u0437\u0434\u0430\u0451\u043c \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0431\u0443\u0434\u0435\u043c \u0445\u0438\u043c\u0438\u0447\u0438\u0442\u044c \u0438 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u0432 \u043d\u0435\u0451:<\/p>\n<pre><code class=\"bash\">mkdir phpbench &amp;&amp; cd phpbench<\/code><\/pre>\n<p>\u0417\u0430\u043a\u0438\u043d\u0435\u043c \u0432 \u043a\u043e\u0440\u0435\u043d\u044c \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0432\u043e\u0442 \u0442\u0430\u043a\u043e\u0439 <code>composer.json<\/code>:<\/p>\n<pre><code class=\"json\">{     \"name\": \"my\/app\",     \"require-dev\": {         \"phpbench\/phpbench\": \"*\"     },     \"autoload\": {         \"psr-4\": {             \"My\\\\App\\\\\": \"src\/\",             \"My\\\\App\\\\Tests\\\\\": \"tests\/\"         }     }, }<\/code><\/pre>\n<p>\u0417\u0430\u0442\u0435\u043c \u0432\u043e\u0442 \u0442\u0430\u043a\u043e\u0439 <code>phpbench.json<\/code>:<\/p>\n<pre><code class=\"json\">{     \"runner.bootstrap\": \"vendor\/autoload.php\",     \"runner.php_disable_ini\": true }<\/code><\/pre>\n<p>\u0412 \u043f\u0430\u043f\u043a\u0443 <code>src\/<\/code> \u0432\u043e\u0442 \u0442\u0430\u043a\u043e\u0439 \u0444\u0430\u0439\u043b <code>User.php<\/code>:<\/p>\n<pre><code class=\"php\">&lt;?php  namespace My\\App;  class User {      public static function getFullName(string $firstName, string $middleName, string $lastName) {          return \"$firstName $middleName $lastName\";     } }<\/code><\/pre>\n<p>\u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043f\u0430\u043f\u043a\u0443 <code>tests\/Benchmark<\/code>:<\/p>\n<pre><code class=\"bash\">mkdir tests\/Benchmark<\/code><\/pre>\n<p>\u0418 \u0432 \u043d\u0435\u0451 \u0437\u0430\u043a\u0438\u043d\u0435\u043c \u0432\u043e\u0442 \u0442\u0430\u043a\u043e\u0439 <code>UserBench.php<\/code>:<\/p>\n<pre><code class=\"php\">&lt;?php  namespace My\\App\\Tests;  use My\\App\\User;  class UserBench {      function benchGetFullName() {          User::getFullName('\u0418\u0432\u0430\u043d', '\u0418\u0432\u0430\u043d\u044b\u0447', '\u0418\u0432\u0430\u043d\u043e\u0432');     } }<\/code><\/pre>\n<p>\u041f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u0432\u043e\u0442 \u0442\u0430\u043a\u0430\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0430:<\/p>\n<pre><code class=\"bash\">$ ls -R composer.json  phpbench.json  src\/           tests\/  .\/src: User.php  .\/tests: Benchmark\/  .\/tests\/Benchmark: UserBench.php<\/code><\/pre>\n<p>\u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438:<\/p>\n<pre><code class=\"bash\">composer install<\/code><\/pre>\n<p>\u0418 \u043d\u0430\u043a\u043e\u043d\u0435\u0446-\u0442\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043d\u0430\u0448 \u0431\u0435\u043d\u0447\u043c\u0430\u0440\u043a \u0432\u043e\u0442 \u0442\u0430\u043a:<\/p>\n<pre><code class=\"bash\">.\/vendor\/bin\/phpbench run .\/tests\/Benchmark\/UserBench.php PHPBench (1.4.1) running benchmarks... #standwithukraine with configuration file: \/Users\/zeleniy\/Projects\/phpbench\/phpbench.json with PHP version 8.4.8, xdebug \u274c, opcache \u274c  \\My\\App\\Tests\\UserBench      benchGetFullName........................I0 - Mo114.000\u03bcs (\u00b10.00%)  Subjects: 1, Assertions: 0, Failures: 0, Errors: 0<\/code><\/pre>\n<p>\u0412\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0441\u0443\u0445\u043e\u0432\u0430\u0442\u043e, \u043d\u043e \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0440\u0430\u0437\u0431\u0435\u0440\u0451\u043c\u0441\u044f, \u0447\u0442\u043e \u0442\u0443\u0442 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043e, \u043f\u043e\u0442\u043e\u043c \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u0432\u044b\u0432\u043e\u0434 \u0431\u043e\u043b\u0435\u0435 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0432\u043d\u044b\u043c. \u0410 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043e \u0442\u0443\u0442, \u0447\u0442\u043e \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043b\u0441\u044f \u043e\u0434\u0438\u043d \u0431\u0435\u043d\u0447\u043c\u0430\u0440\u043a <code>benchGetFullName<\/code> \u0432 \u043a\u043b\u0430\u0441\u0441\u0435 <code>My\\App\\Tests\\UserBench<\/code> \u0438 \u0441\u0440\u0435\u0434\u043d\u0435\u0435 \u0432\u0440\u0435\u043c\u044f \u0435\u0433\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f &#8212; <code>114.000\u03bcs<\/code> \u0442.\u0435. 0.000114 \u0441\u0435\u043a\u0443\u043d\u0434\u044b. \u0412 \u0441\u043a\u043e\u0431\u043a\u0430\u0445 <code>(\u00b10.00%)<\/code> \u0443\u043a\u0430\u0437\u0430\u043d \u0440\u0430\u0437\u0431\u0440\u043e\u0441.<\/p>\n<p>\u0415\u0441\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043c\u0435\u043d\u044f\u0442\u044c \u0440\u0435\u043f\u043e\u0440\u0442\u044b, \u043f\u0438\u0441\u0430\u0442\u044c \u0438\u0445 \u0444\u0430\u0439\u043b\u044b \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u0438 \u0432 \u0432\u0438\u0434\u0435 JSON. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u043a\u0430 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0440\u0430\u0437\u043d\u043e\u043e\u0431\u0440\u0430\u0437\u0438\u0442\u044c \u044d\u0442\u043e\u0442 \u043e\u0442\u0447\u0451\u0442 \u043e\u043f\u0446\u0438\u0435\u0439 <code>--report<\/code> \u0441\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c <code>default<\/code>, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0434\u0435\u0444\u043e\u043b\u0442\u043d\u044b\u043c \u043d\u0435 \u044f\u0432\u043b\u044f\u0442\u0441\u044f (\u0440\u0430\u0437\u0432\u0435 \u043d\u0435 \u0448\u0438\u043a\u0430\u0440\u043d\u043e\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435? \ud83d\ude00):<\/p>\n<pre><code class=\"bash\">$ .\/vendor\/bin\/phpbench run .\/tests\/Benchmark\/UserBench.php --report=default PHPBench (1.4.1) running benchmarks... #standwithukraine with configuration file: \/Users\/zeleniy\/Projects\/phpbench\/phpbench.json with PHP version 8.4.8, xdebug \u274c, opcache \u274c  \\My\\App\\Tests\\UserBench      benchGetFullName........................I0 - Mo115.000\u03bcs (\u00b10.00%)  Subjects: 1, Assertions: 0, Failures: 0, Errors: 0 +------+-----------+------------------+-----+------+----------+-----------+--------------+----------------+ | iter | benchmark | subject          | set | revs | mem_peak | time_avg  | comp_z_value | comp_deviation | +------+-----------+------------------+-----+------+----------+-----------+--------------+----------------+ | 0    | UserBench | benchGetFullName |     | 1    | 716,520b | 115.000\u03bcs | +0.00\u03c3       | +0.00%         | +------+-----------+------------------+-----+------+----------+-----------+--------------+----------------+<\/code><\/pre>\n<p>\u0422\u0443\u0442 \u0443 \u043d\u0430\u0441 \u0443\u0436\u0435 \u0435\u0441\u0442\u044c \u0442\u0430\u0431\u043b\u0438\u0447\u043a\u0430. \u042f \u043d\u0435 \u0431\u0443\u0434\u0443 \u043f\u043e\u043a\u0430 \u043d\u0430 \u043d\u0435\u0439 \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c\u0441\u044f. \u0412\u0438\u0434\u043d\u043e, \u0447\u0442\u043e <code>Mo114.000\u03bcs<\/code> \u0438\u0437\u043c\u0435\u043d\u043b\u0438\u043b\u043e\u0441\u044c \u043d\u0430 <code>Mo115.000\u03bcs<\/code> \u0438 \u044d\u0442\u0430 \u0436\u0435 \u0446\u0438\u0444\u0440\u0430 \u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0443\u0435\u0442 \u0432 \u043a\u043e\u043b\u043e\u043d\u043a\u0435 <code>time_avg<\/code>. \u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 <code>Mo<\/code> \u043f\u0435\u0440\u0435\u0434 <code>115.000\u03bcs<\/code> \u0432\u044b\u044f\u0441\u043d\u0438\u0442\u044c \u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c. \u042d\u0442\u0438 \u0446\u0438\u0444\u0440\u044b \u0431\u0443\u0434\u0443\u0442 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u043c\u0435\u043d\u044f\u0442\u044c\u0441\u044f \u0442.\u043a. \u043d\u0430 \u0432\u0430\u0448\u0435\u043c \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0435 \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u044b \u0441\u043e\u0442\u043d\u0438 \u0438 \u0442\u044b\u0441\u044f\u0447\u0438 \u0444\u043e\u043d\u043e\u0432\u044b\u0445 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432 \u0438\u0437-\u0437\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0438 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u044f\u0442 \u044d\u0442\u0438 \u0444\u043b\u0443\u043a\u0442\u0443\u0430\u0446\u0438\u0438. \u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u044d\u0442\u043e\u0433\u043e \u0442\u0435\u0441\u0442\u0430 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043e\u043d \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e 1 \u0440\u0430\u0437 \u0438 \u043d\u0438\u043a\u0430\u043a\u043e\u0439 \u0434\u043e\u0441\u0442\u043e\u0432\u0435\u0440\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0438 \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u0441 \u044d\u0442\u043e\u0433\u043e \u043d\u0438\u043a\u0430\u043a \u043d\u0435\u043b\u044c\u0437\u044f. \u0418\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u044d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043e\u043f\u0446\u0438\u0438 <code>--revs<\/code>:<\/p>\n<pre><code class=\"bash\">.\/v$ .\/vendor\/bin\/phpbench run .\/tests\/Benchmark\/UserBench.php --report=default --revs=1000 PHPBench (1.4.1) running benchmarks... #standwithukraine with configuration file: \/Users\/zeleniy\/Projects\/phpbench\/phpbench.json with PHP version 8.4.8, xdebug \u274c, opcache \u274c  \\My\\App\\Tests\\UserBench      benchGetFullName........................I0 - Mo0.269\u03bcs (\u00b10.00%)  Subjects: 1, Assertions: 0, Failures: 0, Errors: 0 +------+-----------+------------------+-----+------+----------+----------+--------------+----------------+ | iter | benchmark | subject          | set | revs | mem_peak | time_avg | comp_z_value | comp_deviation | +------+-----------+------------------+-----+------+----------+----------+--------------+----------------+ | 0    | UserBench | benchGetFullName |     | 1000 | 716,520b | 0.269\u03bcs  | +0.00\u03c3       | +0.00%         | +------+-----------+------------------+-----+------+----------+----------+--------------+----------------+000<\/code><\/pre>\n<p><code>--revs=1000<\/code> \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u043a\u043e\u0434 \u043c\u0435\u0442\u043e\u0434\u0430 <code>User::getFullName<\/code> \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043f\u0443\u0449\u0435\u043d \u043d\u0435 1 \u0440\u0430\u0437, \u0430 1000.  \u0418\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e, \u0447\u0442\u043e \u0432\u0440\u0435\u043c\u044f \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u043b\u043e\u0441\u044c \u0434\u043e <code>0.269\u03bcs<\/code>. \u042f \u0432\u0430\u043c \u0447\u0435\u0441\u0442\u043d\u043e \u0441\u043a\u0430\u0436\u0443, \u0447\u0442\u043e \u0432 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0435 \u044f \u043f\u043e\u0447\u0442\u0438 \u0447\u0442\u043e \u043d\u0435 \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u044e\u0441\u044c. \u0418 \u043f\u043e\u0447\u0435\u043c\u0443-\u0442\u043e \u043f\u0440\u0438 \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u0438 <code>--revs=1000<\/code> \u0438 \u0431\u0435\u0437 \u043d\u0435\u0433\u043e \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0432\u044b\u043f\u043e\u043b\u0435\u043d\u0438\u044f \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u0432 2-3 \u0440\u0430\u0437\u0430, \u0445\u043e\u0442\u044f \u043a\u0430\u0437\u043b\u043e\u0441\u044c \u0431\u044b \u043e\u043d\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e\u0439. \u041d\u0430 \u044d\u0442\u043e\u043c \u0441\u0442\u0440\u0430\u043d\u043d\u043e\u0441\u0442\u0438 \u043d\u0435 \u043a\u043e\u043d\u0447\u0430\u044e\u0442\u0441\u044f. \u0415\u0441\u0442\u044c \u0435\u0449\u0451 \u043e\u0434\u043d\u0430 \u043e\u043f\u0446\u0438\u044f <code>--iterations<\/code>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0440\u0435\u0433\u043b\u0430\u043c\u0435\u043d\u0442\u0438\u0440\u0443\u0435\u0442 \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437 \u0442\u0435\u0441\u0442 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043f\u0443\u0449\u0435\u043d&#8230; \u044f \u0434\u0430\u0436\u0435 \u043d\u0435 \u0437\u043d\u0430\u044e \u043a\u0430\u043a \u044d\u0442\u043e \u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u044b\u043c \u044f\u0437\u044b\u043a\u043e\u043c. \u041a\u043e\u0440\u043e\u0447\u0435 \u0432 \u0438\u0442\u043e\u0433\u0435 \u0442\u0435\u0441\u0442 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043f\u0443\u0449\u0435\u043d <code>--revs \u0443\u043c\u043d\u043e\u0436\u0438\u0442\u044c \u043d\u0430 --iterations<\/code> \u0440\u0430\u0437. \u0412\u043e\u0442 \u0442\u0430\u043a \u044d\u0442\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043d\u0430 \u044d\u043a\u0440\u0430\u043d\u0435:<\/p>\n<pre><code class=\"bash\">$ .\/vendor\/bin\/phpbench run .\/tests\/Benchmark\/UserBench.php --report=default --revs=1000 --iterations=5 PHPBench (1.4.1) running benchmarks... #standwithukraine with configuration file: \/Users\/zeleniy\/Projects\/phpbench\/phpbench.json with PHP version 8.4.8, xdebug \u274c, opcache \u274c  \\My\\App\\Tests\\UserBench      benchGetFullName........................I4 - Mo0.270\u03bcs (\u00b17.62%)  Subjects: 1, Assertions: 0, Failures: 0, Errors: 0 +------+-----------+------------------+-----+------+----------+----------+--------------+----------------+ | iter | benchmark | subject          | set | revs | mem_peak | time_avg | comp_z_value | comp_deviation | +------+-----------+------------------+-----+------+----------+----------+--------------+----------------+ | 0    | UserBench | benchGetFullName |     | 1000 | 716,520b | 0.322\u03bcs  | +1.95\u03c3       | +14.84%        | | 1    | UserBench | benchGetFullName |     | 1000 | 716,520b | 0.261\u03bcs  | -0.91\u03c3       | -6.92%         | | 2    | UserBench | benchGetFullName |     | 1000 | 716,520b | 0.276\u03bcs  | -0.21\u03c3       | -1.57%         | | 3    | UserBench | benchGetFullName |     | 1000 | 716,520b | 0.272\u03bcs  | -0.39\u03c3       | -3.00%         | | 4    | UserBench | benchGetFullName |     | 1000 | 716,520b | 0.271\u03bcs  | -0.44\u03c3       | -3.35%         | +------+-----------+------------------+-----+------+----------+----------+--------------+----------------+<\/code><\/pre>\n<p>\u041d\u0430\u043a\u043e\u043d\u0435\u0446-\u0442\u043e \u0432 \u043a\u043e\u043b\u043e\u043d\u043a\u0430\u0445 <code>comp_z_value<\/code> \u0438 <code>comp_deviation<\/code> \u0447\u0442\u043e-\u0442\u043e \u043f\u043e\u044f\u0432\u0438\u043b\u043e\u0441\u044c. \u0418 \u0432 \u0441\u043a\u043e\u0431\u043a\u0430\u0445 \u0442\u043e\u0436\u0435 \u0447\u0442\u043e-\u0442\u043e \u043f\u043e\u044f\u0432\u0438\u043b\u043e\u0441\u044c: <code>Mo0.270\u03bcs (\u00b17.62%)<\/code>. \u041d\u0430\u0434\u043e \u0434\u0443\u043c\u0430\u0442\u044c \u044d\u0442\u043e \u0441\u0440\u0435\u0434\u043d\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e \u043a\u043e\u043b\u043e\u043d\u043a\u0435 <code>comp_deviation<\/code>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 <a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%9A%D0%BE%D1%8D%D1%84%D1%84%D0%B8%D1%86%D0%B8%D0%B5%D0%BD%D1%82_%D0%B2%D0%B0%D1%80%D0%B8%D0%B0%D1%86%D0%B8%D0%B8\" rel=\"noopener noreferrer nofollow\">\u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442 \u0432\u0430\u0440\u0438\u0430\u0446\u0438\u0438<\/a>, \u0430 <code>comp_z_value<\/code> &#8212; \u044d\u0442\u043e <a href=\"https:\/\/ru.wikipedia.org\/wiki\/Z-%D0%BE%D1%86%D0%B5%D0%BD%D0%BA%D0%B0\" rel=\"noopener noreferrer nofollow\">z-\u043e\u0446\u0435\u043d\u043a\u0430<\/a> \u0442.\u0435. \u0440\u0430\u0437\u0431\u0440\u043e\u0441 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043c\u0435\u0436\u0434\u0443 \u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0435\u0439 (<code>--iterations<\/code>) \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u0440\u0435\u0434\u043d\u0435\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f. \u042f \u0447\u0435\u0441\u0442\u043d\u043e \u043d\u0435 \u0432\u0438\u0436\u0443 \u0440\u0430\u0437\u043d\u0438\u0446\u044b \u043c\u0435\u0436\u0434\u0443 \u0442\u0435\u043c, \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0442\u0435\u0441\u0442 5000 \u0440\u0430\u0437 \u0438\u043b\u0438 5 \u0440\u0430\u0437 \u043f\u043e \u0442\u044b\u0441\u044f\u0447\u0435. \u041d\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u044d\u0442\u043e \u0438\u0437-\u0437\u0430 \u0441\u043a\u0443\u0434\u043e\u0443\u043c\u0438\u044f. \u0415\u0441\u043b\u0438 \u0432\u0434\u0440\u0443\u0433 \u0432\u044b \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u0442\u0435\u0441\u044c \u0432 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0435, \u0442\u043e \u043f\u043e\u044f\u0441\u043d\u0438\u0442\u0435 \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430 \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445 \u0447\u0442\u043e \u0432\u0441\u0451 \u044d\u0442\u043e \u0438 \u0437\u0430\u0447\u0435\u043c, \u0432 \u0446\u0435\u043b\u044f\u0445 \u043b\u0438\u043a\u0432\u0438\u0434\u0430\u0446\u0438\u0438 \u0431\u0435\u0437\u0433\u0440\u0430\u043c\u043e\u0442\u043d\u043e\u0441\u0442\u0438 \u0441\u0440\u0435\u0434\u0438 \u043d\u0430\u0441\u0435\u043b\u0435\u043d\u0438\u044f, \u0442\u0430\u043a \u0441\u043a\u0430\u0437\u0430\u0442\u044c \ud83d\ude00<\/p>\n<p>\u041f\u0440\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0438 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0439 \u043a\u043e\u0434\u0430, \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u0441\u0440\u0435\u0434\u043d\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 (<code>0.270\u03bcs<\/code>).  \u0410 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0438 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0443\u043b\u0443\u0447\u0448\u0438\u0442\u044c \u044d\u0442\u043e\u0442 \u043a\u043e\u0434. \u041d\u043e \u043f\u0435\u0440\u0435\u0434 \u044d\u0442\u0438\u043c \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u043c \u0442\u0435\u043a\u0443\u0449\u0438\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0441 \u043f\u043e\u043c\u0435\u0442\u043a\u043e\u0439 <code>interpolation<\/code>.  \u0415\u0441\u043b\u0438 \u0432\u044b \u0432\u0434\u0440\u0443\u0433 \u043f\u043e\u043c\u043d\u0438\u0442\u0435, \u0442\u043e \u043a\u043e\u0433\u0434\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0437\u0430\u043f\u0438\u0445\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0432 \u0441\u0442\u0440\u043e\u043a\u0443 \u0441 \u0434\u0432\u043e\u0439\u043d\u044b\u043c\u0438 \u043a\u0430\u0432\u044b\u0447\u043a\u0430\u043c\u0438, \u0442\u043e \u044d\u0442\u043e \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f <code>variable interpolation<\/code>. \u0422\u044d\u0433\u043d\u0443\u0442\u044c \u0432\u0435\u0440\u0441\u0438\u044e \u0431\u0435\u043d\u0447\u043c\u0430\u0440\u043a\u0430 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u043e\u043f\u0446\u0438\u0438 <code>--tag<\/code>:<\/p>\n<pre><code class=\"bash\">.\/vendor\/bin\/phpbench run .\/tests\/Benchmark\/UserBench.php --report=default --revs=1000 --iterations=5 --tag=interpolation<\/code><\/pre>\n<p>\u041a\u0441\u0442\u0430\u0442\u0438, PHPBench \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u0438 \u0438 \u043e\u043f\u0446\u0438\u0438 <code>--revs=1000<\/code> \u0438 <code>--iterations=5<\/code> \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043f\u0435\u0440\u0435\u0434 \u0442\u0435\u0441\u0442\u0438\u0440\u0443\u0435\u043c\u044b\u043c \u043c\u0435\u0442\u043e\u0434\u043e\u043c (\u0438\u043b\u0438 \u043a\u043b\u0430\u0441\u0441\u043e\u043c), \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u0431\u0443\u0434\u0443 \u0438\u0445 \u043e\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0434\u0430\u043b\u0435\u0435:<\/p>\n<pre><code class=\"php\">class UserBench {      \/**      * @Revs(1000)      * @Iterations(5)      *\/     function benchGetFullName() {          User::getFullName('\u0418\u0432\u0430\u043d', '\u0418\u0432\u0430\u043d\u044b\u0447', '\u0418\u0432\u0430\u043d\u043e\u0432');     } }<\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0437\u0430\u043c\u0435\u043d\u0438\u043c \u043d\u0430\u0448 \u0441\u043f\u043e\u0441\u043e\u0431 \u0441\u0431\u043e\u0440\u043a\u0438 \u043f\u043e\u043b\u043d\u043e\u0433\u043e \u0438\u043c\u0435\u043d\u0438 \u0441 <code>\"$firstName $middleName $lastName\"<\/code> \u043d\u0430 \u044f\u0432\u043d\u0443\u044e \u043a\u043e\u043d\u043a\u0442\u0435\u043d\u0430\u0446\u0438\u044e <code>$firstName . ' ' . $middleName . ' ' . $lastName<\/code> \u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043c \u0431\u0435\u043d\u0447\u043c\u0430\u0440\u043a \u0435\u0449\u0451 \u0440\u0430\u0437 \u0443\u043a\u0430\u0437\u0430\u0432 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u043e\u043f\u0446\u0438\u0438 <code>--ref<\/code> \u0440\u0435\u0444\u0435\u0440\u0435\u043d\u0441 \u0442.\u0435. \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0439 \u0437\u0430\u043f\u0443\u0441\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u0442\u044d\u0433\u043d\u0443\u043b\u0438 \u043a\u0430\u043a <code>--tag=interpolation<\/code>:<\/p>\n<pre><code class=\"bash\">$ .\/vendor\/bin\/phpbench run .\/tests\/Benchmark\/UserBench.php --report=default --ref=interpolation PHPBench (1.4.1) running benchmarks... #standwithukraine with configuration file: \/Users\/zeleniy\/Projects\/phpbench\/phpbench.json with PHP version 8.4.8, xdebug \u274c, opcache \u274c comparing [actual vs. interpolation]  \\My\\App\\Tests\\UserBench      benchGetFullName........................I4 - [Mo0.345\u03bcs vs. Mo0.279\u03bcs] +23.87% (\u00b15.20%)  Subjects: 1, Assertions: 0, Failures: 0, Errors: 0 +------+-----------+------------------+-----+------+-----------------+----------+--------------+----------------+ | iter | benchmark | subject          | set | revs | mem_peak        | time_avg | comp_z_value | comp_deviation | +------+-----------+------------------+-----+------+-----------------+----------+--------------+----------------+ | 0    | UserBench | benchGetFullName |     | 1000 | 716.520kb 0.00% | 0.344\u03bcs  | +0.41\u03c3       | +2.14%         | | 1    | UserBench | benchGetFullName |     | 1000 | 716.520kb 0.00% | 0.349\u03bcs  | +0.70\u03c3       | +3.62%         | | 2    | UserBench | benchGetFullName |     | 1000 | 716.520kb 0.00% | 0.302\u03bcs  | -1.99\u03c3       | -10.33%        | | 3    | UserBench | benchGetFullName |     | 1000 | 716.520kb 0.00% | 0.343\u03bcs  | +0.35\u03c3       | +1.84%         | | 4    | UserBench | benchGetFullName |     | 1000 | 716.520kb 0.00% | 0.346\u03bcs  | +0.53\u03c3       | +2.73%         | +------+-----------+------------------+-----+------+-----------------+----------+--------------+----------------+<\/code><\/pre>\n<p>\u0427\u0442\u043e \u043c\u044b \u0442\u0443\u0442 \u0432\u0438\u0434\u0438\u043c? \u0413\u043b\u0430\u0432\u043d\u043e\u0435 \u0442\u0443\u0442 \u0432\u043e\u0442 \u044d\u0442\u043e: <code>[Mo0.345\u03bcs vs. Mo0.279\u03bcs] +23.87%<\/code>. \u041d\u043e\u0432\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u043a\u043e\u0434\u0430 \u043d\u0430 23% \u043f\u0440\u043e\u0446\u0435\u043d\u0442\u0430 \u043c\u0435\u0434\u043b\u0435\u043d\u0435\u0435, \u0447\u0435\u043c \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0430\u044f. \u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 PHPBench \u0440\u0430\u0441\u0441\u043a\u0430\u0437 \u043f\u0440\u043e \u043e\u043f\u0446\u0438\u0438 <code>--tag<\/code> \u0438 <code>--ref<\/code> \u043f\u043e\u043c\u0435\u0449\u0430\u044e\u0442 \u0432 \u0440\u0430\u0437\u0434\u0435\u043b \u043f\u0440\u043e <a href=\"https:\/\/phpbench.readthedocs.io\/en\/latest\/guides\/regression-testing.html\" rel=\"noopener noreferrer nofollow\">\u0440\u0435\u0433\u0440\u0435\u0441\u0441\u0438\u043e\u043d\u043d\u043e\u0435 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435<\/a>. \u0422\u0435\u043e\u0440\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u0440\u0438\u043a\u0440\u0443\u0442\u0438\u0442\u044c \u044d\u0442\u043e \u0432 \u0432\u0430\u0448 <a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%9D%D0%B5%D0%BF%D1%80%D0%B5%D1%80%D1%8B%D0%B2%D0%BD%D0%B0%D1%8F_%D0%B8%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B0%D1%86%D0%B8%D1%8F\" rel=\"noopener noreferrer nofollow\">CI-\u043f\u0430\u0439\u043f\u043b\u0430\u0439\u043d<\/a> (<s>\u0438 \u0441\u043f\u0430\u0442\u044c \u0441\u043f\u043e\u043a\u043e\u0439\u043d\u043e<\/s>). \u0414\u0430, \u0438 \u0442\u0435\u043f\u0435\u0440\u044c \u0432\u044b \u0437\u043d\u0430\u0435\u0442\u0435 \u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u0441\u0440\u0430\u0442\u044c\u0441\u044f \u0441 \u043a\u043e\u043b\u043b\u0435\u0433\u0430\u043c\u0438 \u043d\u0430 \u0442\u0435\u043c\u0443, \u0447\u0442\u043e \u0431\u044b\u0441\u0442\u0440\u0435\u0435, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 <a href=\"https:\/\/www.php.net\/join\" rel=\"noopener noreferrer nofollow\">join<\/a> \u0438\u043b\u0438 <a href=\"https:\/\/www.php.net\/manual\/en\/function.implode.php\" rel=\"noopener noreferrer nofollow\">implode<\/a>.  \u041a\u0441\u0442\u0430\u0442\u0438, \u043f\u0440\u043e CI. PHPBench \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 <a href=\"https:\/\/phpbench.readthedocs.io\/en\/latest\/guides\/benchmark-runner.html#exit-codes\" rel=\"noopener noreferrer nofollow\">exit-\u043a\u043e\u0434\u044b<\/a>:<\/p>\n<ul>\n<li>\n<p><code>0<\/code>: Everything was fine.<\/p>\n<\/li>\n<li>\n<p><code>1<\/code>: Errors encountered in benchmarks.<\/p>\n<\/li>\n<li>\n<p><code>2<\/code>: Assertion failures.<\/p>\n<\/li>\n<li>\n<p><code>255<\/code>: Internal error<\/p>\n<\/li>\n<\/ul>\n<p>\u0425\u043e\u0447\u0443 \u0430\u043a\u0446\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0430\u0448\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u043a\u043e\u0434\u0435 2 <code>Assertion failures<\/code>. \u0414\u0430, \u0443 PHPBench \u0435\u0441\u0442\u044c <a href=\"https:\/\/phpbench.readthedocs.io\/en\/latest\/guides\/assertions.html\" rel=\"noopener noreferrer nofollow\">\u0430\u0441\u0441\u0435\u0440\u0442\u044b \u0442.\u0435. \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043d\u0430 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u044f \u043a\u0430\u043a\u0438\u043c-\u043b\u0438\u0431\u043e \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f\u043c<\/a> \u0438 \u0441\u043f\u0438\u0441\u043e\u043a \u0438\u0445 \u043d\u0435 \u0442\u0430\u043a \u0443\u0436 \u043c\u0430\u043b. \u0422\u0443\u0442 \u0441\u0443\u0442\u044c \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u0438 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e \u044f \u043d\u0435 \u0445\u043e\u0447\u0443, \u0447\u0442\u043e\u0431\u044b \u043c\u0435\u0442\u043e\u0434 X \u043f\u043e\u0442\u0440\u0435\u0431\u043b\u044f\u043b \u043f\u0430\u043c\u044f\u0442\u0438 \u0431\u043e\u043b\u044c\u0448\u0435, \u0447\u0435\u043c N \u0432\u043e\u0442 \u0442\u0430\u043a:<\/p>\n<pre><code class=\"php\">class UserBench {      \/**      * @Revs(1000)      * @Iterations(5)      * @Assert(\"mode(variant.time.avg) &lt; 200 microseconds +\/- 10%\")      * @Assert(\"mode(variant.mem.final) &lt; 10\")      *\/     function benchGetFullName() {          User::getFullName('\u0418\u0432\u0430\u043d', '\u0418\u0432\u0430\u043d\u044b\u0447', '\u0418\u0432\u0430\u043d\u043e\u0432');     } }<\/code><\/pre>\n<p>\u041a\u0441\u0442\u0430\u0442\u0438, \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u0443\u044e \u0438\u043d\u0444\u0443 \u043f\u043e \u043f\u0430\u043c\u044f\u0442\u0438 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f <code>memory<\/code> \u0434\u043b\u044f \u043e\u043f\u0446\u0438\u0438 <code>--report<\/code>:<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/518\/036\/226\/51803622629c2864e27e5a73b381080b.png\" width=\"1540\" height=\"754\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/518\/036\/226\/51803622629c2864e27e5a73b381080b.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/518\/036\/226\/51803622629c2864e27e5a73b381080b.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0412\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u043c\u044b \u0437\u0430\u043a\u0430\u0437\u044b\u0432\u0430\u043b\u0438 10 \u0431\u0430\u0439\u0442 \u043f\u0430\u043c\u044f\u0442\u0438, \u0430 \u0441\u043a\u0440\u0438\u043f\u0442 \u0441\u044a\u0435\u043b 500120. \u0418 exit-\u043a\u043e\u0434 \u0440\u0430\u0432\u0435\u043d 2. \u041c\u043e\u0436\u043d\u043e \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u044b\u0435 \u043e\u0442\u043a\u043b\u043e\u043d\u0435\u043d\u0438\u044f:  <code>@Assert(\"mode(variant.time.avg) &lt; 200 microseconds +\/- 10%\")<\/code>. \u041e\u0434\u043d\u0430\u043a\u043e \u0438\u0441\u0442\u043e\u0440\u0438\u044f \u043f\u0440\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043a\u0430\u0436\u0435\u0442\u0441\u044f \u043d\u0435 \u0436\u0438\u043b\u043e\u0439 \u0442.\u043a. \u043d\u0430 \u0440\u0430\u0437\u043d\u044b\u0445 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0430\u0445 \u0431\u0443\u0434\u0443\u0442 \u0440\u0430\u0437\u043d\u044b\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0438.<\/p>\n<p>\u0425\u043e\u0447\u0443 \u0435\u0449\u0451 \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u0430\u0448\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u043a\u0440\u0430\u0441\u043d\u044b\u0435 \u043a\u0440\u0435\u0441\u0442\u0438\u043a\u0438 \u043d\u0430\u043f\u0440\u043e\u0442\u0438\u0432 <code>xdebug<\/code> \u0438 <code>opcache<\/code>. \u041e\u043d\u0438 \u0445\u043e\u0442\u044c \u0438 \u043a\u0440\u0430\u0441\u043d\u044b\u0435, \u043d\u043e \u0432 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u0435 \u043a PHPBench \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u0441\u044f, \u0447\u0442\u043e <code>xdebug<\/code> \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u0438 \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c, \u0447\u0442\u043e \u044f \u0438 \u0441\u0434\u0435\u043b\u0430\u043b \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u0432 \u0432 <code>phpbench.json<\/code> <code>\"runner.php_disable_ini\": true<\/code>. \u0412 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435, \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0440\u0430\u0437\u043d\u0438\u0446\u044b \u043d\u0435\u0442, \u0432\u043a\u043b\u044e\u0447\u0451\u043d <code>xdebug<\/code> \u0438\u043b\u0438 \u043d\u0435\u0442, \u0433\u043b\u0430\u0432\u043d\u043e\u0435 \u0447\u0442\u043e\u0431\u044b \u0432 \u043a\u043e\u043d\u0444\u0438\u0433\u0435 \u0431\u044b\u043b\u043e \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u043d\u043e \u0447\u0442\u043e-\u0442\u043e \u043e\u0434\u043d\u043e, \u0438\u043d\u0430\u0447\u0435 \u0442\u0435\u0441\u0442\u044b \u0431\u0443\u0434\u0443\u0442 \u0432\u044b\u0434\u0430\u0432\u0430\u0442\u044c \u043d\u0435\u0441\u043e\u043f\u043e\u0441\u0442\u043e\u0432\u0438\u043c\u044b\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0438. \u041d\u043e \u0432\u0441\u0451 \u0436\u0435, \u0441\u043a\u0430\u0436\u0443, \u0447\u0442\u043e \u0441 \u0432\u043a\u043b\u044e\u0447\u0451\u043d\u043d\u044b\u043c XDebug \u043a\u043e\u0434 <code>$firstName . ' ' . $middleName . ' ' . $lastName;<\/code> \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0437\u0430 <code>0.979\u03bcs<\/code>, \u0430 \u0441 \u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u043c \u0437\u0430 <code>0.328\u03bcs<\/code>. \u0421\u043c\u044b\u0441\u043b\u0430 \u043f\u0440\u043e\u0441\u0442\u043e \u0442\u0430\u043a \u043a\u043e\u043f\u0442\u0438\u0442\u044c \u0437\u0435\u043c\u043b\u044e \u043d\u0435 \u0432\u0438\u0436\u0443.<\/p>\n<p>\u041e\u0431\u0441\u0443\u0436\u0434\u0430\u044f \u0432\u043a\u043b\u044e\u0447\u0451\u043d \u0438\u043b\u0438 \u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d XDebug \u043c\u044b \u043f\u043b\u0430\u0432\u043d\u043e \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u043a \u0432\u043e\u043f\u0440\u043e\u0441\u0443 \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438. \u041f\u043e\u043d\u044f\u0442\u043d\u043e, \u0447\u0442\u043e \u0432\u0441\u0435 \u044d\u0442\u0438 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0438 \u0438\u043c\u0435\u044e\u0442 \u0441\u043c\u044b\u0441\u043b \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435 \u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0430, \u0431\u0443\u0434\u044c \u0442\u043e \u0434\u043e\u043c\u0430\u0448\u043d\u0438\u0439\/\u0440\u0430\u0431\u043e\u0447\u0438\u0439 \u043a\u043e\u043c\u043f \u0438\u043b\u0438 CI-\u0441\u0435\u0440\u0432\u0435\u0440. \u0414\u0430\u0436\u0435 \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u044f \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u043b \u0432\u044b\u0448\u0435 \u0435\u0441\u0442\u044c \u0432\u044b\u0431\u0440\u043e\u0441\u044b \u0432 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u0445 \u043e\u0434\u043d\u043e\u0433\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430: 0.344\u03bcs, 0.349\u03bcs, 0.302\u03bcs, 0.343\u03bcs, 0.346\u03bcs. \u041e\u0447\u0435\u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e 0.302 \u0432\u044b\u043f\u0430\u0434\u0430\u0435\u0442 \u0438\u0437 \u044d\u0442\u043e\u0433\u043e \u0440\u044f\u0434\u0430 \u0447\u0438\u0441\u0435\u043b. \u041f\u043e\u043b\u0430\u0433\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u0442\u0430\u043a\u0438\u0435 \u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0438\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0438 \u043d\u0435 \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0431\u044b. \u0418 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u043f\u0440\u0435\u0434\u0443\u0441\u043c\u043e\u0442\u0440\u0435\u043b\u0438 \u0444\u043b\u0430\u0433 <code>--retry-threshold<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0435\u0442 \u0432\u044b\u0431\u0440\u043e\u0441\u044b \u0438 \u043d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0438\u0445 \u0432 \u0444\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u043e\u0442\u0447\u0451\u0442:<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/702\/627\/696\/702627696d0e854b8604fa98cfeea083.png\" width=\"1773\" height=\"985\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/702\/627\/696\/702627696d0e854b8604fa98cfeea083.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/702\/627\/696\/702627696d0e854b8604fa98cfeea083.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0412\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0438 \u0432 \u043a\u043e\u043b\u043e\u043d\u043a\u0435 <code>comp_deviation<\/code> \u0442\u0435\u043f\u0435\u0440\u044c \u043d\u0435 \u0432\u044b\u0445\u043e\u0434\u044f\u0442 \u0437\u0430 \u0433\u0440\u0430\u043d\u0438\u0446\u044b 3, \u0430 \u0441\u0440\u0435\u0434\u043d\u0435\u0435 \u0432\u0440\u0435\u043c\u044f \u0432 \u043e\u0431\u043e\u0438\u0445 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0445 \u0443\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b 0.321 \u00b1 1.18% \u0438 0.311 \u00b1 1.91% \u0442. \u0435. \u0442\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u043e\u0432 \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u0438\u043c\u044b, \u0433\u0434\u0435 \u0431\u044b \u043e\u043d\u0438 \u043d\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043b\u0438\u0441\u044c. \u0427\u0435\u043c \u043c\u0435\u043d\u044c\u0448\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442\u0435 \u0432 <code>--retry-threshold<\/code>, \u0442\u0435\u043c \u0434\u043e\u043b\u044c\u0448\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0442\u0435\u0441\u0442 \u0442.\u043a. \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u043e\u0442\u0431\u0440\u043e\u0441\u0438\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0440\u043e\u0431. \u041d\u043e \u0442\u0435\u043c \u0442\u043e\u0447\u043d\u0435\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b.<\/p>\n<p>\u0412\u044b\u0448\u0435 \u044f \u043f\u0438\u0441\u0430\u043b, \u0447\u0442\u043e \u0434\u043b\u044f \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u043f\u0446\u0438\u0438 <code>--tag<\/code> \u0438 <code>--ref<\/code>. \u041e\u0434\u043d\u0430\u043a\u043e \u0434\u043b\u044f \u043a\u0430\u043a\u0438\u0445-\u0442\u043e \u043c\u0438\u043a\u0440\u043e\u0431\u0435\u043d\u0447\u043c\u0430\u0440\u043a\u043e\u0432, \u0435\u0441\u043b\u0438 \u0432\u0434\u0440\u0443\u0433 \u044d\u0442\u043e \u043d\u0430\u0434\u043e (\u0432\u043e\u0442 \u0442\u0443\u0442 \u0434\u0430\u0436\u0435 <a href=\"https:\/\/habr.com\/ru\/articles\/53249\/\" rel=\"noopener noreferrer nofollow\">\u043c\u0438\u043b\u043b\u0438\u043e\u043d+ \u0441\u043e\u0432\u0435\u0442\u043e\u0432<\/a> \u0438 \u043c\u044b \u0438\u043c\u0438 \u0449\u0430 \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f), \u043f\u0440\u043e\u0449\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u0434\u0438\u043d \u043a\u043b\u0430\u0441\u0441 \u0441 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c\u0438 \u043c\u0435\u0442\u043e\u0434\u0430\u043c\u0438, \u0447\u0435\u043c \u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0432\u0435\u0440\u0441\u0438\u0438.<\/p>\n<p>\u041d\u0443 \u0447\u0442\u043e, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0437\u0430\u0442\u0435\u0441\u0442\u0438\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u044b \u043a\u043e\u043d\u043a\u0430\u0442\u0435\u043d\u0430\u0446\u0438\u0438 \u0441\u0442\u0440\u043e\u043a\u0438, \u0447\u0442\u043e \u043b\u0438? \u0412\u043e\u0442 \u043a\u043b\u0430\u0441\u0441 \u0441 \u0433\u0438\u043f\u043e\u0442\u0435\u0437\u0430\u043c\u0438, \u0441\u043a\u0430\u0436\u0435\u043c \u0442\u0430\u043a:<\/p>\n<pre><code class=\"php\">&lt;?php  namespace My\\App;  class User {      public static function getFullNameInterpolate(string $firstName, string $middleName, string $lastName) {          return \"$firstName $middleName $lastName\";     }      public static function getFullNameConcatenate(string $firstName, string $middleName, string $lastName) {          return $firstName . ' ' . $middleName . ' ' . $lastName;     }      public static function getFullNameSprintfSingleQuote(string $firstName, string $middleName, string $lastName) {          return sprintf('%s %s %s', $firstName, $middleName, $lastName);     }      public static function getFullNameSprintfDoubleQuote(string $firstName, string $middleName, string $lastName) {          return sprintf('%s %s %s', $firstName, $middleName, $lastName);     } } <\/code><\/pre>\n<p>\u0412\u043e\u0442 \u043a\u043b\u0430\u0441\u0441 \u0441 \u0431\u0435\u043d\u0447\u043c\u0430\u0440\u043a\u0430\u043c\u0438:<\/p>\n<pre><code class=\"php\">&lt;?php  namespace My\\App\\Tests;  use My\\App\\User;  \/**  * @Revs(1000)  * @Iterations(5)  *\/ class UserBench {      function benchFullNameInterpolate() {          User::getFullNameInterpolate('\u0418\u0432\u0430\u043d', '\u0418\u0432\u0430\u043d\u044b\u0447', '\u0418\u0432\u0430\u043d\u043e\u0432');     }      function benchGetFullNameConcatenate() {          User::getFullNameConcatenate('\u0418\u0432\u0430\u043d', '\u0418\u0432\u0430\u043d\u044b\u0447', '\u0418\u0432\u0430\u043d\u043e\u0432');     }      function benchGetFullNameSprintfSingleQuote() {          User::getFullNameSprintfSingleQuote('\u0418\u0432\u0430\u043d', '\u0418\u0432\u0430\u043d\u044b\u0447', '\u0418\u0432\u0430\u043d\u043e\u0432');     }      function benchFetFullNameSprintfDoubleQuote() {          User::getFullNameSprintfDoubleQuote('\u0418\u0432\u0430\u043d', '\u0418\u0432\u0430\u043d\u044b\u0447', '\u0418\u0432\u0430\u043d\u043e\u0432');     } } <\/code><\/pre>\n<p>\u0410 \u0432\u043e\u0442 \u043f\u0440\u0430\u0432\u0434\u0430-\u043c\u0430\u0442\u043a\u0430 (\u043d\u0430 \u043c\u043e\u0451\u043c \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0435):<\/p>\n<pre><code>$ .\/vendor\/bin\/phpbench run .\/tests\/Benchmark\/UserBench.php --report=aggregate --retry-threshold=3 PHPBench (1.4.1) running benchmarks... #standwithukraine with configuration file: \/Users\/zeleniy\/Projects\/phpbench\/phpbench.json with PHP version 8.4.8, xdebug \u274c, opcache \u274c  \\My\\App\\Tests\\UserBench      benchGetFullNameInterpolate.............R2 I3 - Mo0.299\u03bcs (\u00b10.84%)     benchGetFullNameConcatenate.............R2 I1 - Mo0.371\u03bcs (\u00b11.83%)     benchGetFullNameSprintfSingleQuote......R1 I0 - Mo0.399\u03bcs (\u00b11.29%)     benchGetFullNameSprintfDoubleQuote......R1 I3 - Mo0.398\u03bcs (\u00b11.44%)  Subjects: 4, Assertions: 0, Failures: 0, Errors: 0 +-----------+------------------------------------+-----+------+-----+-----------+---------+--------+ | benchmark | subject                            | set | revs | its | mem_peak  | mode    | rstdev | +-----------+------------------------------------+-----+------+-----+-----------+---------+--------+ | UserBench | benchGetFullNameInterpolate        |     | 1000 | 5   | 717.048kb | 0.299\u03bcs | \u00b10.84% | | UserBench | benchGetFullNameConcatenate        |     | 1000 | 5   | 717.048kb | 0.371\u03bcs | \u00b11.83% | | UserBench | benchGetFullNameSprintfSingleQuote |     | 1000 | 5   | 717.064kb | 0.399\u03bcs | \u00b11.29% | | UserBench | benchGetFullNameSprintfDoubleQuote |     | 1000 | 5   | 717.064kb | 0.398\u03bcs | \u00b11.44% | +-----------+------------------------------------+-----+------+-----+-----------+---------+--------+<\/code><\/pre>\n<p>\u041f\u043e\u0431\u0435\u0434\u0438\u043b\u0430 \u0436\u0432\u0430\u0447\u043a\u0430. \u041a\u0441\u0442\u0430\u0442\u0438, \u043e\u043f\u0446\u0438\u044f <code>--report<\/code> \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 <a href=\"https:\/\/phpbench.readthedocs.io\/en\/latest\/guides\/reports.html#default-reports\" rel=\"noopener noreferrer nofollow\">\u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439<\/a>, \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d <code>aggregate<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u043d\u044f\u0442\u043d\u043e \u0447\u0442\u043e.<\/p>\n<p>\u0422\u0430\u043a \u0436\u0435 \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c, \u0447\u0442\u043e \u043d\u0435 \u0441\u0442\u043e\u0438\u0442 \u043f\u0440\u0438\u043d\u0435\u0431\u0440\u0435\u0433\u0430\u0442\u044c \u043a\u0430\u043a \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u043f\u0435\u0440\u0432\u044b\u043c\u0438 \u0447\u0435\u0442\u044b\u0440\u044c\u043c\u044f \u0441\u043e\u0432\u0435\u0442\u0430\u043c\u0438 \u0438\u0437 \u0443\u0436\u0435 \u0440\u0430\u043d\u0435\u0435 \u0443\u043f\u043e\u043c\u044f\u043d\u0443\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/53249\/\" rel=\"noopener noreferrer nofollow\">\u0421\u0435\u0440\u0438\u044f 50+ \u0441\u043e\u0432\u0435\u0442\u043e\u0432 \u043f\u043e \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 PHP \u043a\u043e\u0434\u0430. \u00ab\u0417\u0430\u00bb \u0438 \u00ab\u043f\u0440\u043e\u0442\u0438\u0432\u00bb \u0442\u0430\u043a\u043e\u0439 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438. \u041f\u0435\u0440\u0432\u044b\u0435 10 \u0441\u043e\u0432\u0435\u0442\u043e\u0432<\/a>.<\/p>\n<p>PHPBench &#8212; \u044d\u0442\u043e \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0434\u043b\u044f \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u0439. \u0414\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u0436\u0435 \u0443\u0437\u043a\u0438\u0445 \u043c\u0435\u0441\u0442 \u0432 \u043a\u043e\u0434\u0435 \u0432\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u043f\u0440\u043e\u0444\u0438\u043b\u0438\u0440\u043e\u0432\u0449\u0438\u043a, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0442\u043e\u0442 \u0436\u0435 <a href=\"https:\/\/xdebug.org\/\" rel=\"noopener noreferrer nofollow\">XDebug<\/a>. \u0423\u0434\u0430\u0447\u0438.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><\/p>\n<div class=\"tm-article-poll-container\"><!--[--><\/p>\n<div class=\"tm-article-poll tm-article-poll_variant-bordered\">\n<div class=\"tm-notice tm-notice_positive tm-article-poll__notice\"><!----><\/p>\n<div class=\"tm-notice__inner\"><!----><\/p>\n<div class=\"tm-notice__content\" data-test-id=\"notice-content\"><!--[--><span>\u0422\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u043c\u043e\u0433\u0443\u0442 \u0443\u0447\u0430\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0432 \u043e\u043f\u0440\u043e\u0441\u0435. <a rel=\"nofollow\" href=\"\/kek\/v1\/auth\/habrahabr\/?back=\/ru\/articles\/920638\/&#038;hl=ru\">\u0412\u043e\u0439\u0434\u0438\u0442\u0435<\/a>, \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430.<\/span><!--]--><\/div>\n<\/div>\n<\/div>\n<p><!--[--><\/p>\n<div class=\"tm-article-poll__header\">\u041a\u0430\u043a\u0438\u0435 \u0443 \u0432\u0430\u0441 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044f \u0441 PHPBench?<\/div>\n<div class=\"tm-article-poll__answers\"><!--[--><\/p>\n<div class=\"tm-article-poll__answer\">\n<div class=\"tm-article-poll__answer-data\"><span class=\"tm-article-poll__answer-percent tm-article-poll__answer-percent_winning\">77.78% <\/span><span class=\"tm-article-poll__answer-label\">\u041d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0441\u043b\u044b\u0448\u0430\u043b<\/span><span class=\"tm-article-poll__answer-votes\">7<\/span><\/div>\n<div class=\"tm-article-poll__answer-bar\">\n<div class=\"tm-article-poll__answer-progress tm-article-poll__answer-progress_winning\" style=\"width: 77.78%\"><\/div>\n<\/div>\n<\/div>\n<div class=\"tm-article-poll__answer\">\n<div class=\"tm-article-poll__answer-data\"><span class=\"tm-article-poll__answer-percent\">11.11% <\/span><span class=\"tm-article-poll__answer-label\">\u0421\u043b\u044b\u0448\u0430\u043b, \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e<\/span><span class=\"tm-article-poll__answer-votes\">1<\/span><\/div>\n<div class=\"tm-article-poll__answer-bar\">\n<div class=\"tm-article-poll__answer-progress\" style=\"width: 11.11%\"><\/div>\n<\/div>\n<\/div>\n<div class=\"tm-article-poll__answer\">\n<div class=\"tm-article-poll__answer-data\"><span class=\"tm-article-poll__answer-percent\">11.11% <\/span><span class=\"tm-article-poll__answer-label\">\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e<\/span><span class=\"tm-article-poll__answer-votes\">1<\/span><\/div>\n<div class=\"tm-article-poll__answer-bar\">\n<div class=\"tm-article-poll__answer-progress\" style=\"width: 11.11%\"><\/div>\n<\/div>\n<\/div>\n<p><!--]--><\/div>\n<div class=\"tm-article-poll__stats\"> \u041f\u0440\u043e\u0433\u043e\u043b\u043e\u0441\u043e\u0432\u0430\u043b\u0438 9 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439.   \u0412\u043e\u0437\u0434\u0435\u0440\u0436\u0430\u043b\u0441\u044f 1 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c. <\/div>\n<p><!--]--><\/div>\n<p><!--]--><\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/920638\/\"> https:\/\/habr.com\/ru\/articles\/920638\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p><a href=\"https:\/\/github.com\/phpbench\/phpbench\" rel=\"noopener noreferrer nofollow\">PHPBench<\/a> &#8212; \u044d\u0442\u043e, \u043a\u0430\u0436\u0435\u0442\u0441\u044f, \u043a\u0440\u0430\u0439\u043d\u0435 \u043d\u0435 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0439 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a \u0434\u043b\u044f \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043a\u043e\u0434\u0430 \u043d\u0430 PHP. \u041f\u043e \u043a\u0440\u0430\u0439\u043d\u0435\u0439 \u043c\u0435\u0440\u0435 \u0437\u0430 18 \u043b\u0435\u0442 \u043e\u043d \u043c\u043d\u0435 \u043d\u0438 \u0440\u0430\u0437\u0443 \u043d\u0438\u0433\u0434\u0435 \u043d\u0435 \u0432\u0441\u0442\u0440\u0435\u0442\u0438\u043b\u0441\u044f, \u0430 \u0443\u0441\u043b\u044b\u0448\u0430\u043b \u044f \u043e\u0431 \u043d\u0451\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0433\u043e\u0434 \u043d\u0430\u0437\u0430\u0434. \u0424\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a PHPUnit-\u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0439, \u0433\u0434\u0435 \u0431\u0435\u043d\u0447\u043c\u0430\u0440\u043a\u0438, \u043a\u0430\u043a \u0438 \u0442\u0435\u0441\u0442\u044b \u0432 PHPUnit \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u044f\u044e\u0442\u0441\u044f \u0432 \u043a\u043b\u0430\u0441\u0441\u044b, \u0433\u0440\u0443\u043f\u043f\u044b \u0438 \u0442.\u0434. \u0438 \u0442.\u043f. \u0427\u0442\u043e\u0431\u044b \u043c\u043d\u043e\u0433\u043e \u043d\u0435 \u0431\u043e\u043b\u0442\u0430\u0442\u044c, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043d\u0430\u043f\u0438\u0448\u0435\u043c \u0447\u0443\u0442\u044c \u043a\u043e\u0434\u0430 \u0438 \u043e\u0442\u0431\u0435\u043d\u0447\u043c\u0430\u0440\u043a\u0430\u0435\u043c \u0435\u0433\u043e.<\/p>\n<p>\u042f \u043f\u043e\u0448\u0430\u0433\u043e\u0432\u043e \u043e\u043f\u0438\u0448\u0443 \u0432\u0441\u0451, \u0447\u0442\u043e\u0431\u044b \u0432\u044b \u043c\u043e\u0433\u043b\u0438 \u0431\u044b\u0441\u0442\u0440\u043e \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u044c \u0432\u0441\u0451 \u044d\u0442\u043e \u0443 \u0441\u0435\u0431\u044f. \u0412\u043d\u0430\u0447\u0430\u043b\u0435 \u0441\u043e\u0437\u0434\u0430\u0451\u043c \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0431\u0443\u0434\u0435\u043c \u0445\u0438\u043c\u0438\u0447\u0438\u0442\u044c \u0438 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u0432 \u043d\u0435\u0451:<\/p>\n<pre><code class=\"bash\">mkdir phpbench &amp;&amp; cd phpbench<\/code><\/pre>\n<p>\u0417\u0430\u043a\u0438\u043d\u0435\u043c \u0432 \u043a\u043e\u0440\u0435\u043d\u044c \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0432\u043e\u0442 \u0442\u0430\u043a\u043e\u0439 <code>composer.json<\/code>:<\/p>\n<pre><code class=\"json\">{     \"name\": \"my\/app\",     \"require-dev\": {         \"phpbench\/phpbench\": \"*\"     },     \"autoload\": {         \"psr-4\": {             \"My\\\\App\\\\\": \"src\/\",             \"My\\\\App\\\\Tests\\\\\": \"tests\/\"         }     }, }<\/code><\/pre>\n<p>\u0417\u0430\u0442\u0435\u043c \u0432\u043e\u0442 \u0442\u0430\u043a\u043e\u0439 <code>phpbench.json<\/code>:<\/p>\n<pre><code class=\"json\">{     \"runner.bootstrap\": \"vendor\/autoload.php\",     \"runner.php_disable_ini\": true }<\/code><\/pre>\n<p>\u0412 \u043f\u0430\u043f\u043a\u0443 <code>src\/<\/code> \u0432\u043e\u0442 \u0442\u0430\u043a\u043e\u0439 \u0444\u0430\u0439\u043b <code>User.php<\/code>:<\/p>\n<pre><code class=\"php\">&lt;?php  namespace My\\App;  class User {      public static function getFullName(string $firstName, string $middleName, string $lastName) {          return \"$firstName $middleName $lastName\";     } }<\/code><\/pre>\n<p>\u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043f\u0430\u043f\u043a\u0443 <code>tests\/Benchmark<\/code>:<\/p>\n<pre><code class=\"bash\">mkdir tests\/Benchmark<\/code><\/pre>\n<p>\u0418 \u0432 \u043d\u0435\u0451 \u0437\u0430\u043a\u0438\u043d\u0435\u043c \u0432\u043e\u0442 \u0442\u0430\u043a\u043e\u0439 <code>UserBench.php<\/code>:<\/p>\n<pre><code class=\"php\">&lt;?php  namespace My\\App\\Tests;  use My\\App\\User;  class UserBench {      function benchGetFullName() {          User::getFullName('\u0418\u0432\u0430\u043d', '\u0418\u0432\u0430\u043d\u044b\u0447', '\u0418\u0432\u0430\u043d\u043e\u0432');     } }<\/code><\/pre>\n<p>\u041f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u0432\u043e\u0442 \u0442\u0430\u043a\u0430\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0430:<\/p>\n<pre><code class=\"bash\">$ ls -R composer.json  phpbench.json  src\/           tests\/  .\/src: User.php  .\/tests: Benchmark\/  .\/tests\/Benchmark: UserBench.php<\/code><\/pre>\n<p>\u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438:<\/p>\n<pre><code class=\"bash\">composer install<\/code><\/pre>\n<p>\u0418 \u043d\u0430\u043a\u043e\u043d\u0435\u0446-\u0442\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043d\u0430\u0448 \u0431\u0435\u043d\u0447\u043c\u0430\u0440\u043a \u0432\u043e\u0442 \u0442\u0430\u043a:<\/p>\n<pre><code class=\"bash\">.\/vendor\/bin\/phpbench run .\/tests\/Benchmark\/UserBench.php PHPBench (1.4.1) running benchmarks... #standwithukraine with configuration file: \/Users\/zeleniy\/Projects\/phpbench\/phpbench.json with PHP version 8.4.8, xdebug \u274c, opcache \u274c  \\My\\App\\Tests\\UserBench      benchGetFullName........................I0 - Mo114.000\u03bcs (\u00b10.00%)  Subjects: 1, Assertions: 0, Failures: 0, Errors: 0<\/code><\/pre>\n<p>\u0412\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0441\u0443\u0445\u043e\u0432\u0430\u0442\u043e, \u043d\u043e \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0440\u0430\u0437\u0431\u0435\u0440\u0451\u043c\u0441\u044f, \u0447\u0442\u043e \u0442\u0443\u0442 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043e, \u043f\u043e\u0442\u043e\u043c \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u0432\u044b\u0432\u043e\u0434 \u0431\u043e\u043b\u0435\u0435 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0432\u043d\u044b\u043c. \u0410 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043e \u0442\u0443\u0442, \u0447\u0442\u043e \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043b\u0441\u044f \u043e\u0434\u0438\u043d \u0431\u0435\u043d\u0447\u043c\u0430\u0440\u043a <code>benchGetFullName<\/code> \u0432 \u043a\u043b\u0430\u0441\u0441\u0435 <code>My\\App\\Tests\\UserBench<\/code> \u0438 \u0441\u0440\u0435\u0434\u043d\u0435\u0435 \u0432\u0440\u0435\u043c\u044f \u0435\u0433\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f &#8212; <code>114.000\u03bcs<\/code> \u0442.\u0435. 0.000114 \u0441\u0435\u043a\u0443\u043d\u0434\u044b. \u0412 \u0441\u043a\u043e\u0431\u043a\u0430\u0445 <code>(\u00b10.00%)<\/code> \u0443\u043a\u0430\u0437\u0430\u043d \u0440\u0430\u0437\u0431\u0440\u043e\u0441.<\/p>\n<p>\u0415\u0441\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043c\u0435\u043d\u044f\u0442\u044c \u0440\u0435\u043f\u043e\u0440\u0442\u044b, \u043f\u0438\u0441\u0430\u0442\u044c \u0438\u0445 \u0444\u0430\u0439\u043b\u044b \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u0438 \u0432 \u0432\u0438\u0434\u0435 JSON. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u043a\u0430 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0440\u0430\u0437\u043d\u043e\u043e\u0431\u0440\u0430\u0437\u0438\u0442\u044c \u044d\u0442\u043e\u0442 \u043e\u0442\u0447\u0451\u0442 \u043e\u043f\u0446\u0438\u0435\u0439 <code>--report<\/code> \u0441\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c <code>default<\/code>, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0434\u0435\u0444\u043e\u043b\u0442\u043d\u044b\u043c \u043d\u0435 \u044f\u0432\u043b\u044f\u0442\u0441\u044f (\u0440\u0430\u0437\u0432\u0435 \u043d\u0435 \u0448\u0438\u043a\u0430\u0440\u043d\u043e\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435? \ud83d\ude00):<\/p>\n<pre><code class=\"bash\">$ .\/vendor\/bin\/phpbench run .\/tests\/Benchmark\/UserBench.php --report=default PHPBench (1.4.1) running benchmarks... #standwithukraine with configuration file: \/Users\/zeleniy\/Projects\/phpbench\/phpbench.json with PHP version 8.4.8, xdebug \u274c, opcache \u274c  \\My\\App\\Tests\\UserBench      benchGetFullName........................I0 - Mo115.000\u03bcs (\u00b10.00%)  Subjects: 1, Assertions: 0, Failures: 0, Errors: 0 +------+-----------+------------------+-----+------+----------+-----------+--------------+----------------+ | iter | benchmark | subject          | set | revs | mem_peak | time_avg  | comp_z_value | comp_deviation | +------+-----------+------------------+-----+------+----------+-----------+--------------+----------------+ | 0    | UserBench | benchGetFullName |     | 1    | 716,520b | 115.000\u03bcs | +0.00\u03c3       | +0.00%         | +------+-----------+------------------+-----+------+----------+-----------+--------------+----------------+<\/code><\/pre>\n<p>\u0422\u0443\u0442 \u0443 \u043d\u0430\u0441 \u0443\u0436\u0435 \u0435\u0441\u0442\u044c \u0442\u0430\u0431\u043b\u0438\u0447\u043a\u0430. \u042f \u043d\u0435 \u0431\u0443\u0434\u0443 \u043f\u043e\u043a\u0430 \u043d\u0430 \u043d\u0435\u0439 \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c\u0441\u044f. \u0412\u0438\u0434\u043d\u043e, \u0447\u0442\u043e <code>Mo114.000\u03bcs<\/code> \u0438\u0437\u043c\u0435\u043d\u043b\u0438\u043b\u043e\u0441\u044c \u043d\u0430 <code>Mo115.000\u03bcs<\/code> \u0438 \u044d\u0442\u0430 \u0436\u0435 \u0446\u0438\u0444\u0440\u0430 \u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0443\u0435\u0442 \u0432 \u043a\u043e\u043b\u043e\u043d\u043a\u0435 <code>time_avg<\/code>. \u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 <code>Mo<\/code> \u043f\u0435\u0440\u0435\u0434 <code>115.000\u03bcs<\/code> \u0432\u044b\u044f\u0441\u043d\u0438\u0442\u044c \u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c. \u042d\u0442\u0438 \u0446\u0438\u0444\u0440\u044b \u0431\u0443\u0434\u0443\u0442 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u043c\u0435\u043d\u044f\u0442\u044c\u0441\u044f \u0442.\u043a. \u043d\u0430 \u0432\u0430\u0448\u0435\u043c \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0435 \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u044b \u0441\u043e\u0442\u043d\u0438 \u0438 \u0442\u044b\u0441\u044f\u0447\u0438 \u0444\u043e\u043d\u043e\u0432\u044b\u0445 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432 \u0438\u0437-\u0437\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0438 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u044f\u0442 \u044d\u0442\u0438 \u0444\u043b\u0443\u043a\u0442\u0443\u0430\u0446\u0438\u0438. \u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u044d\u0442\u043e\u0433\u043e \u0442\u0435\u0441\u0442\u0430 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043e\u043d \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e 1 \u0440\u0430\u0437 \u0438 \u043d\u0438\u043a\u0430\u043a\u043e\u0439 \u0434\u043e\u0441\u0442\u043e\u0432\u0435\u0440\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0438 \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u0441 \u044d\u0442\u043e\u0433\u043e \u043d\u0438\u043a\u0430\u043a \u043d\u0435\u043b\u044c\u0437\u044f. \u0418\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u044d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043e\u043f\u0446\u0438\u0438 <code>--revs<\/code>:<\/p>\n<pre><code class=\"bash\">.\/v$ .\/vendor\/bin\/phpbench run .\/tests\/Benchmark\/UserBench.php --report=default --revs=1000 PHPBench (1.4.1) running benchmarks... #standwithukraine with configuration file: \/Users\/zeleniy\/Projects\/phpbench\/phpbench.json with PHP version 8.4.8, xdebug \u274c, opcache \u274c  \\My\\App\\Tests\\UserBench      benchGetFullName........................I0 - Mo0.269\u03bcs (\u00b10.00%)  Subjects: 1, Assertions: 0, Failures: 0, Errors: 0 +------+-----------+------------------+-----+------+----------+----------+--------------+----------------+ | iter | benchmark | subject          | set | revs | mem_peak | time_avg | comp_z_value | comp_deviation | +------+-----------+------------------+-----+------+----------+----------+--------------+----------------+ | 0    | UserBench | benchGetFullName |     | 1000 | 716,520b | 0.269\u03bcs  | +0.00\u03c3       | +0.00%         | +------+-----------+------------------+-----+------+----------+----------+--------------+----------------+000<\/code><\/pre>\n<p><code>--revs=1000<\/code> \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u043a\u043e\u0434 \u043c\u0435\u0442\u043e\u0434\u0430 <code>User::getFullName<\/code> \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043f\u0443\u0449\u0435\u043d \u043d\u0435 1 \u0440\u0430\u0437, \u0430 1000.  \u0418\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e, \u0447\u0442\u043e \u0432\u0440\u0435\u043c\u044f \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u043b\u043e\u0441\u044c \u0434\u043e <code>0.269\u03bcs<\/code>. \u042f \u0432\u0430\u043c \u0447\u0435\u0441\u0442\u043d\u043e \u0441\u043a\u0430\u0436\u0443, \u0447\u0442\u043e \u0432 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0435 \u044f \u043f\u043e\u0447\u0442\u0438 \u0447\u0442\u043e \u043d\u0435 \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u044e\u0441\u044c. \u0418 \u043f\u043e\u0447\u0435\u043c\u0443-\u0442\u043e \u043f\u0440\u0438 \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u0438 <code>--revs=1000<\/code> \u0438 \u0431\u0435\u0437 \u043d\u0435\u0433\u043e \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0432\u044b\u043f\u043e\u043b\u0435\u043d\u0438\u044f \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u0432 2-3 \u0440\u0430\u0437\u0430, \u0445\u043e\u0442\u044f \u043a\u0430\u0437\u043b\u043e\u0441\u044c \u0431\u044b \u043e\u043d\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e\u0439. \u041d\u0430 \u044d\u0442\u043e\u043c \u0441\u0442\u0440\u0430\u043d\u043d\u043e\u0441\u0442\u0438 \u043d\u0435 \u043a\u043e\u043d\u0447\u0430\u044e\u0442\u0441\u044f. \u0415\u0441\u0442\u044c \u0435\u0449\u0451 \u043e\u0434\u043d\u0430 \u043e\u043f\u0446\u0438\u044f <code>--iterations<\/code>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0440\u0435\u0433\u043b\u0430\u043c\u0435\u043d\u0442\u0438\u0440\u0443\u0435\u0442 \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437 \u0442\u0435\u0441\u0442 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043f\u0443\u0449\u0435\u043d&#8230; \u044f \u0434\u0430\u0436\u0435 \u043d\u0435 \u0437\u043d\u0430\u044e \u043a\u0430\u043a \u044d\u0442\u043e \u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u044b\u043c \u044f\u0437\u044b\u043a\u043e\u043c. \u041a\u043e\u0440\u043e\u0447\u0435 \u0432 \u0438\u0442\u043e\u0433\u0435 \u0442\u0435\u0441\u0442 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043f\u0443\u0449\u0435\u043d <code>--revs \u0443\u043c\u043d\u043e\u0436\u0438\u0442\u044c \u043d\u0430 --iterations<\/code> \u0440\u0430\u0437. \u0412\u043e\u0442 \u0442\u0430\u043a \u044d\u0442\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043d\u0430 \u044d\u043a\u0440\u0430\u043d\u0435:<\/p>\n<pre><code class=\"bash\">$ .\/vendor\/bin\/phpbench run .\/tests\/Benchmark\/UserBench.php --report=default --revs=1000 --iterations=5 PHPBench (1.4.1) running benchmarks... #standwithukraine with configuration file: \/Users\/zeleniy\/Projects\/phpbench\/phpbench.json with PHP version 8.4.8, xdebug \u274c, opcache \u274c  \\My\\App\\Tests\\UserBench      benchGetFullName........................I4 - Mo0.270\u03bcs (\u00b17.62%)  Subjects: 1, Assertions: 0, Failures: 0, Errors: 0 +------+-----------+------------------+-----+------+----------+----------+--------------+----------------+ | iter | benchmark | subject          | set | revs | mem_peak | time_avg | comp_z_value | comp_deviation | +------+-----------+------------------+-----+------+----------+----------+--------------+----------------+ | 0    | UserBench | benchGetFullName |     | 1000 | 716,520b | 0.322\u03bcs  | +1.95\u03c3       | +14.84%        | | 1    | UserBench | benchGetFullName |     | 1000 | 716,520b | 0.261\u03bcs  | -0.91\u03c3       | -6.92%         | | 2    | UserBench | benchGetFullName |     | 1000 | 716,520b | 0.276\u03bcs  | -0.21\u03c3       | -1.57%         | | 3    | UserBench | benchGetFullName |     | 1000 | 716,520b | 0.272\u03bcs  | -0.39\u03c3       | -3.00%         | | 4    | UserBench | benchGetFullName |     | 1000 | 716,520b | 0.271\u03bcs  | -0.44\u03c3       | -3.35%         | +------+-----------+------------------+-----+------+----------+----------+--------------+----------------+<\/code><\/pre>\n<p>\u041d\u0430\u043a\u043e\u043d\u0435\u0446-\u0442\u043e \u0432 \u043a\u043e\u043b\u043e\u043d\u043a\u0430\u0445 <code>comp_z_value<\/code> \u0438 <code>comp_deviation<\/code> \u0447\u0442\u043e-\u0442\u043e \u043f\u043e\u044f\u0432\u0438\u043b\u043e\u0441\u044c. \u0418 \u0432 \u0441\u043a\u043e\u0431\u043a\u0430\u0445 \u0442\u043e\u0436\u0435 \u0447\u0442\u043e-\u0442\u043e \u043f\u043e\u044f\u0432\u0438\u043b\u043e\u0441\u044c: <code>Mo0.270\u03bcs (\u00b17.62%)<\/code>. \u041d\u0430\u0434\u043e \u0434\u0443\u043c\u0430\u0442\u044c \u044d\u0442\u043e \u0441\u0440\u0435\u0434\u043d\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e \u043a\u043e\u043b\u043e\u043d\u043a\u0435 <code>comp_deviation<\/code>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 <a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%9A%D0%BE%D1%8D%D1%84%D1%84%D0%B8%D1%86%D0%B8%D0%B5%D0%BD%D1%82_%D0%B2%D0%B0%D1%80%D0%B8%D0%B0%D1%86%D0%B8%D0%B8\" rel=\"noopener noreferrer nofollow\">\u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442 \u0432\u0430\u0440\u0438\u0430\u0446\u0438\u0438<\/a>, \u0430 <code>comp_z_value<\/code> &#8212; \u044d\u0442\u043e <a href=\"https:\/\/ru.wikipedia.org\/wiki\/Z-%D0%BE%D1%86%D0%B5%D0%BD%D0%BA%D0%B0\" rel=\"noopener noreferrer nofollow\">z-\u043e\u0446\u0435\u043d\u043a\u0430<\/a> \u0442.\u0435. \u0440\u0430\u0437\u0431\u0440\u043e\u0441 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043c\u0435\u0436\u0434\u0443 \u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0435\u0439 (<code>--iterations<\/code>) \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u0440\u0435\u0434\u043d\u0435\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f. \u042f \u0447\u0435\u0441\u0442\u043d\u043e \u043d\u0435 \u0432\u0438\u0436\u0443 \u0440\u0430\u0437\u043d\u0438\u0446\u044b \u043c\u0435\u0436\u0434\u0443 \u0442\u0435\u043c, \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0442\u0435\u0441\u0442 5000 \u0440\u0430\u0437 \u0438\u043b\u0438 5 \u0440\u0430\u0437 \u043f\u043e \u0442\u044b\u0441\u044f\u0447\u0435. \u041d\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u044d\u0442\u043e \u0438\u0437-\u0437\u0430 \u0441\u043a\u0443\u0434\u043e\u0443\u043c\u0438\u044f. \u0415\u0441\u043b\u0438 \u0432\u0434\u0440\u0443\u0433 \u0432\u044b \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u0442\u0435\u0441\u044c \u0432 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0435, \u0442\u043e \u043f\u043e\u044f\u0441\u043d\u0438\u0442\u0435 \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430 \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445 \u0447\u0442\u043e \u0432\u0441\u0451 \u044d\u0442\u043e \u0438 \u0437\u0430\u0447\u0435\u043c, \u0432 \u0446\u0435\u043b\u044f\u0445 \u043b\u0438\u043a\u0432\u0438\u0434\u0430\u0446\u0438\u0438 \u0431\u0435\u0437\u0433\u0440\u0430\u043c\u043e\u0442\u043d\u043e\u0441\u0442\u0438 \u0441\u0440\u0435\u0434\u0438 \u043d\u0430\u0441\u0435\u043b\u0435\u043d\u0438\u044f, \u0442\u0430\u043a \u0441\u043a\u0430\u0437\u0430\u0442\u044c \ud83d\ude00<\/p>\n<p>\u041f\u0440\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0438 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0439 \u043a\u043e\u0434\u0430, \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u0441\u0440\u0435\u0434\u043d\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 (<code>0.270\u03bcs<\/code>).  \u0410 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0438 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0443\u043b\u0443\u0447\u0448\u0438\u0442\u044c \u044d\u0442\u043e\u0442 \u043a\u043e\u0434. \u041d\u043e \u043f\u0435\u0440\u0435\u0434 \u044d\u0442\u0438\u043c \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u043c \u0442\u0435\u043a\u0443\u0449\u0438\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0441 \u043f\u043e\u043c\u0435\u0442\u043a\u043e\u0439 <code>interpolation<\/code>.  \u0415\u0441\u043b\u0438 \u0432\u044b \u0432\u0434\u0440\u0443\u0433 \u043f\u043e\u043c\u043d\u0438\u0442\u0435, \u0442\u043e \u043a\u043e\u0433\u0434\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0437\u0430\u043f\u0438\u0445\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0432 \u0441\u0442\u0440\u043e\u043a\u0443 \u0441 \u0434\u0432\u043e\u0439\u043d\u044b\u043c\u0438 \u043a\u0430\u0432\u044b\u0447\u043a\u0430\u043c\u0438, \u0442\u043e \u044d\u0442\u043e \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f <code>variable interpolation<\/code>. \u0422\u044d\u0433\u043d\u0443\u0442\u044c \u0432\u0435\u0440\u0441\u0438\u044e \u0431\u0435\u043d\u0447\u043c\u0430\u0440\u043a\u0430 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u043e\u043f\u0446\u0438\u0438 <code>--tag<\/code>:<\/p>\n<pre><code class=\"bash\">.\/vendor\/bin\/phpbench run .\/tests\/Benchmark\/UserBench.php --report=default --revs=1000 --iterations=5 --tag=interpolation<\/code><\/pre>\n<p>\u041a\u0441\u0442\u0430\u0442\u0438, PHPBench \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u0438 \u0438 \u043e\u043f\u0446\u0438\u0438 <code>--revs=1000<\/code> \u0438 <code>--iterations=5<\/code> \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043f\u0435\u0440\u0435\u0434 \u0442\u0435\u0441\u0442\u0438\u0440\u0443\u0435\u043c\u044b\u043c \u043c\u0435\u0442\u043e\u0434\u043e\u043c (\u0438\u043b\u0438 \u043a\u043b\u0430\u0441\u0441\u043e\u043c), \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u0431\u0443\u0434\u0443 \u0438\u0445 \u043e\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0434\u0430\u043b\u0435\u0435:<\/p>\n<pre><code class=\"php\">class UserBench {      \/**      * @Revs(1000)      * @Iterations(5)      *\/     function benchGetFullName() {          User::getFullName('\u0418\u0432\u0430\u043d', '\u0418\u0432\u0430\u043d\u044b\u0447', '\u0418\u0432\u0430\u043d\u043e\u0432');     } }<\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0437\u0430\u043c\u0435\u043d\u0438\u043c \u043d\u0430\u0448 \u0441\u043f\u043e\u0441\u043e\u0431 \u0441\u0431\u043e\u0440\u043a\u0438 \u043f\u043e\u043b\u043d\u043e\u0433\u043e \u0438\u043c\u0435\u043d\u0438 \u0441 <code>\"$firstName $middleName $lastName\"<\/code> \u043d\u0430 \u044f\u0432\u043d\u0443\u044e \u043a\u043e\u043d\u043a\u0442\u0435\u043d\u0430\u0446\u0438\u044e <code>$firstName . ' ' . $middleName . ' ' . $lastName<\/code> \u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043c \u0431\u0435\u043d\u0447\u043c\u0430\u0440\u043a \u0435\u0449\u0451 \u0440\u0430\u0437 \u0443\u043a\u0430\u0437\u0430\u0432 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u043e\u043f\u0446\u0438\u0438 <code>--ref<\/code> \u0440\u0435\u0444\u0435\u0440\u0435\u043d\u0441 \u0442.\u0435. \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0439 \u0437\u0430\u043f\u0443\u0441\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u0442\u044d\u0433\u043d\u0443\u043b\u0438 \u043a\u0430\u043a <code>--tag=interpolation<\/code>:<\/p>\n<pre><code class=\"bash\">$ .\/vendor\/bin\/phpbench run .\/tests\/Benchmark\/UserBench.php --report=default --ref=interpolation PHPBench (1.4.1) running benchmarks... #standwithukraine with configuration file: \/Users\/zeleniy\/Projects\/phpbench\/phpbench.json with PHP version 8.4.8, xdebug \u274c, opcache \u274c comparing [actual vs. interpolation]  \\My\\App\\Tests\\UserBench      benchGetFullName........................I4 - [Mo0.345\u03bcs vs. Mo0.279\u03bcs] +23.87% (\u00b15.20%)  Subjects: 1, Assertions: 0, Failures: 0, Errors: 0 +------+-----------+------------------+-----+------+-----------------+----------+--------------+----------------+ | iter | benchmark | subject          | set | revs | mem_peak        | time_avg | comp_z_value | comp_deviation | +------+-----------+------------------+-----+------+-----------------+----------+--------------+----------------+ | 0    | UserBench | benchGetFullName |     | 1000 | 716.520kb 0.00% | 0.344\u03bcs  | +0.41\u03c3       | +2.14%         | | 1    | UserBench | benchGetFullName |     | 1000 | 716.520kb 0.00% | 0.349\u03bcs  | +0.70\u03c3       | +3.62%         | | 2    | UserBench | benchGetFullName |     | 1000 | 716.520kb 0.00% | 0.302\u03bcs  | -1.99\u03c3    <\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-464325","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/464325","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=464325"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/464325\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=464325"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=464325"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=464325"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}