Я использую синтаксический анализатор MIB, который я написал, используя PHP для проекта веб-интерфейса SNMP, который я создаю.
Объект узла находится в текущей структуре:
class MibNode
{
public $name;
public $oid;
public $type;
public $status;
public $description;
public $canRead;
public $canWrite;
public $parent = null;
public $children = array();
}
Я пытаюсь получить объект узла по его имени.
Я написал рекурсивную функцию для этого:
public function getNodeByName($name)
{
if($this->name === $name)
{
return $this;
}
else
{
foreach($this->children as $child)
{
$node = $child->getNodeByName($name);
if($node != null)
return $node;
}
return null;
}
}
У меня есть некоторые проблемы с производительностью в моем проекте, поэтому я профилировал код и увидел, что эта функция вызывается ~ 106 000 раз.
Есть ли способ уменьшить количество вызовов этой функции или повысить производительность?
Полный код парсера доступен Вот.
редактировать: я профилировал использование функции с помощью инструмента профиля xdebug, результаты доступны Вот.
Задача ещё не решена.
Других решений пока нет …