Так что у меня этот кусок кода в статический метод, называемый Camelize
Строка camelize низкая производительность
return strtr(ucwords(strtr($id, array('_' => ' ', '.' => '_ ', '\\' => '_ '))), array(' ' => ''));
Это просто camelizes материал.
У меня около 211 тыс. Записей, итераций по замкнутому циклу, у этих записей есть несколько слов, которые мне нужны для верблюда, самое длинное слово может быть около 10 символов, легкое peasy, но выполнение некоторых тестов xhprof. Я пришел к выводу, что camelize не является хорошим Идея, если вам нужна скорость.
XHProf с camelize: 313,866,303 микросекунд (~ 5мин)
- 19268795 звонки
- Incl. Стена Время 228.658.500
- ICpu: 81,3%
XHProf без camelize: 55,099,811 микросекунд (< 1мин)
Цель этого сценария установить значения свойств класса.
Недвижимость может быть protected $myVar
, которая находится на верблюде.
Внутри моего конструктора, я получаю массив подчеркивает свойства (ключи массива), и их значение (значения массива). my_var => foo
Как мы camelized свойства, мы должны преобразовать ключи массива в camelize, так что мы можем сделать что-то вроде $this->$camelizedProperty = $value
Да, мы могли бы с помощью подчеркивания свойств, поэтому мы не должны преобразовать любая строка, но это старый рабочий код, который теперь имеет примерно в 4 раза больше свойств, которые он имел, и он используется множеством зависимостей, поэтому изменение свойств для подчеркивания сейчас не является вариантом, если мы сможем найти способ для ускорения camelizing.
UPDATE
Используя некоторые индивидуальные тесты с microtime
, чтобы получить сравнение в реальном времени я закончил с этим ...
Используемые методы:
strtr(ucwords(strtr($word, array('_' => ' ', '.' => '_ ', '\\' => '_ '))), array(' ' => ''))
lcfirst(str_replace(" ", "", ucwords(strtr($word, "_-", " "))))
str_replace(" ", "", ucwords(strtr($word, "_-", " ")))
Средние результаты над ~ 100 строк на каждой итерации:
- 0,0011
- 0,0002
- 0.0002
Так как указано @RST, используя str_replace
составляет 18% быстрее, чем мой первый метод, но по-прежнему медленно (если у нас есть огромный цикл)
На 20М записей, используя xhprof, общие результаты:
- 313 секунд (~ 5мин)
- 152 секунд (~ 2.5min)
- 158 секунд (~ 2.5min)
Можно сказать, что lcfirst
не замедляет работу скрипта (я думал, что это может привести к более медленным временам).
Вопрос не в том, как относиться к камере, а о том, как он влияет на производительность в наших сценариях и который может быть лучшим способом его использования.
Что значит «встроенный код»? – RomanPerekhrest
Я имею в виду не вызов статического метода из другого класса, или метод в основном. «camelizing» строку вместо вызова любого метода camelize. –
На что вы его применили? Если это записи базы данных, почему бы не сохранить завершенную форму в кеше в базе данных? – mario