Проблемы Wordpress
Когда я создавал свой сайтоблог, то не сильно много заморачивался выбором технологии, поэтому взял Wordpress как некоторый “стандартный” вариант. Но почти сразу же я увидел достаточное количество недостатков, которые меня напрягали в течение последних лет то больше, то меньше:
- Постоянные обновления. Я не знаю, может, меня одного бесят постоянные “новые версии” софта, которым я пользуюсь? Но обычно у меня получается писать посты куда реже, чем выходили новые версии Wordpress или, не дай бог, десятков плагинов. Поэтому каждый раз, когда я хотел что-то написать, оказывалось, что по полчаса приходилось потратить на обновление всего и вся. Ну и к тому времени запал на новые посты иссякал.
- “Vendor-lock”. Хоть и не полный, и обычно этого не замечаешь, но вот когда я начал экспериментировать с разными вариантами, то осознал проблему в полной мере. Последней каплей послужило то, что я хотел скопировать текст поста (исходника) и… у меня это не получилось! Неоднозначный “гутенберг” нынче позволяет скопировать лишь один абзац.
- Множество запросов “пентестеров”, скажем так. Поскольку Wordpress был и остается самым популярным движком сайтов в мире, тысячи скриптов сканируют потенциальные “дыры”, пытаются оставлять спам-комментарии и все такое.
- Отсутствие “обратных ссылок” для фотографий. По фотографии, загруженной в блог, впоследствие было невозможно сказать, где лежит ее оригинал (RAW файл в случае фотографий с камеры, ну и просто оригинал в случае фоток с телефона). Все эти ЧПУ и переименовывания файлов абсолютно теряют исходную информацию и “цифровой след”.
- Скорость. Хоть у меня и не особо много постов, но иногда глаза на лоб лезут, когда видишь, сколько всего загружается вместе с контентом. Мне достаточно импонирует https://motherfuckingwebsite.com/ и http://bettermotherfuckingwebsite.com/ и я считаю текстовый контент самым важным, что есть в постах, и мегабайты бесполезных скриптов постоянно расстраивают. Если можно загрузить страничку с контентом быстрее - почему бы так не сделать?
- Не особая гибкость плагинов. Многие плагины делают что-то прикольное, но просят денег за нормальные версии. Можно, конечно, “подтюнить” что-то из open source, но таких уже не так много.
- Сомнительная поддержка мультиязычности. Я иногда пытаюсь писать и на английском, и мне бы хотелось, чтобы блог нормально поддерживал все это из коробки. Мой последний эксперимент с Wordpress в прошлом году создал дикую мешанину из категорий (если у вас где-то лежит в закладках ссылка вида “2019-ru” - это вот как раз оттуда).
Static Site Generators (SSG)
В общем, я регулярно порывался потыкать что еще есть на рынке сайтостроения и блогописания. Мне достаточно понравилась идея Static Site Generators (SSG), поскольку они решают больше половины из вышеобозначенных проблем “из коробки”, но мне не хватало примера с работой с фотографиями и мультиязычностью. Поэтому эти попытки тоже обычно заканчивались тем, что я возвращался писать изначальный пост в Wordpress. Около года назад я пытался посмотреть на Pelican, мне понравилось, что он написан на Питоне, но все-таки чего-то не хватило (и сейчас уже не вспомню, на самом деле).
Hugo
Но буквально в конце января 2025 года в ходе очередных прощупываний почвы я наткнулся на Hugo . И, мне кажется, я нашел то, что искал!
- Быстрый. В смысле, быстрая генерация сайта (и не такая быстрая, если обрабатывать фотографии, но это уже не проблема движка), а скорость результата зависит лишь от того, что генерировать.
- Поддержка мультиязычности из коробки.
- Все посты можно писать в Markdown и сложить “сорцы” сайта в гит-репозиторий - это куда лучше “гутенберга”.
- Пока я экспериментировал на паре “пилотных” постов, которые я мигрировал из Wordpress на Hugo, я нашел вполне устраивающий меня способ работы с фотографиями.
Конечно, не обошлось и без минусов, но это скорее минусы SSG в принципе, нежели конкретно Hugo:
- Well, отсутствие динамического контента. Самое важное - невозможность комментировать. Это, конечно, очень печально, но в целом есть несколько вариантов, как это обойти. Один из них, самый простейший и включен сейчас - подгрузка комментариев как дискуссий из соответствующего репозитория на Гитхабе. Это хорошо для тех, у кого есть аккаунт на гитхабе, но не очень хорошо для не-технических людей, а возможности анонимного комментирования пока не завезли.
- Пришлось поглубже нырнуть в темы, CSS, HTML и все такое, что мне не очень нравится. Но зато это дает куда больше контроля над тем, что получается.
- Без проблем в плагинах не обошлось - пока из заметного я обнаружил, что если в посте вставлено несколько Leaflet-карт с треками, то только на первой можно “бегать” по треку. Проблему зарепортил, решение должно быть достаточно тривиальным, но надо разбираться. К счастью, не критично
Работа с фотографиями
Для того, чтобы иметь возможность “отследить” фотографию, в принципе мне достаточно даты-времени (timestamp). Поэтому в “сорцы” поста идут файлы, именованные именно так.
├── 2018
│ └── 02-02-china-great-wall-jinshanling
│ ├── 2018-01-04 12.12.15.jpg
│ ├── 2018-01-04 12.54.36.jpg
│ ├── 2018-01-04 12.57.35.jpg
│ ├── 2018-01-04 13.00.25.jpg
│ ├── 2018-01-04 13.00.45.jpg
│ ├── 2018-01-04 13.02.20.jpg
│ ├── 2018-01-04 13.21.33.jpg
│ ├── 2018-01-04 14.08.36.jpg
│ ├── 2018-01-04 14.13.06.jpg
│ ├── index.en.md
│ ├── index.md
Но в посте мне хотелось бы сохранить ЧПУ (“человеко-понятные-урлы”), поэтому пришлось написать свой тэг, где я передаю оригинальное имя фотографии, “человекопонятное” имя фотографии и заголовок/описание.
{{< img "2024-12-21 09.56.20.jpg" "airport-lounge-world-1" "Интерьер зала" >}}
Внутри, естественно, сначала была простая логика, просто вставляющая картинку, потом я добавил к ней лайтбокс (чтобы получался зум по клику), потом - чтение данных EXIF, потом - генерацию разнообразных размеров для responsive версии сайта, а потом и “галерею” воссоздал по образу и подобию того, что было на Wordpress.
Итог
Если вы это читаете, то, думаю, у меня получилось “подменить” старый сайт на Wordpress на новый, статический и сгенерированный Hugo. Старый сайт еще не “убил”, все еще доступен по адресу https://old.okainov.com/ - можете сравнить и высказать ваше мнение, какой лучше, и чего не хватает здесь. Stay tuned!