Sails.js vs Meteor-两者的优点是什么?[关闭]


81

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

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

我已经阅读了两者,但是仍然不能完全理解它们之间的差异,以及为什么我应该选择在另一种之上使用。因此,请戴上您最好的推销员帽子,挑选一个框架,然后卖给我。

我的宠物项目需要具备以下功能:

  • 现场比分
  • 类似于Reddit的线程,实时
  • 类似于Wikipedia的网页版
  • 用户/角色

1
检查此链接:vschart.com/compare/meteor-web-framework/vs/sails-js。它可以帮助您!
tuchi35,2014年

Answers:


137

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

tldr; Sails并不是解决所有Web问题的灵丹妙药,但我相信Node.js确实是。Sails的目标是提供一个实用的框架,以开发基于node.js的完整,可伸缩,启动和企业友好型应用程序。我从Balderdash开始时提出了一个问题:“我们可以对所有内容使用Node.js吗?”。帆是答案。


从我们的新文档

Sails当然是一个Web框架。但是退后一步。那是什么意思?有时,当我们提到“网络”时,我们指的是“前端网络”。我们想到的概念包括Web标准,HTML 5或CSS 3。以及Backbone,Angular或jQuery之类的框架。Sails不是Web框架的“那种”。Sails与Angular和Backbone配合使用非常好,但是您永远不会使用Sails代替这些库。

另一方面,有时当我们谈论“ Web框架”时,我们指的是“后端Web”。这引起了诸如REST,HTTP或WebSockets等概念。并以Java,Ruby,Node.js等技术为基础。“后端Web”框架可帮助您执行诸如构建API,与数据库交互,提供HTML文件以及处理成千上万同时用户的任务。Sails是“那种” Web框架。

几年前,我承诺将Node.js用于所有内容-一见钟情。我在ExpressSocket.io的基础上构建了Sails,因为它们是(并且仍然是)各自使用案例中最完善的Node模块。Sails中的请求处理代码与Express兼容,并具有隐式支持Socket.io的其他优点。

Sails旨在与您在Angular,Backbone,iOS / ObjC,Android / Java中构建前端的任何策略兼容,甚至仅提供供其他Web服务或您的原始API使用的策略。开发者社区。如果您最终改变了方法(例如,从骨干切换到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,那么我会选择后者。


其他资源:

常见问题| 帆101 | 原始截屏| 贡献指南| 堆栈溢出

Google网上论坛| 路线图| IRC:Freenode上的#sailsjs | 建立状态


2
跑进在这里这个问题的另一个很好的视角(第一个答案):linkedin.com/groups/...
mikermcneil


@AaronShafovaloff感谢大家的注意-这是更新的链接:sailsjs.org/get-started
mikermcneil

30

我已经与Meteor建立了几个项目,但尚未与Sails合作。因此,我的意见肯定会有所偏颇,希望无论如何会有所帮助。

建立前端

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

另一方面,Sails仅提供一个后端框架,您将必须带上自己的前端框架。

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

Meteor循环运行,如果您想使用Node.js程序包,则必须做一些额外的工作以确保它们在Meteor中正常运行。

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

您应该将MongoDB与Meteor一起使用

是的,您可以将其他数据库与Meteor一起使用,但它们所提供的支持与MongoDB差不多。而对于Sails,看起来他们有几个数据库的ORM。

性能

对于大规模应用,Meteor的性能可能不佳。解决此问题的工作很多,到2014年底,我们可以预期会有流星的扩展解决方案。

稳定性

流星仍然非常新鲜,尚未达到1.0。您应该期望在接下来的几个版本中进行一些更改,这些更改将破坏向后兼容性。如果您尽快开始使用它,则可能要考虑使用0.8-rc0分支。话虽这么说,管道中的某些功能确实很棒,并且将使1.0版本非常诱人。

最后的想法?

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

PS Checkout路线图,以了解即将发生的事情。


5
我建议修改“流星同步”语句,因为它可能给那些不熟悉nodejs光纤的人以错误的印象。流星在Node.js上运行,因此您仍然可以获得其事件驱动的非阻塞优势。流星透明地集成了节点光纤,因此服务器端代码可以在线性执行模型中编写,而不必将其分解为传统的回调。对于npm与流星一起使用软件包,这可能是最好的参考:meteorhacks.com/complete-npm-integration-for-meteor.html
2014年

感谢Alanning,我将把您的反馈意见整合到此回复中!
MSaforrian

8
也许一件重要的事情是,sails.js仅用于后端,而流星则提供了一个完整的前端javascript框架来轻松使用后端。
迈克尔

感谢您提出来,@ Michael。Sails.js和Meteor并没有真正的竞争-Sails.js是Node.js的后端框架,可以代替Django,Rails,Express等使用,而Meteor是一种新的思考方式自上而下构建反应性应用程序-我认为这真的很酷:)
mikermcneil 2015年

自您评论发表以来已有4年之久,您是否愿意更新评论?我肯定希望就新游戏改变流星1.7提出意见
。– Shyam

19

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

效果非常好 -入门非常好,发布的材料给了我很大的支持-学习曲线很短,帆后面有一个健康的社区-初步学习后,很快就很容易发挥创造力

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

建议 -Ponzi编码器有一个很好的教程,它确实帮助了我https://www.youtube.com/user/ponzicoder- 了解更多有关Express和Waterline的知识,将在您尝试更复杂的数据挑战时有所帮助

总的来说,我会推荐帆。


1
嗨,西蒙,能否请您分享一下如何将护照与帆整合在一起?我陷入了同样的问题。您是否在某个地方写过博客或有任何参考资料?
Mitermayer Reis 2014年

2
您好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) },
simondelliott 2014年

1
哇谢谢你。几天来,我一直在使用本地策略。这值得它自己的堆栈溢出帖子
light24bulbs 2014年

1
实际上,Passport.js集成需要更多的文档资料,但强调不够。专门针对不进行服务器渲染的REST API用例(例如针对有角JS客户端),结合了facebook / google登录名和本地身份验证。
阿隆·阿米尔

1
Upvote Passport.js难以集成且文档记录很差
pim

9

我目前使用Meteor,但尚未使用Sails.js。

Meteor的使用非常愉快,我认为它将是实时Web应用程序的绝佳选择。关于用户/角色,您可以签出集成的Accounts程序包,也可以在Atmosphere中搜索社区贡献的角色/权限程序包。

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


您是否知道Sail.js在客户端是否具有类似于流星在模型级别的延迟补偿的任何延迟补偿?
imslavko 2014年

不了解Sail.js,但您可以使用sharejs.org lib自己添加它。至少这似乎是lib的目标。
拍摄

1
@alanning-不,sharejs不执行延迟补偿。Sharejs进行操作转换。延迟补偿是当Meteor对其本地minimongo进行更新并假定远程更新将成功完成并允许用户继续时。
gomad

1
@gomad,您是正确的,sharejs不提供开箱即用的延迟补偿。我没有说是的。相反,我说:“您可能可以使用sharejs.org自己添加它”。LC建立在OT之上。
2014年

只是一个补充说明。我认为流星使用起来非常愉快。有一些学习曲线,但除此之外,该框架与如何描述红宝石的轨道非常相似。目前,我目前唯一的抱怨是,如果您希望自托管,它仍然取决于节点0.10.40。因为流星有一个相当大的基数,所以我相信有节点的追赶游戏对流星来说有点不公平。
Jimmy MG Lim
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.