Не секрет, что я практически все сайты делаю на движке MODX. Достоинства этого фреймворка
описаны тут и повторяться не будем. Скажу лишь, что у него существуют две ветки, одна из которых (MODX Evolution) служит нам верой и правдой на протяжении уже нескольких лет, а другая (MODX Revolution) появилась сравнительно недавно, но завоевывает всё больше и больше поклонников среди членов MODX-сообщества.
Но, к сожалению, Revo шагает по планете не так активно, как хотелось бы. Дело даже не в том, что эти ветки, при схожих админках и логике разработки сайтов, имеют больше различий, нежели сходств. Основной причиной настороженного отношения к Revo в среде разработчиков является его «тормознутость» и требовательность к ресурсам сервера. Я давно уже приглядывался к нему, устанавливал на локальном компе, тестил, но от использования Revo на рабочих проектах меня постоянно отталкивала «задумчивость» админки и, по ощущениям, гораздо большая, чем у Evolution, нагрузка на сервер. А чтение статей
подобного рода и вовсе вгоняло в тоску и заставляло коситься в сторону
Clipper или новых
кастомных сборок MODX Evo.
Но случилось так, что возникла необходимость кардинальной переделки одного из моих проектов (
frilans.ru) и я столкнулся с дилеммой: на чём делать-то? С одной стороны, уже зарекомендовавший себя, проверенный, лёгкий и знакомый насквозь Evo, а с другой - таинственный, тормозной, но более современный и, вроде как предоставляющий больше возможностей, Revolution. И я решил рискнуть, тем более, что проект это свой и в случае чего, пострадаю только я сам. Также сыграло свою роль то, что недавно оба моих сайта расстались с Агавой и переехали на новый, более шустрый, хостинг.
Сказано - сделано! Была использована самая новая на этот момент версия - 2.2.5 и практически сразу сформировалось первое впечатление - работать админка стала побыстрее. То ли это объясняется хостингом (хотя и на Денвере и на OpenServer Revo раньше тормозил), то ли и правда изменениями в дистрибутиве, но работать с сайтом стало куда комфортнее.
Дальше пошли впечатления связанные уже с самой Revo. Итак, самое главное: развязаны руки.
Поясню. Я ненавижу, когда в системе присутствует куча шаблонов. Это напрягает и заказчика - ведь ему приходится при создании новой страницы выбирать из десятка единственно верное решение, и меня, поскольку для реализации какой-либо мелкой фичи или изменения в вёрстке я вынужден создавать новый шаблон, настраивать его через ManagerManager и т. д.
Соответственно, я активно использую PHx, дабы избежать всего этого. Но у PHx есть нюанс, когда он все плейсхолдеры вырезает из кода. Это касается и [+pages+] в Ditto, и всяких [+name+] с [+email+] в eForm, когда вы подставляете их в качестве параметров &from или &fromname.
Естественно, нам приходит на помощь решение, подсказанное
тут. Данная уловка позволяет использовать комментарии
и ,
между которыми и помещаем наши плейсхолдеры, дабы защитить их от прожорливого PHx.
Всё бы ничего и это решение отлично работает, пока мы не решим обойтись единственным шаблоном для стандартной текстовой страницы и, к примеру, для страницы обратной связи.
Мы по привычке пишем что-то вроде
[*id:is=`152`:then=`{{feedback}}`:else=``*]
и… получаем пустую страницу, поскольку вызов eForm в чанке «feedback» у нас обёрнут в и .
Облом! Приходится под данную страничку снова делать свой шаблон. И под архив новостей тоже, поскольку и пагинацию у нас защищает данная конструкция.
А что же мы имеем в Revo? Правильно! Переработанный и уже интегрированный в движок PHx, который не обрезает никакие чужие плейсхолдеры. Ни в getResources (getPage) ни в FormIt никаких проблем не возникает! А значит, нет необходимости городить всё то, о чём я написал выше и тратить кучу времени на дополнительную, никому не нужную шаблонизацию. На
frilans.ru, к примеру, всего четыре шаблона (
это,
это и
это - всё один шаблон), и те сделаны только для разграничения TV-параметров.
Идём дальше. Теперь, если у вас в getResources или Wayfinder настроена сортировка по полю «menuindex», не обязательно устанавливать данный параметр у каждой страницы - просто перетаскиваем мышкой в дереве документы, как нам заблагорассудится - система сама позаботится об установке значения. Та же самая история с установкой родителя документа - просто перетащите страничку на другую и та станет папкой, а текущая - её потомком.
Стала удобнее работа с редактированием файлов в менеджере. К примеру, раньше в процессе правки стилей, после сохранения страница обновлялась и файл проматывался на первую строку. Теперь страница не обновляется и вы остаётесь там же, где и были. Пустячок, вроде, но если у вас в файле больше сотни строк, экономит кучу времени. Да и возможность сохраниения через Ctrl+S тоже радует безумно.
Теперь по нагрузке. Вот графики:
Установка и настройка системы была 4-го, а с 7-го началась активная работа, и, как видите, тут мощный всплеск в тот момент, когда одновременно на площадке работали три сайта - старый frilans, новый frilans и rpa-design. Причем, новый делался очень активно - именно 9-10 числа происходило наполнение портфолио с закачкой графики через файловый менеджер, созданием кучи новых ресурсов, правками стилей, шаблонов, чанков и т. д. Превышение было, однако из жёлтой зоны не вышло.
11-го вечером старый сайт был перенёсен в архив, и заработал новый. 12-го там делались небольшие доработки, а вот 13-го я специально ничего не трогал и всё работало в штатном режиме. Как видите, нагрузка вообще упала до минимума. Да, она немного выше, нежели когда все сайты крутились на Evolution, однако, согласитесь, совершенно некритично.
14-го и 15-го я продолжил вносить небольшие правки, дозаливать портфолио, добавил раздел «Клиенты» и т. д., но это уже рабочий процесс, не выходящий за рамки. 16-го активный этап разработки закончился и все сайты вышли на нормальный рабочий режим.
Так что прожорливость Revolution оказалась не такой страшной, как её малюют! Единственно, нужно учесть некоторые нюансы, связанные с модификаторами. Если вы их активно используете, то пишите так:
[[*id:is=`56`:then=`какой-то_контент`:else=``]]
а не так:
[[*id:is=`56`:then=`какой-то_контент`]]
То есть, обязательно добавляйте в конце :else=``, поскольку в данном случае вся эта конструкция кэшируется, в отличие от варианта без этого завершения.
И ещё одна хитрость (
подробности тут):
[[$[[*id:is=`56`:then=`имя_чанка`]]]]
Также после наполнения сайта я ещё включил кэширование запросов к базе в настройках:
Конечно данная статья не ставит своей целью подробно рассказать обо всех достоинствах MODX Revolution (за этим пожалте
сюда или на
официальный сайт), здесь, скорее, поверхностный, первый взгляд разработчика, который до этого работал только с Evo и настороженно относился к новой реинкарнации любимого движка, однако, даже этого хватило, чтобы сделать кое-какие выводы.
А вывод, по сути, один - работать можно! И не просто работать, а уже достаточно комфортно работать.
Да, есть определенные даже не трудности, а скорее, дискомфорт при переходе с eForm на FormIt, с Weblogin на Login или с Jot на Quip. Но это дело привычки и буквально пары тройки часов, чтобы войти в колею и вовсю использовать новые возможности.
Да, после ManagerManager не совсем устраивает работа с формами (например, так и не разобрался как перенести longtitle в другую вкладку), но это, думаю, дело времени.
Все эти маленькие неудобства с лихвой компенсируются теми возможностями, который дает новый движок. Я не думаю, что мы теперь будем все наши сайты делать на Revo, но иметь такой инструмент в своём чемодане, считаю более чем полезным. Тем более, что для многих современных задач Revo становится все более и более предпочтителен.