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

    Эта статья будет интересна прежде всего тем, кто в создании сайтов использует 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 (если они вдруг прочитают).
    Пожалуйста, избегайте запросов к БД в цикле. Особенно если заранее не известно сколько в нем будет итераций. Очень хотелось, что бы данные проблемные функции были переписаны. А так же, хорошо бы в документации для разработчиков отдельно указывать, если функция производит запросы к БД, сколько она их производит и какие есть подводные камни.
    Поделиться публикацией
    Комментарии 137
      +1
      Спасибо большое!
      Сегодня, несколькими часами позже как раз ожидает создание (доработка) сайта на NetCat, теперь, надеюсь, он будет на качественно высшем уровне.
      Быть может напишите еще что-нибудь интересное про данную систему? Хинты какие-нибудь или просто советы/мысли/идеи?
        +1
        Вот тут есть материал о том, как включить отладку SQL запросов и сделать эмуляцию кэширования «тяжёлых» блоков.
          +1
          Кто-нибудь смотрел, как в битриксе дела?
            0
            не сильно лучше
        +4
        Я анализировал NetCat и многие другие…
        Не только он один грешит этим.

        Я вообще не понимаю как можно терять контроль над количеством запросов…
        Как можно терять контроль над переменными, классами, функциями.
        Извините, скажу как разработчик — это все ошибки в архитектуре, изначально была заложена «ошибка»
          +1
          Согласен. Многие грешат, потому и написал, что это может быть интересно не только тем, кто работает с NetCat.
          А ещё важно понимать как оно всё работает там, внутри, а не просто складывать сайты как конструктор.
            0
            Например, почему не реализовать иерархию обьетов, а модули подключать контроллером в зависимости от иерархии, а не от модулей?
            Тогда не надо хуками вылавливать другие модули из вызванных модулей.
            Поставил флаги включения модулей и вызывай (плюс ко всему со своими правилами и параметрами), тогда же можно и вызвать модель view через контроллер.
            Тогда легче вести контроль над запросами и классами.
            А сейчас пока в cms-х наблюдаю разброд и шатание. Ну еще drupal как-то упорядочен и есть стратегия, хотя и там есть заблуждения в архитектуре.
            Короче эта отдельная тема топика в «Я пиарюсь» :)
            Только врядли напишу, после войн с детьми :)
            0
            Чем выше уровень абстракции, тем меньше контроль над количеством запросов. Это логично, и в этом есть свои преимущества.
            +6
            Если писать собственные запросы вместо стандартных функций, таки нахрена вообще этот неткат? Тем более для сложных проектов. Видел я пару таких… Если уж говорить начистоту, то для проектов с посещаемостью меньше 100 человек в день нет смысла изголяться, а больше — уже не неткат.
              +3
              Большая часть времени при разработке уходит на создание удобного back-enda. А в неткате он уже есть готовый. Да и написать пару запросов самому не такая уж тяжёлая задача. Особенно умеючи ;)
                +2
                На самом деле, я и имею ввиду удобный бэкэнд. Но он нужен не для того, чтобы в нём ломиком ковыряться. Мне просто на одном из мест работы пришлось делать сайты на неткат. И сделал я их порядка 30, пока не уговорил начальника пересесть на рельсы. Теперь потихонечку оргазмирую на рабочем месте от их крутости. А неткат — как страшный сон, иногда возвращается, чтобы добавить функционала к готовым проектам. Так что я знаю о чем говорю, товарищ :)
                  +2
                  Да я тоже знаю о чем говорю. Среди решений «из коробки» неткат не худший, особенно если хорошо его знаешь.

                  Я его не защищаю и не ругаю. Просто качество конечного продукта (сайта) во многом зависит от кривизны рук создателя, а не от инструмента, которым он пользуется.
                    +1
                    Главное вовремя прервать холивар…
                    ;-)
                      +2
                      Ой как точно замечено, после холиваров, потом уже ничего и не сможешь написать, даже если бы хотел
                      У нас сразу эмоционально тянутся к минусу в карме
                      :)

                      А потом спрашивают, а почему разработчики так мало пишут на habr-e топиков, у них наверно времени нет, или они такие крутые, что не хотят с нами разговаривать :)))

                      Сначал эти дети замордуют карму, а потом помощи просят :))
                    +3
                    рельсы и джанго наше все. Сейчас пытаюсь забыть как страшный сон друпал :)
                      +1
                      Да. В друпале запросы хорошо плодятся.
                      В джанго их намного проще контролировать. Где надо можно сделать select_related чтобы в цикле не тащить гору объектов.
                        +1
                        Особенно когда есть парочка-другая своих велосипедов для уменьшения запросов, которые не входят в стандартную поставку.
                      +1
                      вот пересели вы на рельсы… проекты видимо маленькие? или тонкую настройку проводили? у меня сайты на рельсах все таки медленно работают. три монгрел сервера на коредуо 2GHz (там еще парочка приложений, но они совсем маленькие)
                        0
                        На коредуо на одном серваке при нормальной оптимизации и кешировании даже пхп выдаст максимум 30к уников в сутки, опять же все зависит от крутости проекта. На рельсах такого же эффекта можно добиться на двух серваках. При этом времени на проект будет затрачено на порядок меньше. Железо дешевле, чем труд программиста. А сейчас еще ядра 1.9 и 2.0 подтянутся. 1.9 не сильно уступает пхп. Но разговор был совсем не об этом.
                          0
                          спасибо за ответ. что с кармой?)
                            0
                            Я слегка грубиян, знаете ли :) Меня как бы карма не беспокоит, это все мирское, а нада думать о душЕ :)
                    +1
                    Вы не совсем правы. На неткате есть проекты с неплохой посещаемостью. И они нормально работают. Просто надо всегда включать голову, чем бы ты не занимался.
                      0
                      Да это все понятно. Но для того, чтобы сделать что-то действительно стоящее на том же неткате, нужно приложить усилия, которые далеко не сопоставимы с оплатой за работу. Зато на руби — 50 строчек кода и 2 запроса к бд — блог с аяксовыми древовидными комментариями. Вот так вот :)
                        0
                        Спор о том что фреймворк лучше чем CMS? Или о чем?
                          0
                          Лев, для меня это спор о средствах разработки в целом.
                            0
                            Понятно. Но тогда это offtopic. Поэтому нестоит порождать очередной холивар =)
                          0
                          хоть 2 запроса, а система тормозит как от 100.
                          на php можно всё тоже самое реализовать, только нужно либо самому уметь, либо как в вашем случае, пользоваться правильными фреймворками.
                            0
                            Ну уж нет уж. Тормоза скрипта и узкие места — это две большие разницы. Все-таки общая производительность системы определяется количесвом этих самых узких мест. А для тормозов системы есть кеширование.
                              0
                              лан, про производительность было всердцах брошено, подкрутить можно что угодно. просто упоминание рельс, которые являются фрейморком с далеко не оптимальной скоростью работы, в контексте коробочной cms было неудачной идей. а приведённый пример можно реализовать на голом пыхе без проблем, тем более все мы знаем на чём написан самы популярны блоговый движок
                                0
                                Дак в том то и дело, что разговор был совсем не о производительности фреймворка или интерпретатора, а о производительности кодера. И удобстве использования системы. В современном мире счет идет на минуты и никто не имеет права тратить время на изобретение велосипедов. На голом пыхе :) И у фреймворка как раз производительность нехилая, его пишут умные люди. Тут проблема в интерпретаторе руби. А точнее, в особенностях синтаксиса и архитектуры языка.
                                  0
                                  да, проблема не в ROR, который мне местами очень импонирует.
                                  ты просто пытаешься сравнить фреймкорк с кмс. да, на роре можно быстренько написать форум, а кмс предпологает, что форум уже готов и его нужно только настроить. это проблема нашего бизнеса, что они пытаются доделывать кмс вместо того, чтобы писать систему сразу под себя. для визитки такой подход подходит, а для сложного проекта нет.
                                    0
                                    Все дело в том, что идентичные задачи редко встречаются. Следовательно — переписывание кода. Нестандартные задачи и рюшечки разные — переписывание кода. Для меня что фреймворк, что цмс — две стороны одной медали, два разных подхода, я не спорю что что-то подходит лучше для одних задач, а что-то для других, так и есть. Но в повседневной практике:
                                    а). Очень тяжело переключаться с одного на другое, если пытаться к каждой задаче подбирать инструмент
                                    б). Время разработки коррелируется, если выбрать что-то одно и не сходить с намеченного пути. Потому что распределение нестандартных задач и стандартных одно и то же на большом промежутке времени.
                                    Исходя из этих соображений, я имею право сравнивать фреймворк и цмс, как инструменты с идентичным предназначением.
                        • НЛО прилетело и опубликовало эту надпись здесь
                            0
                            В NetCate нет кэширования встроенного в систему, но это не значит, что имея прямые руки его нельзя сделать.
                        +2
                        я тут из-за 10 запросов то убиваюсь и выдумываю способы их уменьшить. Но 150…
                          +1
                          Мне и один то писать стрёмно О_о
                            0
                            И вообще, 10 запросов в каком то скрипте и 150 запросов в полной версии (все модули и предустановленный сайт, написанный пользователем) какой либо универсальной CMS — НЕ ОДНО И ТО ЖЕ!!!
                              –1
                              А где было сказано, что речь идет об одном скрипте. Это может быть вполне полноценный, работающий сайт, написанный на каком-нибудь 2z Project, как пример.
                                +1
                                Как пример открыв файл вывода статистики, в упомянутом 2z Project, насчитал как раз 10 запросов, некоторые к слову в цикле вызывались. Это только один файл на статистику, глубже ковыряться уже не хочется.
                            0
                            Может лучше забыть о NetCat и использовать Drupal?
                              +4
                              если бы этим грешил только НетКат, то такое решение было бы верным.
                              Автор призывает «включать голову», а не собирать проекты из копипаста
                                –3
                                Поставь друпал и десяток плагинов, получишь такое-же количество запросов. Лучше забыть о друпале…
                                  –1
                                  Запросы в друпале не самое страшное. Куда хуже апдейты. Более-менее сложный content type на CCK при апдейте друпала/модулей выдает тыщу проблем.
                                    0
                                    В принципе — там есть и хуже проблемы ;). Но стадо идет за тем, кто указывает — поэтому и минусы.
                                  +2
                                  Разговор о том чтобы включить мозг, а не заменить его!
                                  +4
                                  P.S. Обращение к разработчикам NetCat (если они вдруг прочитают).

                                  Насчет документации — спасибо за совет, сейчас полностью переписывается Руководство разработчика к версии 4, идея хорошая, учтем. Кстати, сейчас среди партнеров проходит закрытое тестирование кеширования, в следующей версии оно уже будет.
                                    0
                                    Я получал письмо, но по ссылке, что в нем мне сказали, что у меня недостаточно прав :(
                                    Какой-то я бесправный партнер :)
                                      0
                                      Только выходит кеширование на бета-тестинг :)))? %)

                                      Да на нормальной icms, с точки зрения архитектуры, кеширование реализовывается таким же модулем, например в моем проекте, нет «хуков» кеширования в ядре, все реализовано, очень просто, контроллер вызывает модуль кеширования и всё :) Причем вызвать вы можете в любой части иерархии обьектов, и кешировать как блок, так и вызов модуля в блоке? отдавая результат куда — ну правильно в модель view :)))
                                      –4
                                      долго пытался понять, при чём здесь netcat
                                        +2
                                        Баян уже. Как не тема про NetCat — обязательно кто-нибудь просит.
                                          0
                                          Капитан Очевидность никогда не спит!
                                        +1
                                        А я первым делом подумал о системной утилите netcat ) Где-то на Хабре проскакивала информация о том, как с её помощью сделать простенький сайт.
                                          +1
                                          тоже появилось желание поругать название
                                          еще бы они grep'ом обозвались
                                          +2
                                          Очень очень верное замечание автора, о том что голову нужно включать при разработке проектов. Особенно используя NetCat, которая (в некотором смысле) позиционирует себя как «универсальная» CMS. То есть пригодная для разработки любых проектов. Я полагаю что такая архитектура предполагает некий избыточный функиционал. Я думаю всем понятно, что ручками можно сделать все оптимальней и круче — но! только под один конкретный проект — Чудо оптимизированный запрос/таблицу/процедуру e.t.c
                                            0
                                            А кеш зачем? Или его там нет?
                                            +2
                                            У меня остались только негативные воспоминания после использования этой системы. Сам являюсь разработчиком и многое просто приводило в ужас — как неудобно. Такое ощущение, что она полностью делалась для программистов, а для простого клиента изменить, скажем, порядок в шаблоне — подобно пыткам.
                                              0
                                              ммм… что есть порядок в шаблоне?
                                                +1
                                                ну порядок вывода элементов в списке тех же публикаций.

                                                я уже не говорю о постоянных escap'ах при каждом чихе.
                                                  0
                                                  А что не так с порядком вывода? Тем более, что этот порядок задаётся совсем не в шаблоне…
                                                    0
                                                    А вы скажите это заказчику, когда он хочет чтобы каждая вторая новость уходила с padding-left: 20px, и подствечивалась в другой div.
                                                      0
                                                      Элементарно, в компоненте анализируете четность/нечетность объекта и ставите нужные классы к дивам. В других ЦМС это делается по-другому? Она сама догадывается куда ей пихать классы и по каким условиям?
                                                        0
                                                        Может с 2006 года всё поменялось?

                                                        Нам хватило extract, когда сайт хакали через /missing.html?_SERVER[DOCUMENT_ROOT]=http://www.macbuff.com…

                                                        До сих пор на сайт идут такие атаки, вот только что забанил ещё одну подсеть.
                                                0
                                                Знаете этим грешат 90% cms.
                                                На модель view они забивают…
                                                Особенно мне «нравится» таскание кода через все модули и ядро, за такое вообще руки надо вставлять в другое место.
                                                Да когда вы поймете, что таскать через ядро и модули надо только данные. Потом обработанные данные отдать контроллером во view, где тоже продумать модель view, а не отдавать на растерзания шаблонизаторам…
                                                сначала архитектурно описываем модель view а потмо передаем только шаблонизаторам или любому на вывод.

                                                Если изначально подойти к разработке архитектуры под пользователя (особенно работы с темами и моделью view) — вы забракуете 99% cms.
                                                P.S. кстати я изначально начал закладывать в своей архитектуре такую модель поведения.
                                                  0
                                                  каждый кодит как хочет, вот и конкуренция

                                                  лично у меня даже не CMS, а просто движок — крутит модули по карте, а модуль делает что угодно — вплоть до запуска баллистических ракет.
                                                    0
                                                    Скажите пожалуйста что есть «таскание кода» через все модули и ядро
                                                      0
                                                      ну может имелось ввиду передача ссылок на функции как параметры для функций ядра и модулей?
                                                  –1
                                                  ИМХО, советы малоадекватные, т. к. я как разработчик должен кишки системы знать.

                                                  Значит система кривая!

                                                  Если я юзаю систему, она должна быть для меня юзабельна, а не я для нее.

                                                  И ни хочу даже ничего слушать! :)
                                                    +2
                                                    Вы в любом случае должны представлять как и что работает, что бы на выходе получить адекватный результат. Ибо за любую универсальность приходится чем-то расплачиваться. Вы должны представлять чем и как.
                                                      +1
                                                      Абсолютно согласен, профессионал отличается от непрофессионала как раз пониманием своих действий.
                                                    +1
                                                    «нормальное дело» для больших цмс. 1-2 сотни запросов это норма если вы используете обвешаный друпал или джумлу (про остальные, правда, не знаю). Спасает кэширование, есть мысль что если требуется не по-быстрому состряпать default_site, то лучше фреймворки
                                                      –1
                                                      :)

                                                      200 запросов это нормально? Вы так думаете или делали проекты, потом проводили тестирование на нагрузке...?

                                                      200-я запросами при выводе, пусть даже и простыми вы положите сервер за раз. Вам и кеширование не поможет.

                                                      Уж извнините, я бы уменьшил порядок до от 30 до 50 при хорошем (тяжелом) проекте ну и плюс все виды кеширования, от пассивного до активного.

                                                      И что такое «больших cms» — монстров с неправильной архитектурой? Поэтому они и превратились в монстров, потому что ни архитектуры не было, ни стратегии, просто куча кода…
                                                        0
                                                        Лично видел проект с 1200+ запросов/страницу и сервер жил :) Плохо, но жил.
                                                          +3
                                                          Обходите стороной разработчиков того проекта ;)
                                                            0
                                                            Разве это жизнь?..
                                                              0
                                                              1200+ это клиника уже…
                                                              Это нверно не веб, это скорее всего какая-нибудь бухгалтерия… им все равно за сколько отдавать данные.
                                                              Умножте кол-во запросов на среднее время выполнения… вы думаете юзер будет ждать больее 10 секунд открытие страницы?

                                                              Все заканчиваем холивар…
                                                              Видел и делал — разные вещи.
                                                              Читаем и учим мат. часть, особенно по поводу оптимизации запросов + высоконагруженные БД
                                                              И хорош срать в карму, без аргументов.
                                                                –1
                                                                Это не жизнь, это — существование :)
                                                                0
                                                                Количество запросов от нагрузки не очень зависит (Ну друпал может переводится, в режим экономии и опятьже много кэшировать, но все равно оптимизации кода на лету пока не придумали, а ленивых я не припомню для цмсок:). Поставьте друпал, модуль views (очень популярный), забейте немного данных и вьюху для них и модуль devel вам все покажет. Не так давно в интенетах пробегало сравнение техже друпала и джумлы и друпал при таких вот показателях оказался более экономным. По поводу того что мне что-то там не поможет: в CMS обычно кроме базы стандартных и необходимых модулей есть еще определенный API. Т. е. конечно можно лезть в ядро и переписывать все подряд или изобретать свои оптимизированные велосипеды, но это все потом придется поддерживать и может быть даже обновлять. Архитектура у джумлы и друпала вполне себе нормальная (кому-то нравится кому-то нет, но стройная система с которой работают много много разработчиков везде присутствует), просто они универсальны сразу имеют много наворотов (вроде интернационализации, расширяемости, подсистем модулей и шаблонов и много т. п.) отсюда и оверхеды такие.
                                                                +1
                                                                1-2 сотни запросов — это не нормально при любом раскладе!
                                                                  0
                                                                  ага, такая вот хреновая «нормальность» :)
                                                                +1
                                                                Не уверен, что те кто делали сайт вообще обращали внимание на скорость. И даже в ужас не надо приходить — вам ведь заплатят за оптимизацию, а им — нет. Закономерное развитие событий. Если бы все сайты изначально делали хорошо, они бы стоили очень дорого и не факт что вообще бы появились.
                                                                  0
                                                                  Вы это серьёзно?
                                                                  Это же веб — закон таков: юзер за 5 секунд не увидел страницы, он оттуда сваливает!
                                                                  (читаем маркетинговые исследования)

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

                                                                  Лучше не отвечайте на этот пост :) а то опять подымится холивар :))
                                                                  0
                                                                  150 это не так много :)
                                                                  Делал я как то интернет-магазин на Koobi, так там более 400 запросов было на страницу. По началу всё быстро летало, но по мере роста количества товаров(сейчас >30000) и категорий (сейчас ~20) начало страшно тормозить. Вылечилось созданием дополнительных индексов, кешированием запросов и переписыванием некоторых процедур (были запросы в цикле).
                                                                    0
                                                                    Не знаю. Когда в моих проектах, которые писались «с нуля», число запросов доходило до 20, то я начинал нервничать :)
                                                                    Но тут увы, любой фреймворк и любая cms во многом избыточны и приходится таскать за собой некоторые ненужные вещи, расплачиваясь за некоторое удобство.
                                                                      0
                                                                      Я тоже поначалу волновался, остановился на исследованиях, где тяжелые запросы надо разделять, но кол-во не должно превышать ~50 при 10-15 блоках без кеширования.
                                                                      В принципе легкие запросы на выборку сильно не положат базу, другое дело, когда потерян контроль этих запросов…
                                                                      Я тяжелою логику раздели на пару запросов, этого достаточно. Все же left join на большом наборе данных нагружает сервер сильнее.
                                                                      Еще пользуйтесь union, только не переборщите… в итоге вы должны получить не более 50 запросов, дальше (порядок) уже начинается нагибание сервера.
                                                                      –2
                                                                      Когда вы сказали про koobi — дальше можно и не продолжать…
                                                                      Качественный код (ну понятное дело — немцы)
                                                                      и ужасная архитектура (понятное дело — войну нам стратегически проиграли)

                                                                      Когда вы выбираете cms, в первую очередь смотрите на архитектуру проекта, потому что при большой нагрузке — выплывают все ошибки архитектуры.
                                                                      Кстати 30000 товаров это не так и много, и уже на 30000 так безбожно тормозит?
                                                                      А теперь представьте 1M записей, без особой нагрузке со стороны юзеров? а если + нагрузка… не помогут никакие дополнительные серверы… а koobi то платный… а вы уже сделали под него проект! что делать!? кричать help? поздно, надо на начальном этапе анализировать долго и со специалистами.
                                                                        0
                                                                        Я разве не прав имхо?
                                                                        Опять аргументов нет… не будьте троллями — аргументируйте свои действия.

                                                                        Зацепили вашу любимую игрушку? Для этого и существуют соц. сети чтобы обсуждать.
                                                                          0
                                                                          Не бывает панацеи, особенно сложно увидеть на начальном этапе все подводные камни конкретного решения. Проблемы нужно решать по мере их поступления, сегодня сайт — новости и гостевуха, завтра — магазин, блоги, облако тегов и новости с возможностью вывода связанных объектов. Оптимизация отдельная тема, при правильной реализации это очень эффективно, для любых web проектов.
                                                                      0
                                                                      По поводу сделано для программистов, а не для пользователей.

                                                                      Написать код под всех пользователей — не представляется возможным! Нужно точно знать где требуются усилия разработчика сайта, а где правки пользователя.

                                                                      Я так понимаю автор топика тестировал полную версию системы со всеми включенными модулями, с предустановленным готовым сайтом из пакета инсталляции, которые сделан для того чтобы показать максимально раздутые возможности системы, а не для реального использования.
                                                                        0
                                                                        Автор топика не тестировал, а приводил в чувство работающий проект, который был сделан человеком, почитавшим документацию по NetCat, но не понимающим суть некоторых вещей. Во много в этом вина документации где не сказано о подводных камнях подходов, которые там рекомендуют.

                                                                        И я попытался донести некоторые вещи до общественности. Возможно это поможет кому-то обойти стороной те же грабли.

                                                                          0
                                                                          Это многое объясняет, когда дело делается без осознания оных действий — получаются кривые вещи) Эдак можно любую CMS испохабить нагромождением неправильно заюзанных функций.
                                                                          0
                                                                          Маленький вопрос разработчика… :) не netcat конечно же. У меня своя готова.

                                                                          А если вам не надо писать код, а создать правила (ну как в outlook express или mozilla tb — фильтры для почты, такого плана) —
                                                                          так вы сможете общаться с cms?

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

                                                                              habrahabr.ru/blogs/webdev/43485/#comment_1080190
                                                                                0
                                                                                да
                                                                                  0
                                                                                  мнения одинаковые :)
                                                                              0
                                                                              Тут уже вопрос реализации функционала и возможностей архитектуры, не думаю что можно создать архитектуру которая позволит делать всё, рано или поздно появится задача не решаемая стандартным API системы.
                                                                                –1
                                                                                Конечно же, но представьте вы можете из cms простыми правилами — не лазя в код сделать соц. сеть или форум!
                                                                                Причем правила действительно простейшие — они для управления контроллером (спасибо mvc :)
                                                                                Как вам такое?

                                                                                Если же уж очень специализировано и «плохо» — подключайте как обычно модули :)
                                                                                  0
                                                                                  Отлично, жду с нетерпением сабжа для тестирования)
                                                                                    0
                                                                                    Да я бы давно написал бы уже в «Я пиарюсь»
                                                                                    Да после войны с троллями и кармадрочерами карма с 28 упала до минус 2,75
                                                                                    Только мне от этого не хуже… :)))
                                                                                    Хуже скорее тем кто минусовал, ну и ресурсу, а так же действительно тем кто хотел бы увидить что то новенькое…

                                                                                    После инвайтов будет и того хуже (уже заметил), я обычно не боюсь потерять карму, не ею живу :) Не мне от этого плохо.
                                                                                    Реальных аргументов я вижу очень мало — одни эмоции. А с другими разработчиками по вопросам технологий я общаюсь черз icq и т. п.

                                                                                    Здесь меня интересует обратная связь с пользователями, как им было бы легче работать и понятливее.
                                                                                      +1
                                                                                      В споре рождается истина)
                                                                                    0
                                                                                    >> представьте вы можете из cms простыми правилами — не лазя в код сделать соц. сеть или форум!

                                                                                    Ну нафик. Потому, что там обязательно будут грабли, залежи граблей. Так бывает всегда, когда пытаются сделать супер-пупер-мега-гипер универсальное решение.
                                                                                      0
                                                                                      Rule Based CMS — фича такая будет)
                                                                                        0
                                                                                        Только автор не договаривает, что по настоящему сложный функционал придётся описывать довольно сложными правилами (серебряных пуль-то не бывает), а стало быть разработчику придётся учить новый язык (язык этих правил) и вылавливать блох в интерпретаторе этих правил (программ без ошибок тоже не бывает). Шило на мыло может выйти, php-over-php :).
                                                                                          0
                                                                                          Зачем?
                                                                                          Я не зря пытаюсь сделать легкую в понимании для именно пользователя. (кстати и разработчика тоже, чтобы ему им легче было писать модули, шаблоны, темы)

                                                                                          Вам тяжело например сделать правило для фильтра почты в outlook express?
                                                                                          Почти тоже самое и там.
                                                                                          Никаких языков!!! зачем? вы правильно сказали, никаких заморочек.

                                                                                          Заложено не в правилах? правила лишь расширяют возможности.
                                                                                          А в совершенно другой архитектуре cms, она не похожа не на одну.

                                                                                          Зачем мне как взрослому человеку создавать клон… я уже не в том возрасте. Просто свои навыки 15 лет программирования в десктопах (в основном БД) я перенес в веб.

                                                                                          Здесь толькое «новое» найдет себя на рынке. Я анализировал более 50 основных cms в течении года!
                                                                                          Да согласен есть пару моментов тяжелых в понимании, но самое главное что я ничего не выдумывал я взял самое лучшие из десктопных приложений, с которыми вы сталкиваетесь каждый день, поэтому имхо ничего тяжелого в понимание вы не найдете.
                                                                                            0
                                                                                            Я с аутлуком не знаком, знаком с TB. И в TB по-настоящему сложные фильтры сделать просто нельзя. К тому же, фильтры для почты это совсем не то, что какая-нибудь хитрющая иерархическая соц-сеть с взаимодействием с внешними (не-http) ресурсами. Даже метафорически.
                                                                                              0
                                                                                              Ну почему, сам пользуюсь ТВ, супер сложностей там нет, там интуитивно понятно все, есть моменты, но они быстро находятся, что самое главное.
                                                                                              Ну, я не сказал фильтры, я бы сказал стратегия создания правил.
                                                                                              Дело в том что iCMS изначально создавалась как иерархическая система, а не реляционная, это было мне тяжело реализовать систему, а вот пользователям от этого только легче будет.
                                                                                              Да кстати, в cms более 50 обращение к БД на страницу нет :)
                                                                                              время выполнения всех запросов порядка 0,05 сек. вместе с php без кеша 0,1 cек.
                                                                                              Кеширование реализовано модулем! есть как активное — всего блока, так и пассивное (результатов запросов — его планирую убрать, ну не нужно оно, хватает и активного с головой, кеш и на активном можно обновлять при получинии изменения обьекта сущности)
                                                                                                0
                                                                                                > Ну почему, сам пользуюсь ТВ, супер сложностей там нет

                                                                                                Сложностей нет, никто не спорит. Только сложное правило сделать там нельзя.

                                                                                                Ну покажите её скорей.
                                                                                                  0
                                                                                                  Работу? Или уже весь код ;)
                                                                                                  Код не покажу, пока полностью не допишу.
                                                                                                  На счет бета-тестирования можно рассматривать этот вопрос, это в личную, есть опрделенные требования к тестировщикам, одно из них «Соглашение о неразглашении»
                                                                                                    0
                                                                                                    Код, естественно.

                                                                                                    з. ы. Кстати, застрахована ли эта система от «умелого» разработчика, типа описанного в посте? (это к вопросу о то, что ваша цмс не делает более 50 обращений к БД на страницу)
                                                                                                      0
                                                                                                      Вы врядли сможете сможите привысить эту планку :)
                                                                                                      Основы API сделаны, вам достаточно будет пользоваться вызовами API.

                                                                                                      Разве что если напишите свой модуль «доставания» данных из БД или напишите его не по документации, но вы сразу обнаружите ошибку, контроллер строго сигнализирует если правила выполняются неправильно, или он запутался в них, или если для одного вызова существуют несколько правил. Т. е. вы сразу всё увидите.
                                                                                                      Вам останется только подправить правило, мало того даже правило можно изменять из front-end-a, я уже не говорю про редактирование контента и редактирование шаблона. Можно даже реализовать и добавление правила прямо из фронта, для конкретного блока (обычным модулем). Не забываем это иерархическая система — заблудится в ней — просто не реально. Всё подчиняется дереву контента.

                                                                                                      Кстати а изменять запрос можно прямо из редактирования правил :) Это для стандартного модуля и там всего 5 параметров. Контроллер — это мозг (engine).
                                                                                                        0
                                                                                                        Не понял. Мне нельзя из модуля общаться с БД? Если можно, то все проверки идут лесом, потому что я могу написать рекурсивную функцию, например, в которой на каждом шаге рекурсии лезть в БД за тройным лефтджойном.

                                                                                                        Понятно, что такое может прийти в голову только идиоту, но практика показывает, что такие существуют. Поэтому, выражение «наша ЦМС не генерирует более 50 запросов на страницу» не верно.
                                                                                                          0
                                                                                                          Ну почему нельзя :))) Своим модулем можите сколько хотите или «ломать» стандартные…
                                                                                                          я имею ввиду из правил — вам просто не зачем, да и по вопросам безопастности тоже.

                                                                                                          Делайте свой модуль, подключайте (но запомните пока вы его в правилах не включите — он у вас даже подключаться не будет) — там хоть 20 кратный лефтджоин, главное чтобы вы чувствовали себя хорошо :))
                                                                                                          Поломать можно и японскую бензопилу, как в анекдоте :)
                                                                                                      0
                                                                                                      Если код нельзя по каким-то причинам, то пару примеров правил для какого-нть простенького форума/инет-магазина/новостного портала по вкусу, наверное можно рассекретить?
                                                                                                        0
                                                                                                        Вы в TB правила пишите? Я ж говорил не каких интерпритаторов и языков правил, там все очень легко.
                                                                                                        Просто правила записываются (компилируются, если можно это так называть) в БД для контроллера.
                                                                                                        Дамп базы показать? :)) Это почти как код, подождите немного ;)
                                                                                                          0
                                                                                                          Нет, зачем мне дамп. Мне нужен просто пример набора правил. Чтобы оценить, так сказать.
                                                                                                    0
                                                                                                    Есть ли возможность частичного кэширования? Например большой объём данных в котором периодически изменяется только одна какая нибудь связанная строчка. Можно кэшировать всё кроме этой строчки, а строчку обрабатывать при отдаче кэша?
                                                                                                      0
                                                                                                      Ну… реализовать memcached вам никто не запрещает :)
                                                                                                      Или написать модуль к cms, сейчас реально такой возможности нет (такого модуля)
                                                                                                      Это уже потом после релиза, и так времени не хватает, уж больно оширный проект получился
                                                                                              0
                                                                                              Это что такое RB CMS? Такая в разработке?
                                                                                              Пока свою технологию назвал iCMS, CMS уже имеет и название и уже куплен домен в зоне .com
                                                                                              И уже крутит тестово сайты (пока не буду говорить какие, надо еще рефакторить код)
                                                                                              Кстати на 99% готова.
                                                                                              Немного надо порефакторить код, на предмет безопастности и «красоты» кода, все же писалась она 1,5 года (жаль только в свободное время)
                                                                                              Выпускать на рынок не собираюсь пока не будет документации, схем архитектуры и описания API, ну и конечно же рефакторинга. Т. е. еще работы хватает.
                                                                                              Кстати будет она open source. (не для себя делал)

                                                                                                0
                                                                                                Rule Based CMS — как вариант названия вашей разработки, можете использовать, если понравилось) Когда речь заходит о рефакторинге ещё не выпущенного продукта — в голове рождаются не очень приятные мысли, хотя кто знает.

                                                                                                Дональд Кнут: «Многие беды программирования проистекают от преждевременной оптимизации».
                                                                                    0
                                                                                    Rule Based CMS — как вариант названия вашей разработки, можете использовать, если понравилось) Когда речь заходит о рефакторинге ещё не выпущенного продукта — в голове рождаются не очень приятные мысли, хотя кто знает.

                                                                                    Дональд Кнут: «Многие беды программирования проистекают от преждевременной оптимизации».
                                                                                      0
                                                                                      :) спасибо
                                                                                      Обычно в конце работы над проектом — код всегда просматривают и тестируют на возможные, замечу возможные, ошибки в безопастности.
                                                                                      Часто отдают специальным фирмам, специализирующимся на рефакторинге кода (сам разработчик видит свою работу другими глазами), жаль дорого :)
                                                                                      Хуже наоборот, когда выпускают продукт и понятия не имеют о рефакторинге.
                                                                                      Когда я писал код, конечно же думал о безопастности в первую очередь!
                                                                                      Поэтому iCMS имеет разделение прав как по группам, так даже конкретно к определенным юзерам, как acl так и unix подобный вариант для иерархических обьектов, с наследование прав. (это все уже реализовано и работает)
                                                                                        0
                                                                                        Будет здорово, если получится так как написано, но это уже как говорится со временем видно будет.
                                                                                          0
                                                                                          Уже работает, проходит закрытое бета-тестирование.
                                                                                          Все стандартные функции cms реализованы уже давно :)
                                                                                          Сейчас как раз тестирую расширения возможностей, понятливых для юзера, чтобы он своими руками мог сделать например соц. сеть из cms, причем юзеров не знающих php :)
                                                                                            0
                                                                                            Мне кажется название iCMS будет весьма популярно среди поклонников прочих продуктов на i. Стоит только уточнить не забиндена ли (TM).
                                                                                              0
                                                                                              Это название технологии
                                                                                              hCMS как-то не звучит, я исходил с буквой «i» из названия «иерархическая» русского языка :))) да и если вызвать google: 3 лимона найденных
                                                                                              … а cms имеет другое название, исходя из маркетинговых целей, домен уже куплен в зоне .com, звучит прикольно, даже дети поймут :)))

                                                                                              Да забыл сказть. CMS изначально задумана как многоязыковая, многосайтовая, тест сайт крутится на 2 языках (там версия 6 мес. назад) — на локалке на трех. Переключается на другой язык очень лекго — сразу переходит на копию страницы в другом языке.
                                                                                              При этом например комменты совершенно другие, т. е. относящиеся к вызванному языку.
                                                                                              В качестве js fw используется jquery, в качестве редактора fckeditor (хотя можно подключить любой), в качестве php fw — не один не подошел, все же архитектура совсем другая, хотя много опыта из них взято.
                                                                                                0
                                                                                                Насколько разумно выводить комментарии на текущем языке, остальные будут отметаться?
                                                                                                  0
                                                                                                  Вы можите задать правилом, вывести на всех языках :)
                                                                                                  Устнавливаете параметр «all» и вперед — если параметр не определен "" то выводится на действующем языке, если надо вывести конкретный (только зачем, когда по умолчанию выведет то что надо) вы можите указать язык. — например так как вы обзовете сущность корня для всего дерева. Например «ru», «en» и т. п.
                                                                                                  Там всего один параметр. Просто может повториться копия другого языка (all) плюс оригинал, хотя обычно такое врядли бывает :)))

                                                                                                  Это тяжело вообще-то на пальцах обьяснить — поверьте с языками там вообще проще простого.
                                                                                                    0
                                                                                                    Да забыл и у каждого модуля под каждую тему могут свои шаблоны вывода! Т. е. вы можите их редактировать и изменять, дополнять, да короче делать что хотите.
                                                                                                    Или если нет такого шаблон вывод из темы по умолчанию :))

                                                                                                    Что хочется реализовать… то что сделал MySpace — когда юзер для себя может загружать свои темы %) потом показывать свои страницы, дополнять виджетами и т. п.
                                                                                                    в реализации сложного нет ничего (архитектурно заложена), там только вопрос безопастности (парсер надо правильно настроить, но так чтобы юзер мог много чего себе позволить и не опустить владельца)
                                                                                        0
                                                                                        Да, насчет выхода статьи здесь — вы врядли увидите.
                                                                                        Тролли как обычно не дают выйти в плюс :)
                                                                                        Как выложу движок на свой домен, сначала организую там блог, там много и увидите, до выхода официального релиза.
                                                                                          0
                                                                                          Рефакторинг рулит
                                                                                            0
                                                                                            Кто бы «левый» профессионал в своем деле еще помог немного «поломать» cms :) при этом этом соблюдая «соглашение о неразглашении» + заодно помог в рефакторинге.
                                                                                            Ну например модулей (их уже 37)
                                                                                            +1
                                                                                            прикольный получился PR — для iCMS :) а вы говорите — тролли, тролли ;)
                                                                                              0
                                                                                              Как система — хорошая, удобный интерфейс к БД радует, но апи и в особенности вложенные функции — просто ппц .

                                                                                              И как только сотовик на нем сделали… оО
                                                                                                0
                                                                                                Вопрос к автору статьи по поводу пункта «Будьте аккуратны в использовании компонентов с полем «Файл».

                                                                                                Подскажите, каким образом всё же выводить объекты, в которых есть несколько файловых полей, чтоб уменьшить количество запросов?
                                                                                                  0
                                                                                                  Стараться избегать этих полей.

                                                                                                  Можно переписывать логику работы в соответствующих местах исходников. Но вносить изменения придётся, скорее всего, после каждого обновления версии.

                                                                                                  Можно написать свою функцию вывода подобных компонентов. Запрос там, естественно получится с join'ами. Затем создать дополнительный компонент, где в префиксе сделать вызов этой функции с необходимыми параметрами и именно этот компонент прикреплять к странице где нужен вывод объектов с файловыми полями.
                                                                                                  0

                                                                                                  Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                                                                                  Самое читаемое