Baigudin Software avatar
Baigudin Software logo
home
ru region
en region

PHP DOM Builder API

BOOS Core представлено для ARM микропроцессоров Texas Instruments семейства AM18x

Проект Baigudin Software представил операционное ядро BOOS Core для ARM микропроцессоров семейства AM18x компании Texas Instruments.

Оптимизация исходного кода

«Если ты что-то написал и это работает, то лучше задержать дыхание и не дышать – пусть работает». Хорошее утверждение, но если это работает, но медленно или не гибко? Приходится оптимизировать, затем отлаживать и ещё раз тестировать. Понятно, что компромисс между удобством и быстродействием порой найти не так просто. Но о нем стоит задуматься на этапе проектирования, и будущее будет проще.

Оптимизация выборки

Основное правило, которое необходимо запомнить – это то, что результаты поиска не кэшируются. Запрашивая поиск в пределах любой ветки дерева, вы начинаете проходить её снова и снова. Поэтому, чем меньше ветка, тем быстрее поиск.

Лучше сохранять результаты поиска во временные переменные:

<?php
// Плохо
$document->find('a')->addClass('link');
$document->find('a')->attr('href''baigudin.software');
// Хорошо
$node $document->find('a')->addClass('link');
$node->attr('href''baigudin.software');
?>

Можно использовать цепочки вызовов:

<?php
// И так хорошо
$document->find('a')->addClass('link')->attr('href''baigudin.software');
?>

Обрезаем дерево до веток «div.article»:

<?php
// Плохо
$document->find('div.article h2');
$document->find('div.article a');
// Хорошо
$node $document->find('div.article');
$node->find('h2');
$node->find('a');
?>

Индексирование узлов

Каждому объекту класса ElementNode можно присвоить строковый индекс (ключ), вызвав метод key. Данный ключ при создании списка узлов будет ассоциирован с порядковым номером узла в данном списке. Таким образом, при выборке узла мы можем запросить его по его ключу.

<?php
use DomBuilder\Element as Element;
// Создаём документ
$document Element::create()
  ->
insert('html')
    ->
insert('head')
      ->
after('body')->root();
// Создаём пустой список
$list Element::newList();
// Добавляем в список узлы с ключами
$list->pushElement::create('h1')->html('Заголовок')->key('header') );
$list->pushElement::create('p')->html('Текст') )->key('text');
// Добавляем узлы из списка в документ по их ключу
$document->find('body')
  ->
insert$list->get('header') )
  ->
after$list->get('text') );
// Выводим документ
echo Element::getDocument($document);
?>

Здесь стоит отметить, что присвоение ключа узлу можно выполнить как на стадии формирования самого узла, так и при добавлении его в список. Вызов метода key у объекта ElementList приведёт к присвоению переданного ключа последнему добавленному узлу.

Функционал библиотеки не следит за уникальностью ключа. Ключ необходим лишь для ассоциации узла в списке. Таким образом, если в список будут добавлены два узла с одинаковыми ключами, то ассоциирован будет последний добавленный.

Мы рассмотрели несколько простых путей, что бы приложения были быстрее и вразумительнее при их поддержке. В следующей статье мы продолжим обсуждения об оптимизации и поговорим о многоязыковой поддержке.

К предыдущей статье

К списку статей

К следующей статье