За 10 лет накопилось порядка 300 статей по верстке и front-end программированию, а также куча полезных сниппетов кода, которые я в последующем использовал для создания RevolveR Contents Management Framework на фирменной архитектуре KMV(Kernel<-Model<-View).
С Drupal была стянута идея использовать узлы(nodes) и я применил весь комплект опыта оставшегося от хакинга ядра решившись начать писать свою систему. Сейчас RevolveR уже достиг версии 1.9.4.9 и из его отличительных особенностей можно выделить подход к программированию.
Все создано на чистом PHP SPL и не использована даже jQuery для frontend(ее роль выполняет созданный на ES7 движок front-end с поддержкой всех функций, которые могут пригодится при разработке; от поддержки CSS3 анимаций до автоматических HTML форм на fetch).
Теперь Windows использует Chromium для встроенного в систему Fetch и мне не пришлось использовать транспиляторы для реализации framework. Из новенького, что мешало сделать нормальный релиз была не полная поддержка CSS4 variables, которые у меня в паре с View Port Unit формирует хитрый в 10 строчек кода алгоритм для масштабирования HTML элементов сайта под мобильные устройства, а также по примеру приложения может получить, но не отображает в строке URL GET запросы.
Средствами JavaScript определяется браузер пользователя и формируются scale factor являющийся множителем, чтобы отмасштабировать ссылки, кнопки, параграфы и другие элементы требующие увеличенного размера для смартфонов, чтобы пользователю было удобнее.
Я подошел к реализации front-end с той же стороны, что и подходят разработчики приложений операционной системы: никаких media queries не используется вообще, а сайты выглядят крупнее или мельче в зависимости от размера окна браузера без всяких прокруток.
Что есть во framework сейчас?
Создана поддержка инсталлятора для хостинга(можно использовать Open Server минимальный, но с включенным модулем PHP Tidy). Поскольку это не совсем набор классов и futures для создания и нужды много программировать, CMF из коробки предлагает поддержку кабинета пользователя и ролей групп пользователей.
Contents Management Framework подразумевает также поддержку создания пользователем страниц и категоризация их включена в функционал. Фреймворк многоязычный (сейчас два языка интерфейса доступны Russian & English).
Также доступны модули mini Wiki и блогов. Для материалов новостей и блога доступно голосование типа 5 звезд. Есть простой но лаконичный форум.
С помощью content editble HTML 5 реализована быстрая wysiwyg правка статей и комментариев, а динамический предпросмотр позволяет видеть как будет выглядеть опубликованный материал точь в точь при наборе текста и верстки.
Реализована простая, но очень надежная captcha, которая работает для любых POST данных путем получения ключа и паттерна из набора рисунков независимо на каждый route специальным сервисом secure route через javascript fetch и https cookie. Рисунок создается в canvas и обвешан рядом isTrusted проверок.
Я добавил поддержку комментирования и возможность подписаться по email на обновления контента и комментариев, если пользователь зарегистрировался — есть возможность установить себе аватар, заполнить профиль, выбрать язык интерфейса индивидуально и писать личные сообщения.
Все формы и элементы навигации сайтов на RevolveR CMF работают в автоматическом fetch режиме из последних релизов ECMA Script. API подразумевает удобный сборщик HTML форм и центральный валидатор данных, который связан с типом input указанном в HTML формы. Загружаемые пользователем файлы проходят на UNIX системах дополнительную проверку маски через xxd.
Есть модуль интернет магазина.
В систему добавлен терминал, позволяющий выполнять bash команды операционной системы или консоли Windows(в планах научиться использовать Power Shell из PHP).
Тема оформления пока одна, но она оснащена примерно 50 переменными CSS, которые позволяют изменить почти весь дизайн. Также реализовано ночное и дневное отображение интерфейса.
В системе есть все для SEO: автоматический ping при добавлении материалов, карта сайта в XML, поддержка Microdata HTML 5 и RSS.
Встроенная система статистики учитывает посещения гостей и авторизованных пользователей показывая время пребывания и внутренние переходы. Также статистика отображает переходы по внешним ссылкам с whois и из поисковых систем.
Оптимизация
Поскольку весь код писался на низкоуровневых функциях без сторонних библиотек и великолепно оптимизирован с участием кэша трех уровней:
- Сжатые CSS и JavaScript;
- Кэш шаблонизатора (свой шаблонизатор на Cache Conclude);
- Кэш запросов базы данных (если RevolveR не пишет статистику посетителей, то framework работает в режиме partial Kernel run и к базе для анонимного посетителя происходит 0 запросов).
Мне удалось достичь просто отличных цифр оптимизации: все ядром с шаблонами выполняется за доли секунды при этом тратиться памяти на сайт из 10 страниц порядка 3х мегабайт(средний Drupal 9 для сравнения рекомендует сервер с 2 Gb ОЗУ то время как RevolveR CMF требует 128Mb).
Кроме того, front-end оптимизирован так, что позволяет в 240кб упакованного трансфера кода уместить и скрипты и рендер c бэкенда и даже остается место для иконок флагов всех стран на SVG и картинок интерфейса(подходит быстрой загрузки и отдачи в условиях с плохим интернетом).
Установка и системные требования
Скачать дистрибутив можно со страницы проекта GitHub. Установка очень простая. Просто посмотрите видео.
Если установка не пошла просто удалите database.key и domain.key в директории /private/ и проверьте правильность ввода данных в полях настроек подключения к базе данных.
RevolveR CMF требует php 7.4 и MySQL 5.6-8.x, а также включенный модуль Tidy. Рекомендуется 128 Mb оперативной памяти сервера и Zend Opcache, но в реальности достаточно 30 Mb.
Документацию по системе я активно дополняю и найти некоторые статьи можно на блоге и wiki.
dopusteam
Сравнение уровня 'бог'
Что по сравнению функционала с тем же drupal, например?
А то у меня тут тоже есть страница, которая ещё быстрее открывается, но я вам её конечно не покажу
Full-R Автор
Дрюпал без 20 минимум модулей — голое ядро. Когда вы настроите сайт полностью на капле — это будет неимоверно прожорливый сайт так как ещё без примерно 30 модулей вам не обойтись. Что сравнивать, если в ядре CMF есть поддержка новостей, блогов, форума, wiki, личного кабинета пользователя, приватных сообщений и вчера я закончил pre release компонента интернет магазина. Отмечу так же, что реальное потребление в 20Мб памяти, которое рекордное для системы, было замечено только на странице отображения статистики посещаемости после переходов с habr. Страницы влетают в индекс Google за сутки для сайта которому два месяца. Это и был смысл оптимизации.
dopusteam
Это всё было бы неплохо на конкретных примерах показать, типа 'Вот сайт на drupal, вот тут его потребление, а вот тут на моей CMF с абсолютно таким же функционалом, но потребляет вот столько'. Сейчас это просто слова, которые никак не проверить.
Не понял про модули, у вас получается в ядре куча функционала, который мб не нужен вообще?
Не знаю, говорить ли, что сайт у вас достаточно тормозной, у меня при каждом заходе нужно секунд 8 чтоб дождаться окончания всех мельканий\загрузок (и столько же при любом переходе по страницам). И это просто блог, насколько я понимаю. В прошлой статье вы были против критики сайта, но я так понимаю он именно на вашей системе работает.
Там ещё нереально крупные кнопки пагинации и какое то висячее меню в нижней части справа.
Full-R Автор
Цель статьи не сравнивать с другими разработками. Для этого нужно отдельную публикацию. Если вам это интересно, то она будет. Реальное время генерации и расход памяти можно узнать в исходнике страницы снизу. Оно даже на RSS канале и Sitemap есть. Можно также открыть консоль браузера и выполнять какие либо действия на сайте. Там логирование и отчёт производительности реализованы. Шаблон завершается на exit() и показывает реальные данные времени формирования шаблона, а также потребление памяти. Ни у какой другой системы точного подсчёта нет. У меня также на хостинге есть статистика за сутки. Как это считать на реальном Drupal сайте я не знаю. Я просто с 2012 года не делаю на нем сайты вообще.
Наше ядро со всем функционалом весит порядка всего лишь 3х мегабайт. В них входят скрипты фронта и каскадные стили шаблона.
Ещё 60 мб приблизительно весят базы данных Max Mind geo ip. Я не стал их убирать.
Размер ядра у меня не планируется более 5 мб и в этот план входит компонент поисковой системы со своим парсером сайтов.
Ядро можете покритиковать, но оно уже со времен модуля блогов(месяц назад) не меняется. В нем есть все что нужно. Например модуль store(магазин) я написал на ядре за 4 дня всего лишь.