И черт меня дернул написать материал «Фреймворки — больше минусов чем плюсов». Точнее назвать материал именно так. Пылился он себе, пылился в песочнице, но вот в прошлом месяце его оттуда извлекли и… такого количества комментариев я не ожидал.
Сразу стало понятно, что ответить всем не получится. Честно попытался сделать, но быстро сообразил, что проще написать еще один материал. Чем сейчас и занимаюсь. И так.
Ответ на первый вопрос.
Нет, я не пытаюсь никого учить. Как минимум мне за это не платят. А делать столь тяжелую и, зачастую, неблагодарную работу бесплатно я не намерен. Так что здесь я просто высказывают своем мнение, с которым каждым может либо соглашаться, либо нет.
Ответ на второй вопрос.
Наши проекты. Не уверен, что здесь можно размещать подобные ссылки. Потому, если интересно, напишите мне в личку, скину их там.
И третий вопрос — самый интересный.
Наши инструменты. Ответ на этот вопрос, как мне кажется даст ответы и на все остальные. Потому здесь поподробнее.
Как правильно сказал Dinver, под те требования, что я пытался выдвинуть в отношение инструментов, для WEB разработки, подходят 90% микрофреймворков. Да именно так! Я не против вообще всех фреймворков. И не против инструментов, облегчающий разработку и снижающих ее время. Собственно об этом я писал в первой статье, но почему-то большинству бросился в глаза только заголовок. И более того — мы сами используем такой инструмент.
Не буду сейчас углубляться в сравнение существующих микрофрейворков. Это тема для отдельного большого материала. Хочу лишь сказать — писать свой нас заставило не то, что в существующих чего-то не хватает, а то, что на момент, когда в них возникла необходимость, а было это уже больше 10 лет назад, стоящих мы найти не могли. Сейчас положение вещей изменилось, но это уже, как мертвому припарка. Теперь то, что есть у нас, мы считаем ни чуть не хуже, а во многом даже лучше, аналогов. Конечно это дело вкуса, но то что для нас наш инструмент более удобен – наше мнение на которое мы тоже имеем право. А вот почему он нас устраивает, постараюсь продемонстрировать.
Во-первых, в основе всего лежит написанный нами gem для Ruby. И написан он на чистом Си.
Да именно так. Когда количество законченных проектов было уже достаточно существенным и пришло понимание, что 50% кода просто кочует из проекта в проект, мы решили не просто систематизировать свои наработки, а сделать их лучше и быстрее. А, что работает быстрее, чем код на Си? И, что может быть более дружелюбно к программисту, чем язык Ruby, созданный Matz-ом именно с целью облегчить наш труд?
Как следствие, сейчас с одной стороны производительность работы выросла в разы. А с другой, время отклика любой страницы написанных нами проектов укладывается в 300-500 mc при любых нагрузках. При этом, конечно, нужно упомянуть, что мы используем и своей application server, так же написанный на Си.
Для примера привожу скрин страницы одного из наших проектов. Это crn для типографий, позволяющая управлять, как процессом приема заказов, так и всем производственным циклом. На скрине страница списка заказов. Весь список не видно, но поверьте он достаточно внушительный. При этом по каждой записи выдается не только название и дата, но и краткая статистика. А именно: сумма оплат, перечень продукции, стоимость материалов по каждой, данные покупателей. Одним словом для формирования этой страницы приходится выполнять больше полусотни запросов. При этом время отклика 395 mc, а размер gem-a меньше метра
Если Вас все выше изложенное не заинтересовало, то дальше можно не читать. Дальше будет просто небольшое описание. Совсем, совсем краткое. Если же кого-то оно заинтересуют, готов предоставить полную документацию. Здесь это вряд ли уместно.
И так. В gem-e, о котором я упомянул, собраны классы и функции, что мы используем чаще всего.
Главный класс носит название Vdcgi. При его инициализации происходит:
Второй по значимости класс — VdMainapp. Вот некоторые функции это класса
Перечислять все функции и классов смысла здесь нет. Упомяну только основной функционал
VdUser – работа с данными пользователя
VdKassa – все связанное с платежами и финансами.
VdVideo – для погрузка видео по ссылкам
VdNet – сетевые функции
VdAdmin – функции администрирования
VdImg – капча и фото
VDArcticle – все что нужно для добавления на сайт текстовых материалов
VDMessages – все для чатов, тикетов и т.д
Все выше перечисленное – очень, очень скромное даже не описание того, что есть. Однако, думаю, даже из него Вы поняли – только лишь gem-ом тут дело не ограничивается.
Действительно кроме самого gem-a есть еще:
А еще есть cкрипт instal.rb который все это разворачивает по вашему запросу.
При запуске последнего Вам нужно будет указать директорию проекта и параметры подключения к базе данных. После чего в указанной директории вы получаете все необходимые файлы, а на вашей локальной машине сконфигурированный сервер nginx и фактически работоспособный сайт с минимальным набором страниц и админ панелью. В последнюю можно попасть с логином/паролем admin admin. Внутри Вы сможете добавить остальные страницы, определить их вложенность указать для каждой сео информацию. Ну а дальше – полная свободна творчества.
Еще раз хочу подчеркнуть. Вопреки мнению некоторых, комментировавших первую статью, я не пытаюсь никого учить. Я даже не пытаюсь не то что навязывать, а даже предлагать работать с нашим инструментом. Хотя он есть в открытом доступе на нашем сайте, но всегда рассматривался только для «внутреннего потребления». Схема была проста – если какой-то функционал присутствовал более чем в 3 проектах, мы переписываем его на Си и добавляем в gem. При этом ни кто не старается навести особую «красоту». Как следствие, если рассматривать его как нечто, что я мог бы предлагать всем, то нужно признать, что проект достаточно сырой. В нем много чего не хватает. Например нет поддержки PostgreSQL (которую, кстати уже пишем) и еще ряда полезных «плюшек». Потому, если у кого-то есть желание познакомиться поближе, – милость просим, но только, как говорится, «под вашу ответственность».
Сразу стало понятно, что ответить всем не получится. Честно попытался сделать, но быстро сообразил, что проще написать еще один материал. Чем сейчас и занимаюсь. И так.
Ответы
Ответ на первый вопрос.
Нет, я не пытаюсь никого учить. Как минимум мне за это не платят. А делать столь тяжелую и, зачастую, неблагодарную работу бесплатно я не намерен. Так что здесь я просто высказывают своем мнение, с которым каждым может либо соглашаться, либо нет.
Ответ на второй вопрос.
Наши проекты. Не уверен, что здесь можно размещать подобные ссылки. Потому, если интересно, напишите мне в личку, скину их там.
И третий вопрос — самый интересный.
Наши инструменты. Ответ на этот вопрос, как мне кажется даст ответы и на все остальные. Потому здесь поподробнее.
Как правильно сказал Dinver, под те требования, что я пытался выдвинуть в отношение инструментов, для WEB разработки, подходят 90% микрофреймворков. Да именно так! Я не против вообще всех фреймворков. И не против инструментов, облегчающий разработку и снижающих ее время. Собственно об этом я писал в первой статье, но почему-то большинству бросился в глаза только заголовок. И более того — мы сами используем такой инструмент.
Откуда ноги растут
Не буду сейчас углубляться в сравнение существующих микрофрейворков. Это тема для отдельного большого материала. Хочу лишь сказать — писать свой нас заставило не то, что в существующих чего-то не хватает, а то, что на момент, когда в них возникла необходимость, а было это уже больше 10 лет назад, стоящих мы найти не могли. Сейчас положение вещей изменилось, но это уже, как мертвому припарка. Теперь то, что есть у нас, мы считаем ни чуть не хуже, а во многом даже лучше, аналогов. Конечно это дело вкуса, но то что для нас наш инструмент более удобен – наше мнение на которое мы тоже имеем право. А вот почему он нас устраивает, постараюсь продемонстрировать.
Суть
Во-первых, в основе всего лежит написанный нами gem для Ruby. И написан он на чистом Си.
Да именно так. Когда количество законченных проектов было уже достаточно существенным и пришло понимание, что 50% кода просто кочует из проекта в проект, мы решили не просто систематизировать свои наработки, а сделать их лучше и быстрее. А, что работает быстрее, чем код на Си? И, что может быть более дружелюбно к программисту, чем язык Ruby, созданный Matz-ом именно с целью облегчить наш труд?
Как следствие, сейчас с одной стороны производительность работы выросла в разы. А с другой, время отклика любой страницы написанных нами проектов укладывается в 300-500 mc при любых нагрузках. При этом, конечно, нужно упомянуть, что мы используем и своей application server, так же написанный на Си.
Для примера привожу скрин страницы одного из наших проектов. Это crn для типографий, позволяющая управлять, как процессом приема заказов, так и всем производственным циклом. На скрине страница списка заказов. Весь список не видно, но поверьте он достаточно внушительный. При этом по каждой записи выдается не только название и дата, но и краткая статистика. А именно: сумма оплат, перечень продукции, стоимость материалов по каждой, данные покупателей. Одним словом для формирования этой страницы приходится выполнять больше полусотни запросов. При этом время отклика 395 mc, а размер gem-a меньше метра
Подробности
Если Вас все выше изложенное не заинтересовало, то дальше можно не читать. Дальше будет просто небольшое описание. Совсем, совсем краткое. Если же кого-то оно заинтересуют, готов предоставить полную документацию. Здесь это вряд ли уместно.
И так. В gem-e, о котором я упомянул, собраны классы и функции, что мы используем чаще всего.
Главный класс носит название Vdcgi. При его инициализации происходит:
- парсинг HTML заголовков. Все параметры, переданные безразлично каким методом, а так же coocki, становятся доступны через массив «param» экземпляра класса. Если были преданы файлы, то ссылки них можно получить из массива «hash_img». Сами файлы до окончания работы скрипта хранятся в /tmp и затем удаляются. При парсинге параметров учитывается уровень доступа пользователя и переменная level, устанавливаемая в конфигурационном файле. Если уровень доступа меньше, чем level, то применяются жесткие правила, при которых из всех переданных запросов «выбиваются» потенциально опасные символы ' < и так далее. Если level больше, то в дальнейшем такие символы просто экранируются стандартной функцией библиотеки mysqlclient
- подключение к базе данных. Если подключение прошло успешно, то все запросы к базе можно выполнять через экземпляр класса.
- Происходит авторизация пользователя. Если «зашел» авторизированный, то получается его уровень доступа и все данные пользователя.
- Получается имя основного шаблона используемого для формирования страниц
- Устанавливается глобальная переменная определяющая язык интерфейса страниц
- Получается сео информация для запрошенной страниц title, leywords и так далее
Второй по значимости класс — VdMainapp. Вот некоторые функции это класса
- menu – формирует массив для вывода меню на странице
- writelink – создает ссылку
- get_class – возвращает массив классов которые должны быть инициализированы
- fotos – возвращает ссылку на фото и т.д
Перечислять все функции и классов смысла здесь нет. Упомяну только основной функционал
VdUser – работа с данными пользователя
VdKassa – все связанное с платежами и финансами.
VdVideo – для погрузка видео по ссылкам
VdNet – сетевые функции
VdAdmin – функции администрирования
VdImg – капча и фото
VDArcticle – все что нужно для добавления на сайт текстовых материалов
VDMessages – все для чатов, тикетов и т.д
Все выше перечисленное – очень, очень скромное даже не описание того, что есть. Однако, думаю, даже из него Вы поняли – только лишь gem-ом тут дело не ограничивается.
Действительно кроме самого gem-a есть еще:
- база данных (а точнее несколько – одна основная и по одной на каждый язык)
- набор шаблон для шаблонизатора erubis
- набор js скриптов
- набор заготовок для расширения уже существующих классов
- определенное количество Ruby скрипов работающих с AJAX функциями упомянутых выше js.
А еще есть cкрипт instal.rb который все это разворачивает по вашему запросу.
При запуске последнего Вам нужно будет указать директорию проекта и параметры подключения к базе данных. После чего в указанной директории вы получаете все необходимые файлы, а на вашей локальной машине сконфигурированный сервер nginx и фактически работоспособный сайт с минимальным набором страниц и админ панелью. В последнюю можно попасть с логином/паролем admin admin. Внутри Вы сможете добавить остальные страницы, определить их вложенность указать для каждой сео информацию. Ну а дальше – полная свободна творчества.
Несколько ложек дегтя.
Еще раз хочу подчеркнуть. Вопреки мнению некоторых, комментировавших первую статью, я не пытаюсь никого учить. Я даже не пытаюсь не то что навязывать, а даже предлагать работать с нашим инструментом. Хотя он есть в открытом доступе на нашем сайте, но всегда рассматривался только для «внутреннего потребления». Схема была проста – если какой-то функционал присутствовал более чем в 3 проектах, мы переписываем его на Си и добавляем в gem. При этом ни кто не старается навести особую «красоту». Как следствие, если рассматривать его как нечто, что я мог бы предлагать всем, то нужно признать, что проект достаточно сырой. В нем много чего не хватает. Например нет поддержки PostgreSQL (которую, кстати уже пишем) и еще ряда полезных «плюшек». Потому, если у кого-то есть желание познакомиться поближе, – милость просим, но только, как говорится, «под вашу ответственность».