Список мыслей:
- Не используйте функцию s_list_class(). Для вывода информации данной функцией используется 3 sql запроса: получение шаблона для вывода данных, получение полей в таблице и выборка самих данных. Если в шаблоне используется поле типа файл то добавляется еще 1 запрос на каждое такое поле. Также для создания постраничного вывода навигации в sql запрос добавляется опция SQL_CALC_FOUND_ROWS, в результате чего выполнение запроса не прекращается после нахождения определенного числа необходимых записей и время выполнения запроса значительно увеличивается, и затем следует еще один запрос для получения кол-ва строк. Итого, минимум 4 запроса для вывода 1 блока информации.
Неплохой заменой для функции s_list_class() является функция listQuery(), с помощью которой можно вывести блок информации 1 sql запросом и минимальным выполнением php кода. Но лучше всего будет кешировать такие блоки. - Используйте функции opt() и opt_case() только для вывода html. Если внутри данных функций будет присутствовать php код то он будет выполняться вне зависимости от условия. Пример проблемы и решение описал тут.
- Работа с файлами в системе полный ахтунг. Для получения имени файла системе требуется выполнить sql запрос. Если у вас лента новостей с 2 картинками (маленькая и большая) то для вывода каждой новости будет выполняться дополнительно 2 sql запроса. Никогда в жизни не создавайте фотогалерею на неткат с ее текущей файловой системой. Многие для отдачи статики ставят nginx. В случае с NetCat он будет абсолютно бесполезен, т.к. имена файлов не имеют расширения и для отдачи каждого файла требуется выполнить sql запрос. Отдача больших файлов потребует много оперативной памяти, т.к. файлы отдаются через php.
- При выводе опроса будет столько запросов к БД, сколько вариантов ответа в нем сделано. Давно про это знаю, но уже забыл по причине не использования данного модуля. Только для одного сайта ставил, и то переписывал вывод. Спасибо, kulikoff, что напомнил, может "Аист" все-таки переделает модуль голосования.
- Чем больше уровень вложенности раздела, тем больше запросов будет выполнено для создания массива свойств родительских разделов.
- Чем больше уровень вложенности используемого макета, тем больше запросов будет выполнено для наследования. В идеале чтоб макет дизайна был один. Для разделения макета главной и внутренней страницы можно использовать условие в макете.
- Системные настройки компонента проходят обработку eval дважды: в функции s_list_class() и s_list_message(). Не вставляйте в них функции.
- При использовании нескольких компонентов в разделе, если адрес страницы задан с ключевым словом, например, /cat/firm.html, то будет произведен поиск ключевого слова во всех компонентах. На поле Keyword в компонентах отсутствует индекс, что существенно замедлит скорость выборки при большом кол-ве данных.
- Форма добавления обрабатывается eval при выводе списка объектов на странице. Если в ней используются sql запросы, например, через listQuery, то необходимо поставить условие выполнения данного кода только когда мы находимся на странице добавления ".($action=='add'?" код формы добавления объекта ":"")."
- Шаблоны вывода навигации обрабатывается eval.
Поэтому, функция записанная таким образом:
$browse_sub[0][active] = "<a href=%URL>%NAME</a>".s_browse_level(1,$browse_sub[1]);
будет выполняться везде где используется данный макет, вне зависимости от того, используете ли вы шаблон $browse_sub[0] или нет. Чтоб такого не происходило, функцию необходимо вставлять в саму строку, а не присоединять к ней:
$browse_sub[0][active] = "<a href=%URL>%NAME</a>\".s_browse_level(1,\$browse_sub[1]).\"";
при этом в префиксе массив $browse_sub объявить глобальным:
$browse_sub[0][prefix] = "\";global \$browse_sub;\$result.=\"...";
На этом пока остановимся. Есть и другие тонкости создания сайта на NetCat, но они менее популярны и сразу не вспоминаются. Напишу в другой раз.
--
Сергей Павленко пишет о кризисе в мировой экономике или в головах у людей? Тем временем, ценные бумаги на бирже растут и торги в очередной раз приостанавливают.
Дачный сезон закончился и из сада надо забирать мобильную туалетную кабину, а то зимой сопрут.
Den Kulikoff, 2008-11-03 @ 12:49
Ту статью на Хабре писал во многом под действием эмоций (ну как только можно додумать так реализовывать некоторые вещи!) и о некоторых особенностях забыл упомянуть. В общем со всеми пунктами согласен, особенно не понятно зачем было так извращаться с файлами.
yakodzun, 2008-11-04 @ 10:28
преимущества такой файловой системы:
- невозможно скачать файл не зная точного имени
- невозможно закачать выполняемый скрипт в папку netcat_files
- потенциальная возможность считать скачивания
- потенциальная возможность разграничивать права на скачивание
Только было ошибкой то что это применили на все файлы в системе, достаточно было сделать модуль для этих целей. Также ошибкой является нежелание как можно устранить данную особенность которая вызывает недоразумение у всех пользователей системы.
Ruslan, 2008-11-13 @ 04:51
А на первый взгляд казалось идеальной CMS и альтернативой битриксу...
yakodzun, 2008-11-13 @ 07:44
А разве это не так? Просто вы понятия не имеете что происходит в битриксе, если ему нужны специальные тарифы
ShurStudio, 2009-11-10 @ 04:04
Согласен насчет громоздкости Bitrix. Но все эти проблемы решаются галлопирующим ростом мощности железа. Но это конечно не снимает с программера полностью обяханности думать о производительности. Использую NetCat в двух десятках проектов, претензий нет - стабильно, надежно. Большие фотогалереи, сайты турагенств, все есть. Я доволен.