PHP: как сделать внутренние функции INVOKING быстрее

Я пытаюсь оптимизировать функцию, которая вызывается 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, я вижу, что эта статистика (в миллисекундах) для этой функции:

Как видите, всего 3 мс тратится в preg_match, explode, implode комбинированный. Остальные 20 мс тратятся только на вызов этих функций и объединение некоторой строки. Есть ли способ снизить общую стоимость этой функции?

Я пробовал добавить

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

как было предложено здесь, но я не заметил никаких улучшений. Какие-либо предложения?

1 ответ

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

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;
}
Другие вопросы по тегам