Meteor:网络应用开发的瑞士军刀

jopen 8年前
原文  http://www.infoq.com/cn/news/2015/11/meteor
 

自从Node.js撼动整个Web开发领域以来,JavaScript Web全栈开发框架层出不穷,但是随着时间流逝,人们也逐渐意识到Node.js并不适合所有场景,一体化的开发框架也不一定适合JavaScript, 众多JS Web框架纷纷沉寂,但唯有Meteor以其韧性坚持下来并脱颖而出,成为JavaScript Web开发框架的代表。

2011年组建的 Meteor 毕 业于YCombinator训练营,成员来自Google等巨头企业。迄今为止,Meteor开发团队已经拿到了多轮投资,包括早期Andressen Horowitz领投的1000万美元,以及在推出Galaxy前夕的融资2000万美元。Meteor于2014年十月发布1.0版本,2015年的八 月份,Meteor超过Rails,Github Star数接近3万,成为GitHub最受欢迎的网络应用开发框架。

作为一个开源框架,Meteor有着产品级的实时性和跨平台特性,提供多种功能且易用性极佳。InfoQ一直关注Meteor的发展情况,并进行了跟踪报 道。近日Meteor发布了Galaxy应用托管服务,标志着Meteor正式进入商业运营的阶段。本文将回顾Meteor的发展,并分析Meteor的 优缺点,以及Meteor的未来。InfoQ记者还就相关问题请教了Vue.js作者、Meteor的开发者之一尤雨溪。

Meteor的发展

Meteor早期版本以实时框架为卖点,外界对它的关注大约从0.4版本开始,这个版本将其Node.js依赖从0.6更新到0.8版本,而Node.js也正是从0.8版本开始渐渐普及。下面列出Meteor的主要版本更新:

  • 2012年9月发布0.4版本,添加智能邮件发送包,更新 Node.js 从 0.6 到 0.8 版本。
  • 2013年0.5.x版本,从0.5版本开始,Meteor做了相当大的变动,目标将基于Metero的应用扩展到百万用户级别。 0.5.3版增 加了对环境变量的支持,支持更多可配置的开发环境。0.5.7版在性能和伸缩性上做了不少改进。0.5.8班包含客户端数据库更新,增加对 AppCache 支持,改进了底层的 Deps 工具,支持CoffeeScript。
  • 0.6版本包含一个全新的系统用于分发Meteor和更新应用,同时增加应用专有的包以及直接支持 NPM 模块。
  • 0.7版本实现一个新的数据库驱动器,使用MongoDB数据库复制日志来更高效的监控查询。
  • 0.8版本用Blaze模板引擎替代2012年引入的Spark引擎,Spark被称为jQuery的声明式版本,不过显然它并未代表未来的趋势。
  • 0.9版本开始丰富整个生态系统,0.9.0版本发布了官方的Meteor packaging系统,包括Isobuild构建系统和Meteor Package Server。0.9.2 版本首次支持使用PhoneGap构建iOS和Android移动应用。
  • 1.0版本与2014年10月发布,作为一个里程碑版本并不包含重大更新,但更新了文档,优化了用户体验。
  • 1.1版本终于开始支持Windows操作系统,同时还支持MongoDB 3.0版本。
  • 1.2版本开始支持ES6、AngularJS和React,前段时间还发布了Angular Meteor 1.2.0版,这是为Angular定制的版本。
  • 另外前段时间还发布了Galaxy,这是为Meteor应用提供托管的官方服务。

从上面的更新我们可以看到Meteor不止是在打造一个框架,也是在构建一个从研发到部署、从Web到移动的、JavaScript全栈开发的生态链,这是开发者选择Meteor的原因之一。

Why Meteor

从 发展趋势来看,Meteor的出现并不是偶然。在Web开发中,一体化的框架非常多,如Rails就是其中的杰出代表,以其快速开发的能力受到人们青睐。 Node.js横空出世以来,最主流的Web框架是Express,但是它只能算微框架,要想开发出一个功能完整的应用还需要大量的配置和很多的功能插 件。市面上并没有主流的Node.js一体化框架,Meteor瞄准了这个缺口,也获得了市场的承认和开发者的喜爱。

从开发者的众多反馈来看,选择Meteor的原因不外乎下面几点:社区活跃、学习难度低、大量原生功能和优秀的生态系统,以及其主要的卖点:实时性框架。

  • 社区活跃:Meteor无论在GitHub、StackOverflow还是推ter等社交媒体上,用户活跃度都超过其他开发框架一个数量级,活跃的社区代表开发者正在进行频繁的交流和讨论,有助于问题的解决和框架的推广传播。
  • 学习难度低:如上文所说,Meteor是前后端甚至数据库都可统一开发的JavaScript框架,开发者无需掌握多种不同工具即可完成网络应用的构建。Meteor在设计之初就考虑了简明的理念,在官方教程的帮助下,开发者一个小时之内就能学会基本开发。
  • 大量原生功能:支持多重数据库、视图、地址分配、安全、性能工具、测试、移动等功能,涵盖整个网络应用开发周期
  • 优秀生态系统:迄今为止,Meteor在线代码库中包含超过五千个第三方组件,而且数目仍然在迅速增长。

另外,Meteor从最开始的一个重要卖点就是实时框架,而现在实时性在Web应用甚至移动应用中用到的地方越来越多,证明Meteor选择这个方向也是对的。

Why Not Meteor

当然,Meteor并不是没有缺点,比如近期推出的Galaxy就遭到了诟病,Meteor本身是为了降低开发门槛,快速开发,适用于中小团队和创业者,但是Galaxy最低每月500美元的价格与这个定位并不匹配,在发布之后受到开发者的非议。

除了这个之外,Meteor缺乏大型成功案例,没有经过实践的洗礼,也让开发者怀疑它是否足够成熟可用。在这篇 Meteor在生产环境的实践 的文章里,作者提到了他使用Meteor的痛点,那就是部署在非官方平台的体验并不好,另外,某些关键功能插件并不好用,亟待加强和优化。

而 让人不选择Meteor的根本原因,还与趋势相关。Node.js包管理器NPM十分好用,并且迅速流行开来,对于Node.js开发者来说,依赖NPM 来进行模块化的开发非常方便,而Express框架是很多Node.js开发者入门必学,因此它所倡导的模块化+高度可配置的理念也就默认被人们所接受。 在 这篇文章 里 作者就希望人们使用更多库而不是框架来开发Node.js Web应用。当然,不管趋势如何变化,我们可以肯定的是,至少很长一段时间内,类似于Meteor这样的一体化框架还会有它的市场。尤雨溪表示:“是否使 用框架是按实际情况考虑的。全栈式框架的价值在于对于没有特殊要求的应用,能够在极短的时间内开发出可用的产品。去框架化对于技术人员来说是很浪漫的事 情,但当你拿了融资,需要在几个月内产品上线的情况下,未必有那么充裕的时间去自己整合各种组件,实现一些框架已经实现了的功能。”

Meteor的未来

从目前的表现来看,Meteor正在稳步发展,但是,它所处的环境,无论是Node.js,还是JavaScript社区,都正在剧烈变化当中,谁也不能预测未来Meteor到底能否成功。

在 笔者看来,Meteor的未来是否成功,在很大程度上将取决于移动端,目前Meteor通过PhoneGap来支持移动应用打包,但是,相比于目前移动 Web的发展,它已经有些落后于潮流,React Native才是人们的新宠,InfoQ记者向尤雨溪询问Meteor是否有计划支持React Native,他表示React Native的运行环境和打包方式都和现在集成Cordova的方式区别很大,因此目前还没有具体的计划,不过未来肯定会去尝试。希望Meteor在这方 面更激进一些,像1.2版本支持ES6、Angular和React,就十分受到开发者的欢迎。

另外,Galaxy的发布,也让人担心,Meteor的重心是否转向提供服务,框架的功能创新是否会放慢速度。尤雨溪则表示无需担心,因为只有保持框架本身的竞争力才能为Galaxy吸引到客户,所以肯定不会对框架本身松懈的。

至 于近一段时间Meteor的开发计划,尤雨溪介绍道,他们已经在计划对Meteor本身进行一些大的改动来解决一些社区公认的问题,比如Meteor自身 的模块系统一直受人诟病,他们在1.3会加入对ES6 module的支持。另外还会加强对于NPM的原生支持,让Meteor应用可以更简单地调用NPM上的资源。

JavaScript 社区一直充满活力,每天各种各样的框架层出不穷,但是真正成功商业化的不多,我们也衷心希望Meteor能为JavaScript框架探索出一条成功的道 路。对开发者来说,Meteor作为一款功能全面、简单好用的一体化框架,在开发Node.js Web应用的时候,是一个不错的选择。