Обновить

0.0023 секунды на генерацию: зачем я собрал «стальной» движок на PHP в эпоху жирных CMS

Уровень сложностиПростой
Время на прочтение5 мин
Охват и читатели12K
Всего голосов 33: ↑25 и ↓8+21
Комментарии35

Комментарии 35

О, брат по разуму! Я тоже был критически недоволен современным CMS-монстрами, и потому полгода назад написал свой PHP-фреймворк для решения кучки своих задач: типовые сайт-визитки, типовые сайты по раскрытию информации для ПИФов, конвертации и работа с дампами БД, операции с файлами, и - надо же! - менеджмент и обработка видео. В итоге должен получиться модуль для полуавтоматического видеомонтажа в браузере.

Создание ядра заняло 2-3 недели в паре с ИИ.

Та же концепция “всё есть файл”, но по-умолчанию работает без БД. В итоге оказалось, что проект для меня настолько удобный, что развернул на нём же большую СУБД для заказчика.

Вот только выкладывать это в паблик вероятно поленюсь, в отличие от автора этого поста, за что ему спасибо, это ценно!

А какие расширения в браузере установлены? В devtools отображаются запросы не только самой страницы, но и всё, что расширения туда понапихали

Мы полностью отказались от JavaScript

Раньше тоже этим занимался. Потом открыл для себя vue и SSG и обнаружил, что js-файл на выходе там настолько маленький, что смысла дальше оптимизировать особо и нет. А раздача статики ещё быстрее, чем генерация (чем ещё пользовались wakaba и futaba, если правильно помню).

Для сравнения, https://zassyha.ru/ с картинкой 240Кб на главной:

И https://pro-kanji.ru/ с vue, роутингом на JS, “монструозным” css-файлом (с semantic-ui, т.к. мне было лень верстать), но без больших картинок:

Смысл в том что ломаться там нечему. Только голый php(pdo)+html+css. Всё. Я просто начинал кодить ещё на wen.ru с телефона, поэтому предпочитаю надёжность лома.

Изображение в .jpeg на 237 КБ тоже удивило. Когда речь идёт о сверх-лёгких решениях, однозначно ожидаешь увидеть .avif или, на крайний случай, .webp. Легко без чрезмерно заметных потерь ужать эти 237 до 50 КБ, а то и меньше.

Оптимизация статики уже отдельный разговор, главное что сам html генерится быстро, а дальше пусть cdn отдувается

Разве отказ от JS на клиенте не убивает кучу полезного функционала вроде аналитики, нормальных форм и динамических подгрузок?

Так сайт практически ничего не делает, поэтому и быстро работает. А wordpress и drupal предоставляют универсальный фреймворк для разработки решений. Хотя и они с прямыми руками будут работать быстро.

Жесть, посмотрел на код - как будто бы в 2009 год вернулся :) wen.ru, ruwap, xwab, wapadmin, хомяк :) Спасибо за ностальгию, но в прод такое тащить нельзя)

Код выполняет свою задачу - отдаёт контент. А уж что туда прикрутить можно - решать не мне.

О-хо-хо, аж олдскулы свело!
У меня на кнопочном телефоне был редактор кода и ftp до wen.ru )
Можно ещё упомянуть, что тогда же был kmx - kovcheg media explorer, примерно с теми же функциями.
В те времена, мегабайт мобильного интернета стоил примерно 10 руб (чего примерно хватало на полдня в мессенджере), а если ресурс или страница весили сами по себе больше 15 кб, клиент сбрасывал соединение; javascript телефоны не умели.

А ещё, некоторые оставляли в футере ссылку а-ля "Не нажимать", которая вела на одну из двух страниц со взаимным циклическим редиректом и текстом а-ля "Все твои данные уничтожены" и "Конец твоему телефону"

Такой код пишется за вечер под пиво, работает годами на забытом сервере, а потом его ломают через уязвимость нулевого дня в древней версии PHP)

Вижу пыху, ставлю лайк )

Мой результат — 0.0023 сек. Это в 200 раз быстрее.

Автор на серьезных щщах сравнивает свой аналог "Hello world!" c CMS системами 🤣

Предложите свой "Hello world" ))), который будет являться не аналогом

Это же гостевая книга на текстовых файлах, господа:)

Привет тем, кто помнит Manlix и Sad Raven :)

"Зумеры опять изобрели <что-то, сто лет как известное>" :)

На текстовых файлах используя mySQL(MariaDB)???

Это оверкилл для ваших задач:)

Я на пыхе последний раз в году 2005 писал, будучи подростком. Тогда вроде была 4.x версия. Вот ваш код похож 1 в 1 на тот, что был в те времена :) Глянул недавно пыху, на предмет того, чего там нового произошло за эти годы. Ну мне нужно было запилить маленькую апиху для шаред хостинга, для одного проекта. Чтобы с девопсом и vps не заморачиваться, решил так сэкономить время и финансы. Честно сказать охренел от оверхеда фреймворков, пыхоооп, в целом от того, какую когнитивную нагрузку создаёт для мозга современная пыха. Такое ощущение, что явно они где-то свернули не туда :) Из языка на котором мог по-быстрому накезать сайтец любой школьник, превратились в такого монстра.

Вот и я про тоже. Честно говоря я до сих пор не понимаю зачем городить огород и втыкать костыли нормально работающему инструменту.

Язык остался таким же как раньше, и писать на нем можно также как и раньше, только удобнее и чуток почище. Вы в шоке от фреймворков, а не от языка. Кто мешает написать все на чистом php как в 2005.

Ну, я некорректно выразился, я больше про стек и сообщество, что его развивает. Экспертом в пыхе не являюсь, просто первыми впечатлениями поделился после 20-летнего перерыва. Апиху-таки я свою на slim запилил при поддержке кодекса :) Вот что понравилось, так это то, что композер появился у них :)

Все мы когда-то писали свои самописные движки "без лишнего мусора", ровно до тех пор пока заказчик не просил добавить корзину товаров и экспорт в 1С

Что не так с корзиной ? Лет пять назад делал для совершенно статического ИМ, php там был во время работы только один для процесса чекаута. Проковырялся какое-то время, но совершенно небольшое.

Какая душевная Асси!
Бог с ней с CMS, срочно нужны настройки нейросетевого агента, который пишет такие милые тексты!

Отправьте ссылку на сайт в чат вашей любимой нейросети и прикажите сделать промт:)

Моей прикажешь.. Как же.. Ага.. Быстро сама пошлёт меня куда макар телят не гонял D

Я пошёл дальше и отказался от пыхи. Просто поставил опенрести и луа джит, и у меня больше нет пхп-фпм. Роут в контексте нджинкс, подключение бд - только редис, кеш - мэджик кеш самого нджинкс. Ответ сервера около 0.0с

Можно поподробнее?

Не поймите меня неправильно, мне нравится идея и принцип KISS, скорость и оптимизация. Но зачем на алтарь производительности класть чистоту кода и его читабельность? Знаете, PHP ведь неплохо так эволюционировал. Зачем до сих пор писать на PHP 7.0 и делать вид, что кроме апача ничего не существует?

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

При этом, если во главу угла ставится производительность, то какой функционал у счётчика онлайн посетителей? Просто показывать циферку как в нулевых? И ладно бы просто циферку, но online_users.last_activity сломается при переходе на зимнее время, потому что время хранится без таймзоны.

Доходит до смешного, вроде того, что в выводятся неэкранированные http заголовки, у форм нет csrf, кукисы задаются и проверяются абы как. Я уже не говорю про условия запросов по неиндексированным полям, неэкранированный вывод, забытые биндинги в execute(). Добавлять зип бомбы и honeypot'ы, но иметь уязвимости уровня path traversal и банальных инклюдов - это мощно.

В общем, мы имеем набор скриптов "CMS на инклюдах и глобальных переменных", которая ломается из-за хардкода слэша вместо DIRECTORY_SEPARATOR и работает только при установке в корень, а при установке в папку ссылки ломаются из-за россыпи других хардкодов слэшей в <a> и <link>.

Собственно, мы имеем удовольствие лицезреть причину, по которой PHP получил имидж плохого языка. Спасибо за креатив. Максимальный репост, звёзд и форков на гх, чтобы как можно больше нейросетей "обучилось" на таком коде и моя работа стала ещё более ценной.

Вместо того, чтобы экономить на скобках, можно сэкономить пару тактов процессора на вызове функций is_ и всяких strlen, если добавлять бэкслэш к некоторым функциям.

Это работает только если пространство имён не глобальное. А в глобальном оно и так эти интринсики сворачивает, если что)

которая ломается из-за хардкода слэша вместо DIRECTORY_SEPARATOR

Человеческий слеш / работает на любой ОС. Использование DIRECTORY_SEPARATOR – это атавизм, ну или если надо красиво путь нарисовать на экране.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации