Что такое Meteor?
Это не очередной javascript фреймворк. Ставить его в один ряд с derby, sails, angular или backbone некорректно. Meteor — это платформа для создания модульных высокоинтерактивных клиент-серверных приложений. Пусть это звучит слегка напыщенно и напоминает маркетинговый
Официальную информацию можете почитать на портале www.meteor.com, а я же хочу рассказать об особо горячо любимых мной фичах.
- Пишем логику на одном языке — результат работает на всех платформах: сервер, браузер, cordova (Android, IOS). Естественно, без особенностей не обходится, но это — мелочи жизни. Apple и Google видят в cordov'е большой потенциал и занимаются развитием поддержки этой технологии: Apple allows hot code push in mobile apps; Новый Chromium WebView теперь обновляется через Google Play и поддерживает Web Components.
- В руководстве проекта — умные и опытные разработчики, которые понимают ценность сообщества, работа с которым построена на твёрдую пятёрку. Ежемесячные devshop-события в штаб-квартире в SF, поддержка через stackoverflow, отличное и всегда актуальное описание API. Отдельно хочу отметить грандиозное событие — Worldwide Meteor Day, посвящённое выходу первой версии. В России, кстати, событие проводится в 2 городах: в Москве и Курске.
- Удобное асинхронное серверное программирование благодаря встроенному Fibers. В 99% случаев при работе с Meteor вы пишете обычный синхронный код, и он работает асинхронно! Странно? Ничего странного: каждый вызов серверного метода работает в своём Fiber'e и не влияет на работу остальных вызовов. Это нереально упрощает структуру кода: любые обращения к БД и другим внешним ресурсам пишутся в синхронном стиле. Недавно смотрел на кусочек кода хорошо написанного обычного асинхронного node.js-приложения, — и у меня на глаза навернулись слёзы. Если кто-то ещё не знаком с Fibers, — настоятельнейшим образом рекомендую!
- Отлично спроектированная абстракция для работы с данными через коллекции. Коллекции представляют одинаковый интерфейс на сервере и на клиенте, что позволяет реализовывать логику в одном стиле и даже расшаривать код между сервером и клиентом.
- Не менее крутая абстракция для вызова серверных методов, выглядящая как вызов асинхронной функции с callback'ом. Забудьте про серверные пути, xhr и сложную структуру кода! В Meteor всё делается очень просто.
- Удобный деплой приложений. Особенно если вы только начинаете свой проект: одной командой из консоли ваш проект публикуется на домене .meteor.com; после деплоя можете перенастроить на ваш_домен.com. Если проект вырос и его требуется перенести на профессиональный хостинг, то, опять же, одной командой проект собирается в node.js-приложение с единственной зависимостью — npm.
- Все рутинные оптимизации (минификация кода, сборка в один файл) и перекомпиляции (less -> css, coffeescript -> js и проч.) производятся автоматически и практически без настройки (прощай новорождённый gulp и уродливый grunt). Для некоторых операций требуется установить пакет (package), что тоже достигается однократным вводом консольной команды.
- Протокол DDP, призванный заменить REST API. Это очень простой но мощный протокол, основанный на EJSON (расширенный JSON). DDP поддерживает RPC и двустороннюю передачу данных (туда и оттуда), работает поверх WebSockets и SockJS. А ещё его легко читать, что может потребоваться в случае особо глубоких дебагов. Кстати, если нужен REST API, то никто не запрещает его использовать. Даже напротив, есть подходы на любой вкус. Просто уже не захочется шагать назад.
- Best practices enforcement. Html, css, less и coffeescript должны быть валидными (иначе проект не скомпилируется), чёткое разделение между шаблонами (spacebars — наследник handlebars), css и js. Чёткое разделение между только серверным, только клиентским и расшаренным кодом. Система пакетов с явными зависимостями (Meteor, npm, cordova), явным экспортом API и полной изоляцией пакетов — мечта для node.js программистов!
И ещё много плюшек, реализованных без странных дизайнерских решений. В итоге получаем инструмент, который позволит решать задачи не отвлекаясь на рутину. Если вы сейчас выбираете node.js фреймворк для вашего будущего проекта, без колебаний останавливайтесь на Meteor — ваши мучения прекратятся, а волосы станут мягкими и шелковистыми.
Литература
- Всегда актуальная литература по Meteor (постоянно обновляется и пополняется): https://www.discovermeteor.com/
- Официальные документы: https://docs.meteor.com/#/full/
- Официальный туториал: https://www.meteor.com/install
- Google-группы: https://groups.google.com/forum/#!forum/meteor-core, https://groups.google.com/forum/#!forum/meteor-talk
- Блог Meteorhacks: https://meteorhacks.com/
- Хардкор-блог Eventedmind: https://www.eventedmind.com/
- Пара моих постов о Meteor: http://www.solidmeteor.com/
- Более полный список ресурсов для изучения: https://hackpad.com/Top-Resources-for-learning-MeteorJS-Nrpnr6CHiGs
- Совсем полный список (полнее просто некуда): https://github.com/ericdouglas/Meteor-Learning
Для тех, кто не выдержал и пролистал до конца: Meteor — наикрутейшая вещь. Для разработчиков: начинайте работать с ним сейчас, потому что завтра Meteor-разработчики станут очень востребованными. Для бизнесменов: один Meteor-разработчик заменит frontend, backend, IOS и Android разработчика; нет, это не шутка: примеры успешных проинвестированных и даже (некоторых) проданных проектов: https://respond.ly/, http://versoapp.com/#verso, http://www.classcraft.com/, http://blonk.co/, https://lookback.io/.
Boo!