Непросто отказываться от иллюзий, но пришла пора подвести черту. Может кому-то сгодится на распутье выбора. Ну и внукам потом буду показывать. Этой истории уже 20 лет. Краткое содержание: фреймворки — больше никогда; выход есть.
Можно сразу перейти к сути, или с предисловием: почему вообще Метеор?
Начинал на Delphi под флагами RAD и VCL. Два чемодана книжек — скупал всё подряд, как маньяк. Приятно осознавать, что некоторые учились кодить в редакторе Winsyntax.
Прошли годы. Устроился веб-мастером в IT-отдел. Помимо перетряхивания корпоративного сайта на PHP, познакомился с монстром SharePoint: виджеты на C#, формочки InfoPath, шлюз в HP ServiceDesk на Java. И очень хотелось поднять сайтик про мою машинку.
Как SharePoint, но чтоб на PHP — привет, Drupal. Это была любовь с первого взгляда. Delphi для веба. Реестр модулей — ящик с сокровищами. Базовый функционал можно настроить мышкой. Коллективный разум для решения технических вопросов. Я заболел сам, и заразил автора LiveStreet:
Работа над движком (пока ещё просто универсальным двигом, без привязки к блогам) началась почти два месяца назад, после заряда энергией от общения с продвинутым PHP разработчиком.
Потом была Мамба. Узнал про Highload и Big Data, про издержки на разработку и обслуживание большого-пребольшого велосипеда. Затем примерил роль крупного эксперта веб-технологий в жирном стартапе: от любых бед нас спасёт фреймворк, в одну харю подниму супер-пупер проэкт и на Мальдивы. Django? Python очарователен, но нет. Может быть Yii? Да ну нафиг PHP вообще. V8, NPM, CoffeeScript, Jade, Express — раздолье. Крыша поехала от SocketStream (ого, все ещё жив), спасибо автору за наводку — привет, Meteor. Раздуплился на раз-два, как мне казалось. На сегодня уже прилично накопил full-time практики.
И со всем этим мы попробуем взлететь
Внезапно осознал циничную правду. Я выбирал фреймворки, чтобы компенсировать недостаток ресурсов для быстрого старта, но это условная величина при забеге на длинную дистанцию. Фреймворк по определению имеет избыточную функциональность — нужно угодить всем-всем-всем случаям применения. "Чем больше сдадим, тем лучше". Каким бы распрекрасным не казался фреймворк, история будет повторяться каждый раз. Наши бизнес-цели расходятся.
Вспомнить ужасающие хитросплетения схемы данных под капотом Drupal, где спасало тупое кеширование (об этом же говорил Александр Соловьёв в докладе про оптимизацию modnaKasta).
Фреймворк берёт на себя ответственность, ограничивая выбор сторонних решений. Изначально сомнительные решения мешают. Правильные решения устаревают. Метеор меняется и пакеты забрасывают: AutoForm, CollectionFS, Jade, IronRouter, поделки от гуру @arunoda. Сроки жизни пакетов, зависимых от фреймворка, значительно уступают библиотекам для платформы. И тут уже конкретная засада: на саппорте тысячи строк развесистого левого кода с обязательствами по обновлению зависимостей для новых версий фреймворка.
Атмосфера — официальный реестр пакетов, хранит тонны неработающего барахла. И больше не собирает статистику установок, хотя механизм можно встроить в Meteor (вспоминаю Drupal). От "богатства выбора" разбегаются глаза. Усугубляет ситуацию отказ от бесплатного хостинга демок на *.meteor.com — старт Galaxy закрывает возможность дальнейших внешних инвестиций? Ну, OK.
И эта ваша Атмосфера тормозит всю дорогу (хотя можно же ускорить, см. Fastosphere) — никому нет дела.
О редизайне документации. Ранее это была одна страничка с якорями. Кому она мешала? Больше не работают ссылки из Гугла (ребята видимо не в курсе, что гипертекст — это целостность ссылок, в первую очередь). Под воем критики спустя какое-то время появился внутренний поиск, но оставьте его себе (переехал на devdocs.io).
Чем больше ответственности берёт на себя фреймворк, тем больше технологическое отставание и в базовых пакетах. Отборные примеры: HTTP/2, Mongo, Node. Скорость сборки заметно возросла с переходом на версию 1.3 (долгожданная поддержка NPM), но это же натурально трэш по-прежнему.
Краеугольный камень продуктивности (да-да-да, говорю только за себя) отправляется на свалку. JS закусил удила, увы. Язык должен быть прост на базовом уровне. Но фреймворк обязан следовать трендам, ага. Реально встречал требование в вакансиях: отвращение к CoffeeScript. Посмотрите, как прекрасен React на CoffeeScript.
GraphQL закрывает вопрос масштабируемости LiveQuery? Поживём-увидим, только оно мне надо сегодня. Пока Horizon опережает в развитии Apollo. Плюс Виктор Грищенко на конференции HolyJS раскритиковал DDP. Мол нет там id-версии в пересылаемых пакетах. А это значит, что если пользователи вышли в оффлайн и вернулись через какое-то время, то "optimistic updates" (aka latency compensation) не сработает и данные потеряются.
Favro — нарядно, но исходники недоступны. Ещё есть RocketChat, но там печалька:
I believe that RocketChat will outgrow Meteor. We have been developing many workarounds to Meteor's limitations. As we develop more specific code to deal with our edge cases, move to ReactJS, create our own plugin/package system and Meteor 1.3 get more compatible with NPM, I can see we getting into a point when de-meteorising Rocket.Chat may be easier and necessary.
Больше ничего интересного не нашёл.
Кстати, вот альтернативные наборы на коленке лобзиком без претензии называться фреймворками: Meatier, lovli.js.
Только сейчас узнал, как оно было задумано:
Meteor is designed to take the technology that used to be exclusive to well-funded frontend teams at Facebook and Google, and put it in the hands of everyone.
Метеор все больше переходит на стек технологий Facebook, видимо хочет слиться в экстазе. Аминь!
Итого
Нужно дойти до горизонта, чтобы увидеть новый горизонт.
PS: ещё один прозрел.
PPS: why frameworks are evil.
Комментарии (27)
KhodeN
10.07.2016 08:17+30Какой-то дамп сознания
comerc
10.07.2016 09:41В точку! Попытался зафиксировать текущее состояние мыслей. Каждый абзац — отдельная карточка в Trello. Сорян, первые 100 просмотров на счетчике — всю ночь вычитывал и редактировал, чтобы привести в удобоваримый вид. Уже наизусть могу повторить написанное.
У меня буквально перевернулся мир после этого доклада, две недели в режиме форсажа принимаю новую информацию.
zuluss
10.07.2016 10:10+5тяжело было наверное, если это удобоваримый вид то что же тогда было изначально…
napa3um
10.07.2016 10:44+14Вы явно переоценили важность ваших мыслей. Попробуйте сформулировать в паре тезисов, к чему должен (или может) прийти читатель, дочитав вашу «статью».
gibson_dev
10.07.2016 11:05Вот и я тоже не смотря что имею дело с метеором, не понял дампа. Автору имеет смысл спрятать в черновики и порефакторить статью
zuluss
10.07.2016 11:44+8Вообще трудно понять и оценить что либо находясь в другом измерении.
Для начала нужно перейти в то состояние в котором был автор при написании статьи, но подробных инструкций он не оставил.
k12th
10.07.2016 13:43+6А что непонятного-то? Метеор — барахло, это было ясно уже давно. Монолиты еще ни к чему хорошему не приводили («Космическая одиссея» не в счет:)).
Large
10.07.2016 16:56+2Да, это было предсказуемо. Вопрос в том — что не барахло среди серверных nodejs фреймворков? Попыток что-то сделать было много, а чего-то уровня django так и не построили. С микрофреймворками все по лучше, но иногда не хочется в очередной раз делать авторизацию, рест и прочие стандартные вещи снова и снова.
k12th
10.07.2016 17:10+1Есть такая проблема, согласен. Но я думаю, что еще все впереди, django тоже не сразу строился. Интересно, кстати, как там sails.js поживает.
Large
10.07.2016 17:32+1Плохо поживает =) В смысле они то развиваются понемногу, но вот модули у них все еще слабые и как-то нескладно выглядят что-ли + еще и не работают часто (пробовал как раз авторизацию с правами включить и это было сомнительное удовольствие). Кроме того вряд ли они успеют перестроится на промисы, генераторы (и возможно асинхронные функции). Я больше надеюсь на что-то совершенно новое, но пока кандидатов на фреймворк мечты не видно.
B_Rudenko
10.07.2016 22:08+1Да как то непонятно у них все. Какая то часть мейнтейнеров отвалилась от проекта и начала пилить свой самый лучший фреймворк, trailsjs называется.
stalkerg
11.07.2016 12:59Django это как раз монолит. Для python есть много куда более приятных и гибких фреймворков (я до сих пор использую Pylons).
А в последнее время так вообще, во многом плюсы у Tornado и asyncio перевешивают в пользу отказа от не асинхронных фреймворков.
NeoCode
10.07.2016 17:05+7А прикольно читать такие дампы сознания. Ничего не понятно, а хакерскую атмосферность создают))
spmbt
11.07.2016 15:18А не подскажут ли знающие, что лучше Метеора и других full-stack (или тут ещё одно слово-сининим вкручивают — консистентных, что ли) сред программирования на JS? Где максимально избавились от фреймворковости?
k12th
11.07.2016 15:53Посмотрите Derby.js — фреймворк того же назначения, но клянется, что модулярный.
spmbt
11.07.2016 19:30Модулярность — это не то. Ангуляр модулярный, но жёсткий по структуре. А есть ли либы с единым JS, но примерно как Backbone по отношению к Ангуляру, Ember, ExtJS, и многим другим?
k12th
11.07.2016 19:55Нет. Ангуляр имеет отношение к модульности не более, чем очковая кобра к этому оптическому прибору.
Просто сходите по ссылке, ок?
AllexIn
Что это? О чем это? Зачем это?
voidMan
Видимо человека ещё не «отпустило» )