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;
}