Заметки интернет-разработчика

Недавно на хабре опубликовали заметку "О том, как не надо делать сайты на NetCat". Но ваша радость была бы неполной, если бы я ее не дополнил. Описанные тонкости при работе с системой я уже озвучивал на форуме нетката, отвечая на вопросы пользователей по icq и в блоге. Собрать все свои мысли в кучу и опубликовать все никак не хватало времени. И вот недавно создал блог для записи и публикации всех мыслей по NetCat.

Список мыслей:
  1. Не используйте функцию s_list_class(). Для вывода информации данной функцией используется 3 sql запроса: получение шаблона для вывода данных, получение полей в таблице и выборка самих данных. Если в шаблоне используется поле типа файл то добавляется еще 1 запрос на каждое такое поле. Также для создания постраничного вывода навигации в sql запрос добавляется опция SQL_CALC_FOUND_ROWS, в результате чего выполнение запроса не прекращается после нахождения определенного числа необходимых записей и время выполнения запроса значительно увеличивается, и затем следует еще один запрос для получения кол-ва строк. Итого, минимум 4 запроса для вывода 1 блока информации.
    Неплохой заменой для функции s_list_class() является функция listQuery(), с помощью которой можно вывести блок информации 1 sql запросом и минимальным выполнением php кода. Но лучше всего будет кешировать такие блоки.

  2. Используйте функции opt() и opt_case() только для вывода html. Если внутри данных функций будет присутствовать php код то он будет выполняться вне зависимости от условия. Пример проблемы и решение описал тут.

  3. Работа с файлами в системе полный ахтунг. Для получения имени файла системе требуется выполнить sql запрос. Если у вас лента новостей с 2 картинками (маленькая и большая) то для вывода каждой новости будет выполняться дополнительно 2 sql запроса. Никогда в жизни не создавайте фотогалерею на неткат с ее текущей файловой системой. Многие для отдачи статики ставят nginx. В случае с NetCat он будет абсолютно бесполезен, т.к. имена файлов не имеют расширения и для отдачи каждого файла требуется выполнить sql запрос. Отдача больших файлов потребует много оперативной памяти, т.к. файлы отдаются через php.

  4. При выводе опроса будет столько запросов к БД, сколько вариантов ответа в нем сделано. Давно про это знаю, но уже забыл по причине не использования данного модуля. Только для одного сайта ставил, и то переписывал вывод. Спасибо, kulikoff, что напомнил, может "Аист" все-таки переделает модуль голосования.

  5. Чем больше уровень вложенности раздела, тем больше запросов будет выполнено для создания массива свойств родительских разделов.

  6. Чем больше уровень вложенности используемого макета, тем больше запросов будет выполнено для наследования. В идеале чтоб макет дизайна был один. Для разделения макета главной и внутренней страницы можно использовать условие в макете.

  7. Системные настройки компонента проходят обработку eval дважды: в функции s_list_class() и s_list_message(). Не вставляйте в них функции.

  8. При использовании нескольких компонентов в разделе, если адрес страницы задан с ключевым словом, например, /cat/firm.html, то будет произведен поиск ключевого слова во всех компонентах. На поле Keyword в компонентах отсутствует индекс, что существенно замедлит скорость выборки при большом кол-ве данных.

  9. Форма добавления обрабатывается eval при выводе списка объектов на странице. Если в ней используются sql запросы, например, через listQuery, то необходимо поставить условие выполнения данного кода только когда мы находимся на странице добавления ".($action=='add'?" код формы добавления объекта ":"")."

  10. Шаблоны вывода навигации обрабатывается 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, но они менее популярны и сразу не вспоминаются. Напишу в другой раз.

--
Сергей Павленко пишет о кризисе в мировой экономике или в головах у людей? Тем временем, ценные бумаги на бирже растут и торги в очередной раз приостанавливают.
Дачный сезон закончился и из сада надо забирать мобильную туалетную кабину, а то зимой сопрут.

Комментарии (5) »

  1. Den Kulikoff, 2008-11-03 @ 12:49

    Ту статью на Хабре писал во многом под действием эмоций (ну как только можно додумать так реализовывать некоторые вещи!) и о некоторых особенностях забыл упомянуть. В общем со всеми пунктами согласен, особенно не понятно зачем было так извращаться с файлами.

  2. yakodzun, 2008-11-04 @ 10:28

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

  3. Ruslan, 2008-11-13 @ 04:51

    А на первый взгляд казалось идеальной CMS и альтернативой битриксу...

  4. yakodzun, 2008-11-13 @ 07:44

    А разве это не так? Просто вы понятия не имеете что происходит в битриксе, если ему нужны специальные тарифы

  5. ShurStudio, 2009-11-10 @ 04:04

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

Оставить комментарий

Комментарии модерируются

Имя: (Обязательно)

E-mail: (Обязательно)

URL:

Comment:

Page generated in 0.0354 seconds with 11 queries (0.0268 seconds of sql)