PHP: Как ускорить внутренние функции INVOKING - PullRequest
0 голосов
/ 05 августа 2020

Я пытаюсь оптимизировать функцию, которая вызывается 560x во время выполнения запроса.

Это функция (некоторая информация удалена):

function foo($text) {
    if (preg_match('/[`"]/', $text)) {
        throw new Exception("very detailed error");
    }
    $text = explode('.', $text);
    $tick = '*';
    return $tick . implode("$tick.$tick", $text) . $tick;
}

Использование XDEBUG PHP profiler + Webgrind, я вижу, что эта статистика (в миллисекундах) для этой функции: enter image description here

As you can see, only 3ms is spent in preg_match, explode, implode combined. The other 20ms is spent just invoking these functions and concatenating some string. Is there a way I can reduce the total self cost of this function?

I have tried adding

use function preg_match;
use function explode;
use function implode;

as suggested здесь , но никаких улучшений не увидел. Есть предложения?

1 Ответ

0 голосов
/ 05 августа 2020

Рассмотрите возможность перехода на более легкие функции (но, возможно, с потерей читаемости):

function foo($text) {
    if (strpos($text, '"')!==FALSE || strpos($text, '`')!==FALSE) {
        throw new Exception("very detailed error");
    }
    $tick = '*';
    return $tick . str_replace('.', "$tick.$tick", $text) . $tick;
}
...