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

Вопрос к профессионалам нэткэт

17.04.2015, 20:59
net.master
zmot.kz
net.master

Зарегистрирован:
2014-12-02
Сообщений: 17

Здравствуйте.

Нашел статью в нете по нэткэту, вкратце описывающую основные недостатки системы. Статья написана в 2008 году, меня интересует, сколько багов уже решено начиная с того времени (по состоянию на 2015 год)?

Вот выдержка из статьи:

Недавно на хабре опубликовали заметку "О том, как не надо делать сайты на 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.=\"...";

--------------

Полная версия статьи: http://blognot.su/2008/11/10-zapovedejj-razrabotchika-na-netcat/
04.05.2015, 20:35
Руслан Густокашин
Студия Вэлпис

Зарегистрирован:
2012-02-06
Сообщений: 962

Было бы хорошо, если Вы конкретизируете свой вопрос. С 2008го года в системе все кардинально поменялось, почти все указанные вещи уже не актуальны. Однако при неграмотном программировании можно напороться и на них.
198 196 2015-05-04 20:35:41 14130
Описание проекта