php 同じ文字列であるかを判定できる「strcmp」と「===」のパフォーマンスを計測する

  • 作成日 2021.07.05
  • php
php 同じ文字列であるかを判定できる「strcmp」と「===」のパフォーマンスを計測する

phpで、同じ文字列であるかを判定できる「strcmp」と「===」のパフォーマンスを計測するサンプルコードを記述してます。phpのバージョンは8.0です。

環境

  • OS  CentOS Stream release 8
  • php 8.0.0
  • nginx 1.14.1

実行時間計測

microtimeを使用すれば、処理にかかった時間を計測することが可能です。

$startTime = microtime(true);

// 処理を記述

$time = microtime(true) - $startTime; // 処理にかかった時間(ミリ秒)

以下は、「strcmp」と「===」を使用して、同じ文字列であるかを判定するコードを1000万回実行して、パフォーマンスを計測するサンプルコードとなります。

比較する文字列が同じだった場合

<?php

// 1000万回実行
define('COUNT', 10000000);

// 計測開始
$startTime = microtime(true);

for ($i = 0; $i < COUNT; ++$i) {
    strcmp('mebee','mebee') == 0 ? '同じです' : '異なります';
}

result($startTime, 'strcmp');

// 計測開始
$startTime = microtime(true);

for ($i = 0; $i < COUNT; ++$i) {
    ('mebee' === 'mebee') ? '同じです' : '異なります';
}

result($startTime, '===');

function result($time, $str)
{

    echo '測定結果 : ' . $str . PHP_EOL;
    // 表示は少数第5桁まで
    echo "process time: " . number_format((microtime(true) - $time), 5) . ' ミリ秒' . PHP_EOL;
    echo PHP_EOL;
}

実行結果

[1回目] 
測定結果 : strcmp
process time: 2.65927 ミリ秒

測定結果 : ===
process time: 0.53314 ミリ秒

[2回目] 
測定結果 : strcmp
process time: 2.83628 ミリ秒

測定結果 : ===
process time: 0.53315 ミリ秒

[3回目] 
測定結果 : strcmp
process time: 2.79246 ミリ秒

測定結果 : ===
process time: 0.53891 ミリ秒

「===」の方が遥かにパフォーマンスは、いいです。

比較する文字列が異なる場合

【文字列を変更】
strcmp('mebee','mebe') == 0 ? '同じです' : '異なります';

('mebee' === 'mebe') ? '同じです' : '異なります';

実行結果

[1回目] 
測定結果 : strcmp
process time: 2.85821 ミリ秒

測定結果 : ===
process time: 0.53515 ミリ秒

[2回目] 
測定結果 : strcmp
process time: 2.70628 ミリ秒

測定結果 : ===
process time: 0.53439 ミリ秒

[3回目] 
測定結果 : strcmp
process time: 2.70774 ミリ秒

測定結果 : ===
process time: 0.53470 ミリ秒

結果が異なっても、「===」の方が遥かにパフォーマンスはいいです。