Sails.js 与 Meteor - 两者的优势是啥? [关闭]

Posted

技术标签:

【中文标题】Sails.js 与 Meteor - 两者的优势是啥? [关闭]【英文标题】:Sails.js vs Meteor - What are the advantages of both? [closed]Sails.js 与 Meteor - 两者的优势是什么? [关闭] 【发布时间】:2014-04-07 18:41:06 【问题描述】:

我已经阅读了很多关于 Nodejs 及其框架的内容,最近完成了我的第一个完整的 javascript 前端(使用 Angularjs)。

我决定我的下一个宠物项目将是使用以下两个框架之一的 Nodejs 冒险:

Sails.js Meteor

我已经阅读了这两种方法,但仍然不能完全理解它们的区别,以及为什么我应该选择使用一种而不是另一种。所以请戴上你最好的推销员帽子,挑选一个框架,然后卖给我。

我的宠物项目需要的一些功能是:

实时比分 类似 Reddit 的线程,实时 类似***的页面编辑 用户/角色

【问题讨论】:

查看此链接:vschart.com/compare/meteor-web-framework/vs/sails-js。它可以帮助你! 【参考方案1】:

我不能代表 Meteor,但我可以帮助提供一点关于 Sails 的背景知识,因为它是我创建的。

tldr; Sails 并不是解决所有网络问题的灵丹妙药——但我相信 Node.js 是。 Sails 的目标是为开发基于 node.js 的完整、可扩展、启动和企业友好型应用程序提供一个实用的框架。我开始Balderdash 的问题是“我们可以将 Node.js 用于所有事情吗?”。帆就是答案。


来自我们的new docs:

当然,Sails 是一个 Web 框架。但是退后一步。那是什么意思?有时,当我们提到“网络”时,我们指的是“前端网络”。我们会想到 Web 标准、html 5 或 CSS 3 等概念;以及 Backbone、Angular 或 jQuery 等框架。 Sails 不是“那种”Web 框架。 Sails 与 Angular 和 Backbone 配合得很好,但你永远不会使用 Sails 来代替那些库。

另一方面,有时当我们谈论“网络框架”时,我们指的是“后端网络”。这唤起了 REST、HTTP 或 WebSockets 等概念;并且基于 Java、Ruby 或 Node.js 等技术构建。 “后端 Web”框架可帮助您执行诸如构建 API、与数据库交互、提供 HTML 文件以及处理数十万并发用户之类的事情。 Sails 就是“那种”网络框架。

几年前,我承诺在所有事情上都使用 Node.js - it was love at first sight。我在 Express 和 Socket.io 之上构建了 Sails,因为它们是(并且仍然是)针对各自用例的最完善的 Node 模块。 Sails 中的请求处理代码与 Express 兼容,并具有隐式支持 Socket.io 的额外优势。

Sails 旨在与您在 Angular、Backbone、ios/ObjC、android/Java 中构建前端的任何策略兼容,甚至只是提供一个原始 API 以供其他网络使用服务或您的开发者社区。如果你最终改变了你的方法(例如从 Backbone 切换到 Angular)或完全构建一个新的前端(例如构建一个 Windows Phone 原生应用程序),你的 Sails 应用程序仍然可以工作。您可能已经知道,有些人将这种方法称为面向服务的架构或 SOA(Joe McCann 对此主题有很好的介绍。)

同样,Sails 还保留了其他熟悉的用于构建 Web 服务器的约定——标准 MVC 结构、创建干净 API 的能力,以及开放、可配置、可扩展甚至可交换的核心模块。这意味着 Sails 可以根据用户的需求进行定制,尽可能低级。

2013 年,该框架的受欢迎程度有了巨大的增长,我们的咨询业务也在增长。其余的核心维护人员和我扩大了我们的关注点,使后端开发尽可能快速和直接。由于我们的核心团队和整个(不断扩大的)Sails 社区的努力,Sails 的相关方面(如钩子(插件)、测试和文档)在过去一年中都取得了长足的进步。我们仍在研究许多路线图项目,但我相信 Sails 是目前在 Node 上进行稳定、可维护的 MVC 开发的最佳选择。我和团队的其他成员都致力于它的持续维护和功能开发,由于我们将它用于我们所有的客户项目,它不会去任何地方。

我坚定不移地致力于将 Sails 打造成目前最好的 Web 框架,但绝不会以牺牲 Node.js 为代价。我和核心团队一直致力于增强 Node 生态系统,这意味着拥抱 NPM,利用现有的 Node 技术和最佳实践等。不仅因为它更有意义,而且因为我们是 Node.js 开发人员。我们所有努力的动机是让 Node 更易于访问,而不是取代它。所以,如果在某个奇怪的平行宇宙中,让我在将 Sails 转换为其他语言或完全放弃 Sails 但仍然能够使用 Node 之间做出浮士德式的选择,我会选择后者。


其他资源:

FAQ | Sails 101 | Original screencast | Contribution Guide | ***

Google Group | Roadmap | IRC: #sailsjs on Freenode | Build Status

【讨论】:

在这里遇到了另一个关于这个问题的好观点(第一个答案):linkedin.com/groups/… github.com/balderdashy/sails-docs/blob/master/What-Is-Sails.md 是 404'ing @AaronShafovaloff 感谢您的提醒 - 这是更新后的链接:sailsjs.org/get-started【参考方案2】:

我目前使用 Meteor,没有使用 Sails.js。

使用 Meteor 非常愉快,我认为它是实时网络应用程序的绝佳选择。关于用户/角色,您可以查看集成的 Accounts 包,也可以搜索 Atmosphere 以获取社区贡献的角色/权限包。

最后,我建议您尝试一个包含这两种技术的小型项目,然后看看您更喜欢哪一种。

【讨论】:

你知道Sail.js在客户端是否有任何类似于Meteor在模型级别的延迟补偿的变化? 不了解 Sail.js,但您可以使用 sharejs.org 库自己包含它。至少这似乎是 lib 的目标。 @alanning - 不,sharejs 不做延迟补偿。 Sharejs 进行操作转换。延迟补偿是 Meteor 对其本地 minimongo 进行更新并假设远程更新将成功,允许用户继续。 @gomad 你说得对,sharejs 不提供开箱即用的延迟补偿。我没有说它确实如此。相反,我说,“您可能可以使用 sharejs.org 自己包含它”。 LC 建立在 OT 之上。 只是一个补充说明。我认为流星使用起来非常愉快。有一点学习曲线,但除此之外,该框架非常类似于您如何将 rails 描述为 ruby​​。我目前唯一的抱怨是,如果您希望自托管,它仍然取决于节点 0.10.40。因为meteor的基数比较大,所以我觉得跟node的追赶游戏对meteor有点不公平。【参考方案3】:

我只能对风帆发表意见。我是一位经验丰富的 Javascript 开发人员,自 90 年代以来一直在构建基于 Javascript 的嵌入式机顶盒应用程序。

效果非常好 - 入门很棒,我觉得出版的材料非常支持 - 学习曲线很短,帆背后有一个健康的社区 - 初步学习后很容易快速发挥创意

可以改进的地方 - 复杂的数据结构难以实现 - Passport.js 集成很痛苦,因为没有干净的参考资料

建议 - 庞氏编码器有一个很棒的教程,它真的帮助我开始https://www.youtube.com/user/ponzicoder - 当您尝试更复杂的数据挑战时,了解有关 express 和 waterline 的更多信息会有所帮助

总的来说,我会推荐风帆。

【讨论】:

嗨,simon,您能分享一下您是如何将护照与帆结合起来的吗?我陷入了同样的问题。您是否在某处写过博客或有任何参考资料? 嗨 Mitermayer,对不起,我的博客很久以前就因疏忽而死了。使护照对我有用的事情是意识到,如果我做了两件事,它似乎就可以了。 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) , 哇,谢谢。几天来,我一直在本地策略上遇到麻烦。这值得它自己的堆栈溢出帖子 Passport.js 集成确实需要更多的文档资料,怎么强调都不过分。专门针对没有发生服务器渲染的 REST API 用例(例如,对于 Angular JS 客户端),结合 facebook/google 登录和本地身份验证。 支持 Passport.js 难以集成且文档记录不完善【参考方案4】:

我已经使用 Meteor 构建了几个项目,但还没有使用 Sails。所以我的意见肯定会有偏见,希望它无论如何都会有所帮助。

构建前端

Meteor 提供了自己的称为 Blaze 的前端框架,将包含在即将发布的 0.8 版本中。 Meteor 负责将集合中的数据绑定到视图。正因为如此,您不必担心告诉您的视图更新,他们会这样做。

另一方面,Sails 只提供后端框架,您必须自带前端框架。

与大多数 Node.js 框架不同,Meteor 是同步的

Meteor 循环运行,如果您想使用 Node.js 包,您必须执行some extra work 以确保它们在 Meteor 中正常运行。

Sails 似乎是一个简单的 MVC Node.js 框架,因此当您研究它时应该不会有什么太令人惊讶的地方。

您应该将 MongoDB 与 Meteor 一起使用

是的,您可以将其他数据库与 Meteor 一起使用,但它们没有与 MongoDB 提供的几乎相同的支持。而在 Sails 中,看起来他们有几个数据库的 ORM。

性能

对于大规模应用 Meteor may not perform well。解决这个问题有很多工作要做,到 2014 年底,我们可以期待 Meteor 的扩展解决方案。

稳定性

Meteor 还很新鲜,还没有达到 1.0。您应该期望在接下来的几个版本中进行一些更改,这些更改将破坏向后兼容性。如果您要尽快开始使用它,那么您可能需要考虑使用 0.8-rc0 分支。话虽如此,管道中的一些功能确实很棒,将使 1.0 版本非常诱人。

最后的想法?

我喜欢 Meteor 是因为它的特质。您将不得不学习 Meteor 的做事方式,但一旦开始这样做,您就会觉得自己喝了酷酷的饮料。由于数据绑定到视图的方式,服务器和客户端之间的线路并不遥远。 Meteor 代表了应用程序架构的范式转变,如果您还没有尝试过,我会推荐它。

PS Checkout the roadmap 了解即将发生的事情。

【讨论】:

我建议修改“meteor 是同步的”语句,因为它可能会给那些不熟悉 nodejs 纤程的人留下错误的印象。 Meteor 在 Node.js 上运行,因此您仍然可以获得它的事件驱动、非阻塞优势。 Meteor 透明地集成了节点 Fiber,因此服务器端代码可以以线性执行模型编写,而不是拆分为传统的回调。这可能是关于使用带有流星的npm 包的最佳参考:meteorhacks.com/complete-npm-integration-for-meteor.html 感谢 Alanning,我会将您的反馈纳入此回复! 也许很重要的一点是,sails.js 仅用于后端,而流星提供了一个完整的前端 javascript 框架以轻松与后端一起工作。 感谢您提出这个问题,@Michael。 Sails.js 和 Meteor 并没有真正竞争——Sails.js 是 Node.js 的后端框架,您可以使用它来代替 Django、Rails、Express 等,而 Meteor 是一种新的思考方式从上到下构建响应式应用程序 - 我认为这真的很酷 :) 您是否愿意更新您的评论,因为您的评论已经超过 4 年了?我当然想就改变游戏规则的新流星 1.7 发表意见..

以上是关于Sails.js 与 Meteor - 两者的优势是啥? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

Sails.js 与本机 WebSockets

Sails js findOne()返回结果,尽管不满足所有条件

如何将凉亭组件与sails.js 连接?

如何将 vue.js 与sails js 一起使用

Node.js / Express with vhost 与 Sails.js 框架应用程序冲突

将 Sails Js 与 Angular 2 集成