Sails.js против Meteor - в чем преимущества обоих? [закрыто]

81

Я много читал о Nodejs и его фреймворках и недавно закончил свой первый полный интерфейс javascript (с использованием Angularjs).

Я решил, что моим следующим любимым проектом будет приключение Nodejs с использованием одного из этих двух фреймворков:

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

Некоторые функции, которые мне нужны для моего любимого проекта:

  • Текущие результаты
  • Reddit-подобные темы, в реальном времени
  • Версия страницы, подобная Википедии
  • Пользователи / роли
Pedropeixoto
источник
1
Проверьте эту ссылку: vschart.com/compare/meteor-web-framework/vs/sails-js . Это может вам помочь !!
tuchi35

Ответы:

138

Я не могу говорить от имени Meteor, но могу помочь рассказать немного о Sails, потому что я его создал.

tldr; Паруса - не панацея от всех проблем Интернета, но я считаю, что Node.js. Цель Sails - предоставить практическую основу для разработки полных, масштабируемых, запускаемых и удобных для предприятий приложений, построенных на node.js. Я начал Balderdash с вопроса «Можно ли использовать Node.js для всего?». Паруса - вот ответ.


Из наших новых документов :

Sails - это, конечно же, веб-фреймворк. Но сделай шаг назад. Что это значит? Иногда, когда мы говорим о сети, мы имеем в виду «интерфейсную сеть». Мы думаем о таких понятиях, как веб-стандарты, HTML 5 или CSS 3; и такие фреймворки, как Backbone, Angular или jQuery. Sails - это не «такой» веб-фреймворк. Sails отлично работает с Angular и Backbone, но вы никогда не будете использовать Sails вместо этих библиотек.

С другой стороны, иногда, когда мы говорим о «веб-фреймворках», мы имеем в виду «внутреннюю сеть». Это вызывает такие понятия, как REST, HTTP или WebSockets; и построен на таких технологиях, как Java, Ruby или Node.js. «Внутренняя веб-среда» помогает вам делать такие вещи, как создание API-интерфейсов, взаимодействие с базами данных, обслуживание HTML-файлов и одновременное обслуживание сотен тысяч пользователей. Sails - это «такой» веб-фреймворк.

Пару лет назад я взял на себя обязательство использовать Node.js для всего - это была любовь с первого взгляда . Я создал Sails на основе Express и Socket.io, потому что они были (и остаются) наиболее хорошо зарекомендовавшими себя модулями Node для своих соответствующих случаев использования. Код обработки запросов в Sails является Express-совместимым с дополнительным преимуществом неявной поддержки Socket.io.

Sails спроектирован так, чтобы быть совместимым с любой стратегией, которую вы используете для создания вашего интерфейса (ов) на Angular, Backbone, iOS / ObjC, Android / Java, или даже просто предлагая необработанный API для использования другим веб-сервисом или вашим Сообщество разработчиков. Если вы в конечном итоге измените свой подход (например, переключитесь с Backbone на Angular) или полностью создадите новый интерфейс (например, создадите собственное приложение для Windows Phone), ваше приложение Sails все равно будет работать. Как вы, возможно, уже знаете, некоторые люди называют этот подход сервис-ориентированной архитектурой или SOA (у Джо Макканна есть отличная колода по этому вопросу).

В том же духе Sails поддерживает другие знакомые соглашения для создания веб-серверов - стандартную структуру MVC, возможность создавать чистые API-интерфейсы и основные модули, которые являются открытыми, настраиваемыми, расширяемыми и даже заменяемыми. Это означает, что Sails можно настроить в соответствии с потребностями пользователей, насколько это необходимо.

В 2013 году этот фреймворк стал популярнее, и наш консалтинговый бизнес вырос. Остальные основные специалисты по сопровождению и я расширили наше внимание, сделав бэкэнд-разработку как можно более быстрой и простой. Связанные с ним аспекты Sails, такие как хуки (плагины), тестирование и документация, за последний год прошли долгий путь благодаря усилиям как нашей основной команды, так и (постоянно расширяющегося) сообщества Sails в целом. Есть множество элементов дорожной карты, над которыми мы все еще работаем, но я считаю, что Sails - лучший вариант для стабильной, поддерживаемой разработки MVC на Node сегодня. Остальная часть команды и я привержены его постоянному обслуживанию и развитию функций, и, поскольку мы используем его для всех наших клиентских проектов, он никуда не денется.

Я безоговорочно привержен тому, чтобы сделать Sails лучшим веб-фреймворком, но никогда не за счет Node.js. Основная команда и я без устали преданы совершенствованию экосистемы Node, а это означает принятие NPM, использование существующих технологий Node и лучших практик и т. Д. Не только потому, что это имеет больше смысла, но потому, что мы разработчики Node.js. Мотивация всех наших усилий - сделать Node более доступным, а не вытеснить его. Итак, если бы в какой-то странной параллельной вселенной мне дали фаустовский выбор между преобразованием Sails на какой-то другой язык или полным отказом от Sails, но все еще способным использовать Node, я бы выбрал последнее.


Дополнительные ресурсы:

FAQ | Паруса 101 | Оригинальный скринкаст | Руководство по вкладу | Переполнение стека

Группа Google | Дорожная карта | IRC: #sailsjs на Freenode | Статус сборки

Mikermcneil
источник
2
Познакомьтесь с другой хорошей точкой зрения на этот вопрос здесь (первый ответ): linkedin.com/groups/…
mikermcneil
1
github.com/balderdashy/sails-docs/blob/master/What-Is-Sails.md - это 404-е место
Аарон Шафовалов
@AaronShafovaloff, спасибо за внимание - вот обновленная ссылка: sailsjs.org/get-started
mikermcneil
30

Я создал пару проектов с Meteor и еще не работал с Sails. Так что мое мнение будет определенно необъективным, надеюсь, оно в любом случае будет полезным.

Создание интерфейса

Meteor предоставляет собственный интерфейсный фреймворк под названием Blaze, который будет включен в грядущий выпуск 0.8. Meteor заботится о привязке данных из ваших коллекций к вашим представлениям. Из-за этого вам не нужно беспокоиться о том, чтобы сообщить своим представлениям об обновлении, они просто делают это.

С другой стороны, Sails предоставляет только бэкэнд-фреймворк, и вам придется принести свой собственный интерфейсный фреймворк.

В отличие от большинства фреймворков Node.js, Meteor работает синхронно.

Meteor работает в цикле, и если вы хотите использовать пакеты Node.js, вам придется проделать дополнительную работу, чтобы убедиться, что они правильно работают в Meteor.

Кажется, что Sails - это простой фреймворк MVC Node.js, поэтому не должно быть ничего удивительного, когда вы в него заглядываете.

Вы должны использовать MongoDB с Meteor

Да, вы можете использовать другие базы данных с Meteor, но у них нет такой же поддержки, как у MongoDB. В то время как с Sails, похоже, у них есть ORM для пары баз данных.

Спектакль

Для крупномасштабных приложений Meteor может не работать хорошо . Для решения этой проблемы проводится большая работа, и к концу 2014 года мы можем ожидать появления масштабируемых решений для Meteor.

Стабильность

Meteor все еще очень свежий и еще не достиг 1.0. Вы должны ожидать, что в следующие пару выпусков будут внесены некоторые изменения, которые нарушат обратную совместимость. Если вы начинаете работать с ним как можно скорее, вы можете рассмотреть возможность использования ветки 0.8-rc0. При этом некоторые функции в конвейере действительно великолепны и сделают версию 1.0 очень привлекательной.

Последние мысли?

Мне нравится Meteor из-за его особенностей. Вам нужно будет изучить способ действия Meteor, но как только вы начнете это делать, вы почувствуете, что выпили kool-aid. Из-за способа привязки данных к просмотрам линии между сервером и клиентом не далеки. Meteor представляет собой сдвиг парадигмы в архитектуре приложений, и если вы еще не пробовали его, я бы порекомендовал его.

PS Ознакомьтесь с дорожной картой, чтобы почувствовать, что будет дальше.

MSaforrian
источник
5
Я бы посоветовал изменить выражение «метеор синхронен», поскольку оно может произвести неправильное впечатление у тех, кто не знаком с волокнами nodejs. Meteor работает на Node.js, поэтому вы по-прежнему получаете его неблокирующие преимущества, связанные с событиями. Meteor прозрачно интегрирует node Fibers, поэтому код на стороне сервера можно писать в линейной модели выполнения, а не разделять вещи на традиционные обратные вызовы. Это, вероятно, лучший справочник по использованию npmпакетов с метеором: meteorhacks.com/complete-npm-integration-for-meteor.html
alanning
Спасибо, Аланнинг, я включу ваш отзыв в этот ответ!
MSaforrian
8
Возможно, одна важная вещь заключается в том, что sails.js предназначен только для бэкэнда, в то время как Meteor предлагает весь интерфейс javascript-фреймворка для простой работы с бэкэндом.
Майкл
Спасибо, что подняли этот вопрос, @Michael. Sails.js и Meteor на самом деле не конкурируют - Sails.js - это бэкэнд-фреймворк для Node.js, который вы можете использовать вместо чего-то вроде Django, Rails, Express и т. Д., Тогда как Meteor - это новый способ мышления о том, как создавать реактивные приложения сверху вниз - что я думаю, кстати, действительно круто :)
mikermcneil
Не хотели бы вы обновить свой комментарий, поскольку с момента вашего обзора прошло более 4 лет? Я определенно хотел бы узнать мнение о новом метеоре, который меняет правила игры, 1.7 ..
Шьям
19

Я могу высказать свое мнение только о парусах. Я чрезвычайно опытный разработчик Javascript и с 90-х создавал приложения для встроенных телевизионных приставок, основанные на Javascript.

Вещи, которые сработали действительно хорошо - Начало работы было отличным, и я чувствовал большую поддержку в опубликованных материалах - Кривая обучения была очень короткой, и за парусами стоит здоровое сообщество - После начального обучения очень легко быстро проявить творческий подход

Вещи, которые можно улучшить - сложные структуры данных сложно реализовать - интеграция Passport.js была болезненной из-за отсутствия чистых справочных материалов

Рекомендации - у Ponzi coder есть отличное руководство, и оно действительно помогло мне начать работу https://www.youtube.com/user/ponzicoder - Дополнительные сведения об экспрессе и ватерлинии помогут вам, когда вы попытаетесь решить более сложные задачи с данными

В целом я бы рекомендовал паруса.

Simondelliott
источник
1
Привет, Саймон, не могли бы вы рассказать, как вам удалось интегрировать паспорт с парусами? Я застрял в той же проблеме. Вы писали где-нибудь блог или у вас есть справочные материалы?
Митермайер Рейс 08
2
Привет, Митермайер, извини, но мой блог давно умер из-за пренебрежения. То, что заставило меня работать с паспортом, было осознание того, что если я сделаю две вещи, все будет нормально. 1 везде имена полей по умолчанию (адрес электронной почты и пароль) 2 передать объект req в обратный вызов passport.use('local-login', new LocalStrategy({ usernameField : 'email', passwordField : 'password', passReqToCallback : true // allows us to pass in the req from our route (lets us check if a user is logged in or not) },
simondelliott
1
Вау, спасибо. У меня были проблемы с местной стратегией в течение нескольких дней. Это заслуживает отдельного сообщения о переполнении стека
light24bulbs
1
Интеграция Passport.js действительно требует большего количества документации, я не мог этого достаточно подчеркнуть. Специально для случая использования REST API, когда серверный рендеринг не выполняется (например, для клиентов angular JS), сочетающий вход в facebook / google и локальную аутентификацию.
Алон Амир
1
Upvote Passport.js сложно интегрировать и плохо документировать
pim
9

В настоящее время я использую Meteor и не использовал Sails.js.

С Meteor было очень приятно работать, и я думаю, что это будет отличный выбор для веб-приложений в реальном времени. Что касается пользователей / ролей, вы можете проверить интегрированный пакет учетных записей , а также выполнить поиск в атмосфере для пакетов ролей / разрешений, внесенных сообществом.

В конце концов, я бы рекомендовал попробовать небольшой проект с обеими технологиями и посмотреть, какая из них вам больше нравится.

аланнинг
источник
Знаете ли вы, есть ли в Sail.js какой-либо вариант компенсации задержки на стороне клиента, аналогичный компенсации задержки Meteor на уровне модели?
imslavko 07
Не знаю о Sail.js, но вы, вероятно, можете включить его самостоятельно, используя библиотеку sharejs.org . По крайней мере, это похоже на цель библиотеки lib.
alanning 09
1
@alanning - нет, sharejs не выполняет компенсацию задержки. Sharejs выполняет операционные преобразования. Компенсация задержки - это когда Meteor выполняет обновление своего локального минимонго и предполагает, что удаленное обновление будет успешным, позволяя пользователю продолжить.
gomad
1
@gomad, вы правы, sharejs не обеспечивает компенсацию задержки из коробки. Я не сказал, что это так. Скорее, я сказал: «Вы, вероятно, можете включить его самостоятельно, используя sharejs.org». LC построен на ОТ.
alanning
Просто добавленное примечание. Я считаю, что Meteor очень приятно использовать. Придется немного научиться, но в остальном структура очень похожа на то, как вы можете описывать рельсы в рубин. Моя единственная текущая проблема в настоящее время, это все еще зависит от узла 0.10.40, если вы хотите использовать selfhost. Поскольку у Meteor довольно большая база, я считаю, что игра в догонялки с node немного несправедлива для Meteor.
Джимми М.Г. Лим