Pull to refresh

О том, как не надо делать сайты на NetCat

Website development *
Эта статья будет интересна прежде всего тем, кто в создании сайтов использует NetCat. Однако и остальным разработчикам эта информация может быть интересна. Потому как во многом это относится и к другим системам.

Итак, недавно пришлось разбираться почему стал медленно работать сайт, разработанный на NetCat'e. В процессе выяснилось, что для формирования главной сраницы произоводилось ~150 запросов к БД!

Я сначала не поверил своим глазам, а потом оху пришёл в ужас.

После некоторых манипуляций удалось убрать около 100 лишних запросов.

Хочу рассказать о некоторых выводах и предостеречь некоторых разработчиков

  1. Не надо использовать функцию s_list_class если подобных вызовов набирается хотя бы > 3. Дело в том, что вызов такой функции приводит к нескольким запросам к БД (от 5 и гораздо больше) (получить шаблон, данные компонента и т.п.) Если на странице нужно вывести данные из другого компонента, то лучше написать функцию для вывода этих данных в functions.inc.php дефолтного модуля. В подобном случае практически всегда можно обойтись 1 запросом.
    Вообще, один вызов s_list_class может создавать десятки запросов к БД! В зависимости от компонента, объекты которого выводятся.
  2. Забудьте про opt(). Используйте (<if>? <true>: <false> )
    Тут дело в том, что даже если условие в opt вернуло false, то код все равно будет выполнен, но не будет выведен на странице его результат.
  3. Будьте аккуратны в использовании компонентов с полем «Файл». При выводе списка объектов такого компонента будет столько раз сделан запрос на получение данных о файле, сколько объектов выводится. А если таких полей типа «файл» два, то и запросов будет в два раза больше. Если три, то в три и т.д.
    Т.е. если у нас есть компонент «фотогалерея» и в нем 2 поля «файл» то для вывода 10 последних фотографий будет сделано больше 20 запросов к БД
    Вообще, запросы в цикле — это крайнее зло! Избегайте этого.
  4. Почти та же ситуация с голосованием. При выводе опроса будет столько запросов к БД, сколько вариантов ответа в нем сделано.
  5. Создавая новые компоненты в которых потом будет осуществляться выборка и сортировка по разным условиям поставьте необходимые индексы для таблицы компонента. Это может существенно ускорить его работу.

Тем не менее на NetCat'e можно создавать довольно большие и сложные проекты. Просто создавать их должны люди действительно понимающие суть происходящих внутри процессов. Поэтому вместо части внутренних функций системы лучше использовать свои, написанные для конкретного проекта. И будет хорошо, если в документации для разработчиков эти моменты отразят.

P.S. Обращение к разработчикам NetCat (если они вдруг прочитают).
Пожалуйста, избегайте запросов к БД в цикле. Особенно если заранее не известно сколько в нем будет итераций. Очень хотелось, что бы данные проблемные функции были переписаны. А так же, хорошо бы в документации для разработчиков отдельно указывать, если функция производит запросы к БД, сколько она их производит и какие есть подводные камни.
Tags:
Hubs:
Total votes 66: ↑55 and ↓11 +44
Views 12K
Comments Comments 137