,

Московский инженерно-физический институт (государственный университет)

Оптимизация выдачи иерархически организованных данных в HTML-формах

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

При проектировании WEB-интерфейсов разработчик довольно часто сталкивается с проблемой задания принадлежности создаваемого объекта данных тому или иному компоненту иерархически организованной структуры (новое сообщение в форуме, блоге; новый товар в каталоге Интернет-магазина; новый участник социальной сети, привязанный к географической базе). Обычно действия разработчика в такой ситуации можно свести к двум случаям:

Случай 1-й. Характеризуется стабильностью рассматриваемой структуры и небольшим ее объемом. В этом случае для решения проблемы можно было бы использовать массив элементов radio button (или checkbox, если создаваемый объект может быть отнесен к нескольким элементам структуры одновременно). Степень сложности структуры, определяемая числом ступеней иерархии, не играет при этом большой роли.

Случай 2-й. Характеризуется большими объемами оперируемых структур, их нестабильностью. В этом случае именно степень сложности структуры определяет характер действий разработчика. Если в процессе использования WEB-интерфейса степень сложности структуры остается прежней, можно использовать два подхода к формированию выдачи: ранжированный или ступенчатый с использованием AJAX. Если же степень сложности возрастает, обычно используют единственный элемент select, помечая уровни иерархии в списке различными маркерами.

НЕ нашли? Не то? Что вы ищете?

Рассматриваемая в данной статье проблема была обнаружена при анализе работы CMS [1] Интернет-сайта www. *****. Суть проблемы заключалась в следующем – при попытке добавления новой записи (ответа на вопрос посетителя сайта) в базу данных время формирования страницы превышало допустимое время ожидания. В лучшем случае это проявлялось в замедлении работы интерфейса, в худшем – в его неработоспособности. Опытным путем было установлено, что источником проблемы является элемент формы select, служащий для выбора сообщения для ответа, и именно он стал объектом дальнейших исследований.

В результате эксперимента выяснилось, что вывод исследуемого элемента на страницу не был оптимизирован. Анализ иерархически организованной структуры данных (имеющей объем порядка 800-850 объектов), реализованной через этот элемент, выявил следующие недостатки реализации:

1)  рекурсивная функция на языке PHP, реализовавшая вывод элемента на страницу, позволяла наращивать уровни иерархии до бесконечности, в то время как опытная эксплуатация системы показала, что для решения поставленной задачи можно было ограничиться структурой данных, имеющей число уровней иерархии L=2;

2)  запросы к базе данных MySQL не были оптимизированы – отношение объема полезных выгружаемых данных к общему объему выгружаемых данных не превышало 0,3;

3)  при выводе элемента на страницу он содержал свыше 800 дочерних объектов - в то же время, по результатам работы CMS, число дочерних элементов могло быть сокращено в 50-80 раз без сколько-нибудь значимого ущерба для работы системы.

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

1)  если исследуемый интерфейс успешно эксплуатируется в течение некоторого периода времени, проанализируйте результаты его работы – это позволит предупредить выход системы из строя путем устранения рудиментарного функционала и случаев избыточности выгружаемых данных;

2)  при создании нового интерфейса, оперирующего иерархически организованными данными, следует принимать во внимание прогнозные темпы и масштабы роста подобных структур – их влияние на масштаб и объем самого интерфейса, равно как и на другие критерии, определяющие эффективность его работы, следует минимизировать.

Список литературы

1.  Материалы Интернет-ресурса *****: http://ru. wikipedia. org/wiki/CMS