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

  • 2015-11-24
  • 本文字数:3208 字

    阅读完需:约 11 分钟

自从 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 还是 Twitter 等社交媒体上,用户活跃度都超过其他开发框架一个数量级,活跃的社区代表开发者正在进行频繁的交流和讨论,有助于问题的解决和框架的推广传播。
  • 学习难度低:如上文所说,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 应用的时候,是一个不错的选择。