Регистрация
Регистрируясь, вы подтверждаете свое согласие с соглашением об использовании персональных данных.
Восстановление пароля

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

Страницы: 1  |  2
27.10.2008, 12:25
kulikoff
Денис Куликов
kulikoff

Зарегистрирован:
2007-10-26
Сообщений: 9

Недавно пришлось разбираться почему стал медленно работать сайт, разработанный на 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. Создавая новые компоненты в которых потом будет осуществляться выборка и сортировка по разным условиям поставьте необходимые индексы для таблицы компонента. Это может существенно ускорить его работу.

P.S. Обращение к разработчикам NetCat. Пожалуйста, избегайте запросов к БД в цикле. Особенно если заранее не известно сколько в нем будет итераций. Очень хотелось, что бы данные проблемные функции были переписаны. А так же, хорошо бы в документации для разработчиков отдельно указывать, если функция производит запросы к БД, сколько она их производит и какие есть подводные камни.


www.kulikoff.net - разработка сайтов любой сложности
28.10.2008, 13:45
sdelali
Сделали.Ру
sdelali

Зарегистрирован:
2004-12-24
Сообщений: 24

фигасе

Сделали.Ру
29.10.2008, 00:39
wultrex
Верховых Евгений

Зарегистрирован:
2008-09-15
Сообщений: 22

Так в Netcat 3 вроде уже не используются opt, а используется именно (<if> ? <true> : <false> )

Но по поводу всего остального, конечно ужасно. Для рядовых сайтов не заметно, но по поводу порталов тоже приходилось уменьшать кол-во запросов к бд. А ведь это еще не самые серьезные проекты были.

Что же получается, в стандартном исполнении неткет не годится для серьезно больших проектов?
29.10.2008, 10:08
kulikoff
Денис Куликов
kulikoff

Зарегистрирован:
2007-10-26
Сообщений: 9

WULTREX писал(а):
Что же получается, в стандартном исполнении неткет не годится для серьезно больших проектов?


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

www.kulikoff.net - разработка сайтов любой сложности
29.10.2008, 20:36
wultrex
Верховых Евгений

Зарегистрирован:
2008-09-15
Сообщений: 22

То что большие проекты есть и они создаются - сомнений нет, но вопрос был в том, что этого не сделать на должном уровне стандартными функциями неткет. Если везде писать свои функции, то за что мы платим?
29.10.2008, 22:56
kulikoff
Денис Куликов
kulikoff

Зарегистрирован:
2007-10-26
Сообщений: 9

Основное время при разработке "с нуля" уходит на создание бэкофиса. В случае с неткатом мы получаем вполне не плохой бэкофис.
К тому же стандартными функциями пользоваться можно, но делать это надо аккуратно. Желательно понимая что и как делает каждая функция.
Разработчики обещали, что в новой версии Руководства эти моменты будут раскрыты подробно.

К тому же в скором времени будет 4-ая версия и там будет кэширование. А это во многом панацея от подобных проблем.

www.kulikoff.net - разработка сайтов любой сложности
31.10.2008, 01:31
Гость
Гость

Пробная версия с кэшированием уже разослана разработчикам
05.11.2008, 00:26
Гость
Гость

А (<if> ? <true> : <false> ) можно также использовать как OPT ?
Т.е. это альтернатива и принцип такой же или нет?
В частности интересует - можно ли использовать вложенные, как OPT
05.11.2008, 07:25
Гость
Гость

Цитата:
Если на странице нужно вывести данные из другого компонента, то лучше написать функцию для вывода этих данных в functions.inc.php дефолтного модуля. В подобном случае практически всегда можно обойтись 1 запросом

а как прикажите прописывать Message40? жестко или добавлять файл с переменными
meTemplate=Message40 ?
05.11.2008, 08:47
pe3udent
Артур Юсупов

Зарегистрирован:
2008-04-03
Сообщений: 220

Цитата:
В частности интересует - можно ли использовать вложенные, как OPT


Код:
".( $condition1 ? $statement1 : ( $condition2 ? ( $condition3 ? $statement3 : $statement4 ) : NULL ) )."
05.11.2008, 08:49
pe3udent
Артур Юсупов

Зарегистрирован:
2008-04-03
Сообщений: 220

Цитата:
а как прикажите прописывать Message40? жестко или добавлять файл с переменными
meTemplate=Message40 ?


для этого есть переменная $classID
198 196 2008-11-07 07:00:17 9486
Страницы: 1  |  2
Описание проекта