С чего вдруг мысли
Раз уж я добрался до того, чтобы сделать персональный сайт, мне пришлось как обычно выбирать между Flutter-way и React-way.
Но так как на Flutter я уже много что успел поделать, решил я взять и посмотреть, как там обстоят дела у современного, но все еще классического сайто-строения.
Выбор пал на следующий стек:
- React (ну как же без него)
- Astro
- Tailwind CSS (без SASS и прочих диалектов)
- Rive + Lottie (пока только Lottie)
- GitHub pages
- Cloudflare Workers
- Пара тройка фришных svg и png
Мнение
Экосистема
Надо отдать должное многолетней веб-истории. Действительно, с точки зрения готовых веб-решений сейчас есть почти все.
Проблема тут в том, что в случае Flutter, когда ты пишешь сайт (хотя, правильней было бы сказать - веб-приложение), ты собираешься из кусков одной формы, но разного цвета некий новый большой кусок.
На классическом вебе ты ищешь по всему интернету кучу разных кусочков разной формы, напильником их подгоняешь под ту форму, которая тебе нужна и уже потом вставляешь в свой сайтец.
Хотя соглашусь, что современный content-oriented подход в совокупности с serverless и SSR выглядит даже для меня не так уж плохо.
Мне нравится концепция, когда можно одновременно соединить чисто .md-шки
и .tsx/.html
вместе, при этом не потеряв гибкость управления общим кодом.
Плюсы:
- Разнообразие
Минусы:
- Слабая согласованность
Нагрузка на мозг
Я не разделяю общепринятый подход, что написание разных компонентов сайта на разных языках (разметки, программирования, не суть важно) упрощает работу с кодом.
С моей точки зрения мозг потратит больше сил и ресурсов на то, чтобы переключаться между (загибаем пальцы рук и ног):
- html
- css
- js
- jsx
- ts
- tsx
- json
- astro
- sass
- cjs
- mjs
- …
Так что здесь я отдаю голос Flutter-у. Почему ? Потому что Dart :)
.
TODO: (А вот здесь я, пожалуй, оставлю ссылочку на свою статью про Dart)
Предсказуемость кода
Вообще предсказуемость кода больше идет от мозга разработчика.
Чем проще мозг осознает и понимает код, тем проще он может дать более точный прогноз того, что в итоге получит пользователь.
Но и важную роль играет то, как хорошо твой инструмент сочетается с твоим мозгом.
В моем случае я бы сказал, что одинаково.
У Flutter есть хорошая сторона в стабильном и едином layout для всех виджетов, и все виджеты ему следуют (библиотечные и родные из material
).
Плохая сторона в кто понял, тот заплакал
.
У классического веба единообразие отсутствует.
Есть общепринятый flex/block layout, но во многих стилях, дизайн-системах, библиотеках я встречал костыли вида width:158px
и это больно и грустно.
Кажется, что Flutter постепенно выиграет и эту позицию, но с common-errors
надо что-то делать.
Вполне возможно, я доберусь до них и сделаю свой layout на базе Flutter, в котором постараюсь сократить внезапные ошибки путем своих абстракций.
Скорость разработки
Персональный сайтец я сделал за 3-4 дня больным под температурой. Но он простой, даже очень простой.
При этом на Flutter мне доводилось делать полноценные MVP сложных продуктов практически в одиночку (с точки зрения интерфейса).
Я бы сказал, что при учете современного набора готовых гайдов для обеих сторон, скорость должна быть одинаковой.
Оптимизации out-of-the box, SEO и вот это вот все
Статические сайты грузятся шустро. Гораздо шустрее, чем canvaskit
. Но прямо сейчас я бы не рискнул что-то утверждать за производительность по ряду причин.
- WASM. Я жду Flutter WASM. Очень жду и очень хочу. И вот его уже имеет смысл посравнивать с html-based подходом.
- Статический сайт это не веб-приложение. Тяжелые, сложные веб-приложения на чистой статике сделать почти не получится. И вот тут уже вступает в игру Flutter с его изначальным
canvaskit js-based
подходом, где все есть canvas и можно рисовать что захочешь. - SEO в классическом вебе прорабатывался годами и многими корпорациями. SEO и Flutter пока только начинается. Подождем годик-два, посмотрим, как получится.
Вместо вывода
Я бы сказал, что если знать и понимать, как использовать Flutter, то веб-приложение можно сделать гораздо более динамичным, игровым, красивым, не потеряв при этом производительность.
Но если вам нужен сайт, где >60% контента статика, то возьмите Astro, Next и не парьтесь.