Часто к нам обращаются с вопросами о разработке или доработке сайтов на фреймворке. Если есть уже такой сформулированный запрос, что сайт должен быть именно на фреймворке, значит, заказчик уже собирал информацию по этому поводу, и у него есть какие-то представления и ожидания того, что в результате он получит. К сожалению, собранная информация представляет собой микс из фактов, мифов и тезисов коммерческих предложений, что приводит к тому, что ожидания у заказчика формируются ложными.
Давайте попробуем разобраться в этом вопросе.
Что такое фреймворк?
Фреймворк – очень широкое понятие, которое применяется не только в IT. Но даже в IT это понятие сильно размыто. Есть фреймворки для верстки, есть фреймворки для программной логики как серверной, так и браузерной. Коробочные системы управления контентом (CMS) также используют свои фреймворки.
Но нас сейчас будут интересовать фреймворки для серверной логики, такие как: Yii, Laravel, Symfony и другие.
Что собой представляют такие фреймворки?
На самом деле, они очень разные. Есть фреймворки, у которых предусмотрен базовый функционал, например – подключение к базе данных и формирование страниц, а есть фреймворки абсолютно без функционала. Однако все фреймворки, как минимум, закладывают язык программирования и методику программирования.
Общее назначение фреймворка – облегчить и ускорить разработку.
Можно выделить два основных случая, когда нужно использовать фреймворк:
- Вам по каким-то причинам не подходит коробочная CMS (Вам нужен сайт под большие нагрузки или нужен большой процент уникального функционала)
- Нужно быстро собрать ДЕМО-версию
Интуитивно понятно, что подход к разработке в каждом из этих случаев должен быть разным.
Теперь нужно понять, какими могут быть подходы к разработке в этих случаях.
- Программист сам пишет код под проект.
Такой подход идеально подходит для первого случая и не подходит для второго, поскольку писать код с нуля – это не быстро. - Сборка проекта из готовых модулей.
Этот подход, наоборот, плохо подходит для первого случая и отлично подходит для второго.
Полагаю, что теперь мы можем более точно определить назначение фреймворка, исходя из наших целей разработки и понять, на что стоит обращать внимание.
Написание сайта с нуля на базе фреймворка.
В этом случае, фреймворк служит некой базовой платформой для остального кода.
И в этом случае, существенной разницы между разными фреймворками нет. Как говорится, PHP (а мы сейчас рассматриваем PHP-фреймворки), он и в Африке PHP. Любому толковому PHP-программисту без разницы, какой фреймворк использовать. В отношении доработок, если сайт написан руками толкового разработчика, то фреймворк тоже не имеет значения.
Сборка сайта из готовых модулей на базе фреймворка.
В этом случае, фреймворк представляет собой экосистему. Для каждой экосистемы есть свои модули.
В этом случае, при выборе фреймворка, нужно обращать внимание уже не на сам фреймворк, а на его экосистему: есть ли в ней все необходимое, и работает ли оно так, как требуется.
Да, вопрос очень сложный, особенно для заказчика, не специализирующегося в этих технологиях. Но ему и не нужно этого выбирать. Не так уж важно, как именно сделана ДЕМО-версия.
Теперь возникает вопрос – а можно ли из модулей сделать рабочий сайт?
Да, теоретически можно, и люди делают. Но тут как повезет. Дело в том, что многие модули не рассчитаны на скорость и нагрузку. Они состоят из большого количества файлов с огромным количеством кода. Работает это плохо и крайне сложно в доработках, поскольку искать функцию и все ее связи в таком объеме кода – задача очень большая, и в большинстве случаев – не рентабельная.
Однако, есть модули, написанные нормально. В основном, это модули с обычным функционалом, который есть и в коробочных CMS, но такие модули, если они нормально написаны, позволят справиться с большей посещаемостью, с большим количеством страниц (товаров), чем коробочная система.
Мы неоднократно видели проекты, собранные из «тяжелых» модулей для «боевого» сайта. Например, была доска объявлений, которая начинала сильно тормозить уже от 100 объявлений. Заказчик рассчитывал на толковый сайт, написанный под него, а получил абсолютно неработоспособную систему, хотя фактически она есть, и нужный функционал там предусмотрен и он даже как-то работает.
Пара слов о мифах.
В сети можно найти много обсуждений и споров на тему того, какой фреймворк лучше, какой быстрее, какой круче и т.д.
В большинстве случаев, подобный диалог лишен смысла.
Фреймворк не влияет ни на один из этих факторов. Фреймворк не может быть быстрым или медленным. Таким может быть код, конечно, в переносном смысле. Одну и ту же функцию можно написать многими способами. Один такой способ может требовать больше вычислительных ресурсов (и соответственно, времени), другой – меньше.
В этом смысле, сравнивать фреймворки – все равно, что сравнивать боевые искусства. Нельзя оценить методику в вакууме, можно оценить уровень владения ей и эффективного применения. И если Вы видите описание кейса, в котором указано, что на определенном фреймворке сделано что-то очень хорошо, то скорее всего, это заслуга не фреймворка, а программиста.
Однако есть фреймворки с особенностями, и их сильно не любят разработчики, например: Drupal, Symfony (с использованием ORM). В основном, это связано с тем, что уже заложен какой-то базовый функционал и заложен он криво, и дальше это все нужно учитывать какими-то костылями, либо если используется не чистый php-код. Стоит почитать отзывы разработчиков о фреймворке.
Так как же быть уверенным, что Вам сделают на фреймворке что-то хорошее?
На самом деле, полной уверенности быть не может, разве что разработчик – Ваш лучший друг, которому Вы абсолютно доверяете.
Но есть маркеры, которые должны Вас настораживать:
- Вам обещают сделать сайт на фреймворке быстро и недорого. Хотя цена – вторичный вопрос, с Вас могут взять по полной программе за то, чтобы скачать и установить готовые модули.
- Разработчик работает только с одним фреймворком. Скорее всего, разработчик ориентируется в экосистеме, может собрать модули, но у него нет компетенции писать код самостоятельно или дорабатывать даже те модули, что он поставил.
Будьте внимательны при выборе разработчика и технической базы. Не жалейте времени на вникание в вопрос и не пренебрегайте консультациями специалистов. Успешных Вам проектов!