Meteor简介
Meteor介绍
如果你有仔细观察最近几年的Web开发状态的话,你会发现两种清晰的趋势。第一是,Web应用越来越强大,且与桌面应用的界线也越来越模糊。坦白地说,用户完全不关心应用后面使用的什么技术,他们只是希望有一个好的用户体验,这其中包括点击时能马上响应、也其它用户的实时沟通、与其他服务的记好集成等等。每二个趋势是如此之快地涌现出大量的语言、库、工具、框架、工作流等,以至于开发者们疲于应付,无力追赶。
总之,当前的Web开发的现状是:
- 用户希望从应用中得到更多方便。
- 开发者希望减少使不同的库能一起正常工作的担心,或不再所谓的管道代码。
Meteor背后的故事
当Geoff Schmidt,Matt DeBergalis和Nick Martin接受了Y Combinator创业种子加速器后,他们计划建立一个旅游推荐网站。但当他们与其他初创公司交谈后,他们意识到那些创业公司是多么的挣扎,尽管他们在Asana工作时已经解决了同样的挑战。那一个关于协同项目和任务管理的在线平台。于是,他们改变了计划,决定创建一个开源平台,为开发像桌面应用程序那样样干滑的Web应用提供一个坚实的基础。
到2011年12月份, Meteor开发组(Meteor Development Group, MDG) 宣布了第一个开发预览版,名字叫Skybreak,随后很快被更名为Meteor。仅仅8个月后,该项目已融资了1120万美元。这些资金来源于行业大佬们,如如Andreessen Horowitz、 Matrix Partners、Peter Levine(XenSource前首席执行官)、Dustin Moskovitz(Facebook联合创始人),Rod Johnson(SpringSource创始人)。Meteor的GitHub库中一直是排名前20最流行的库之一,在其1.0版本发布后,排名更是跃至指点11位,比Linux内核、Mac OS X的软件包管理器程序homebrew以及backbone.js拥有更多的star。
为什么Meteor会如此受开发者的欢迎呢?或许是Meteor不再让开发都困于底层基础代码的创建,如数据同步,让开发者专注于开发业务功能。随着超过1100万美元的资金注入,投资者发现Meteor非常具有吸引力。正如类似的情况发生在Xen(免费的服务器虚拟化管理程序)、或JBoss(Java的应用服务器),MDG的最终会为企业市场会提供额外的工具。
The MDG 将项目分为4个部分:
诸如命令行界面(CLI)的工具集。这是像nake一样的构建工具和像node npm一样的包管理器的混合物。主要为将要发布的Web和Mobile项目的整体构建与管理。
软件库的集合。这是一整套核心功能组件包,可被自定义组件包进行扩展或者由 npm安装的node模块扩展。
各种协议的标准,如DDP(Distributed Data Protocol)、基于Websocket的数据协议。
服务。官方的托管服务、包托服务器,以及构建集群。
所有的Meteor的项目都使用一个统一的接口进行访问,这样开发人员就不需要知道哪些组件构成了整个Meteor。
Meteor组件
简单的说,Meteor是完全使用JavaScript创建丰富的Web应用程序的一个开放源码的平台。它在一个框架下捆绑和提供了所有需要的功能。它由Node.js、MongoDB、实际的应用程序代码、以及一个强大的命令行工具,组合成了强大的npm和make工具集。因此,它比服务器进程和库的组合要强大许多。这也是许多人喜欢把它称为一个完整的生态系统,而不仅仅是一个框架的原因。但是,即使它超越了其他Web框架提供的功能,在它的核心,它仍然依赖于组件栈来运行应用程序。
Meteor的组件栈是MEAN家族的成员,这也意味着在服务器端Meteor由Node.js驱动。Node.js是一个事件驱动的,高度可扩展的运行服务器上的Javascript运行时环境,它如同Apache在LAMP(Linux, Apache, MySQL, PHP)中所起的作用一样。
所有的数据通常存储在MongoDB面向文档的NoSQL数据库中。Meteor也有支持其他计划(基于SQL)数据库系统的诗雅,但目前唯一的建议是使用Mongo数据库。MongoDB提供了一个JavaScript API,可以以文档或对象的形式访问所有存储的内容。在浏览器中以同样的语言来访问数据,如此一来Meteor可利用此优势实现真正的全栈开发。
所有从零开始创建Web应用程序所需的软件和库都以智能包(smart packages)的形式捆绑在Meteor中,因此开发人员可以更快捷的开始开发。这些软件包包括一个响应式的用户界面库(Blaze),用户帐户管理(accounts)等等。Meteor的CLI工具允许开发者快速建立一个完整的开发环境, 而不需要如何安装或配置服务器软件;Meteor完整地接管了开发应用的基础设施的方方面面。它同时也是一个构建工具,类似于make和grunt,和包管理器,如APT或NPM。比如,它可以快速地编译那些预处理语言,如LESS和CoffeeScript,而不需要事先设置处理流程, 也不需要使用任何命令来为认证添加Facebook OAuth组件。最后,CLI工具应用程序打包,以使应用可以运行在不同的客户端平台,如在浏览器中运行或用为原生移动应用程序运行。
Meteor组件栈的所有部分都无缝集成,所有的核心软件包经过精心设计和严格测试,以保证它们可正确工作。另一方面,如果需要,它完全有可能切换到其他的组件。在一些情况下,可以不使用Meteor全部组件栈,你可以决定只使用Meteor服务器组件,然后在客户端的Angular.js,或者使用java后端,同时使用Meteor前端为所有客户提供实时更新。