Tom Coleman和Sacha Greif今天发布了《探索Meteor》,这是一本介绍Meteor的书。Meteor是一个基于JavaScript的web框架,它的目的是简化实时web应用程序的开发。为展示Meteor的特性以及它的整个生态系统,本书以“Microscope”这个应用程序作为讲解的示例,这是一个类似于Hacker News及Reddit的简单网站,但加入了实时数据的功能。在本书中,Microscope应用从头开始一直到成为一个具有可用功能的应用程序只用了少量的代码,这为读者清晰地展示了Meteor框架的强大功能。
本书由核心章节与边栏章节两部分组成,核心章节将带领读者完成整个Microscope应用程序的创建过程,而边栏章节则解决开发Meteor时一些更基础的东西,包括部署、发布/订阅架构以及响应性。
对于刚开始尝试Meteor,并打算按部就班地一步步学习它的框架的开发者来说,核心章节会更有用一些。尤其在读者能够按顺序阅读时能取得最好的效果。而边栏章节对于想更多地了解框架的内部机制的读者会很有吸引力,其中讲述了框架的底层实际发生了什么事?使用Meteor进行应用程序开发与使用其它框架有什么不同,例如AngularJS?这些章节对于那些哪怕对Meteor本身不感兴趣,但愿意了解实时编程的各种机制与所面对的挑战的读者来说也会很有用。
任何一本书都应该在开篇中说服读者:本书是值得你一读的。对《Discover Meteor》一书来说就意味着它必须回答这个问题:Meteor凭什么吸引我?而本书在这方面做得很好,在它的开篇部分就抛出了一个引人注目的论点,它直接表明了从Meteor是怎样看待未来的web应用程序的:
为了更好的了解Meteor与它的社区,InfoQ与《Discover Meteor》的作者Sacha Greif和Tom Coleman进行了一次对话。
你们是怎样接触到Meteor的,它的哪方面令你们感到兴奋呢?
Sacha:我首次接触Meteor还是在开发Telescope项目的前身的时候。当时我想创建一个类似于“Hacker News for designers”的应用,因此我尝试去寻找开源的社交新闻应用。由于最终也没有找到什么好的选择,我决定让人帮忙一起打造一个自己的版本,然后就与一位Node.js开发者一起展开了工作。
当时,我从一个私下里熟悉我的团队的朋友那边听到了Meteor这名字,并且也告诉了我的开发者。我们决定进行一下尝试,因此就从之前的Node.js切换到了Meteor上。但在一星期之后,那位开发者的工作开始忙了起来,并退出了该项目。我也不想再去花时间去找能与我一起工作的人了,因此我决定自食其力,自己来开发这个应用。既然我在Node.js和Meteor上都没有经验,那我想我还是继续使用Meteor好了。
随后我发现在Telescope项目中使用Meteor开发是一件很有意思的事,当这个应用能够运行之后,我决定将我的工作成果全部开源,期望还会有志趣相投的朋友能够帮助我继续完成这个项目。实际上,这也就是我认识Tom的缘由。
Tom:在我最初听说Meteor之前,我已经对尝试一些服务端的JavaScript框架很感兴趣了。在做了越来越多的前端代码之后(我也渐渐不那么恨JavaScript了),我开始认识到:无论是对有经验的开发人员来说(他们更注重代码重用与可维护性),还是对初学者来说,在服务端使用JavaScript都能带来极大的好处。对于那些编程经验有限的人们来说,能够降低他们进入web应用程序开发的门槛,这让我感到非常兴奋。
在一开始时我并没有特别考虑实时性方面的问题,但当我读过了Meteor的核心特性列表之后,我意识到使用Meteor会让实时功能变得多么简单,web应用的未来又会变得多么棒!因此我抓住了一个机会,在一个小项目的开发中使用了Meteor,之后又加入了那个尚不成熟的社区。
Sacha找到我的时候,我正好有些空闲的时间,他请我帮助他一起完善Telescope这个项目。我觉得这个项目看起来很棒,而且能够为开源做点事情也很吸引我,既能够为社区做些贡献也能够巩固我的知识,何乐而不为呢?那段经历真的很棒,并且也催生了之后的一系列事情。
本书中是使用Meteorite来安装Meteor的各种构件(package)的。究竟Meteorite是什么,它和Meteor这个产品又是什么关系呢?这是来自社区的产物还是某家新公司的官方产品呢?
Tom:Meteor包含了一个智能的构件系统,它能够让你以一种重用性非常好的方式使用各种服务端与客户端代码,以及其它外部资源。不过,直到几周之前还没有一种方便的方式让你编写自己的构件,也没有某种内置的机制能够让你以一种开源的方式共享你的构件(而且至今也没有)。
因此Mike Bannister和我共同将那些原先必须经历的复杂步骤进行了提炼,将第三方构件整合到一个基于Meteor的脚本包装器里(我们称之为Meteorite),随后为了方便大家提交自己的构件又创建了一个构件库,我们称之为Atmosphere。
Meteorite从定义上来说是一个临时性的项目,因为Meteor的核心开发者已经计划将它的功能最终整合到Meteor核心项目里。不过从目前来看,Meteorite能够让这些开发者专注于其它优先级更高的事情上,因为它目前已经“足够好”了。
Atmosphere的过渡计划已经确定好了,我认为它还会继续以某种形式存在,直到Meteor的开发者们最终接手它火上。我相信他们会尽最大的努力让这一过渡尽量平滑。
Meteor社区的情况看上去是怎样的呢?是不是主要参与者都是JavaScript程序员,还是说也有其它社区(例如Java、.NET、Python)的成员参与其中呢?
Sacha:我认为Meteor社区是非常具有多样性的。当然那里有许多JavaScript程序员,不过不了解JavaScript基本上是不可能进行web开发的。我想即使对那些使用Rails、Django或其它web框架的开发者来说,Meteor框架也是非常友好的。
Tom:我想大多数web开发者的背景都是X + JavaScript程序员,这里的X可以代表各种技术。而且只专注于JavaScript这一种技术的人相信也不会很多。当然,像Meteor这样的框架正在改变这一现状,我相信这会带来更多的好处。
总的来说我认为Meteor社区非常棒,人们也很乐于互相帮助。最棒的是我们看着它一天天成长,有越来越多的和谐音符,并且人们总是在帮助别人。
Meteor似乎与MongoDB是紧密耦合的,有没有可能让Meteor工作于其它数据库系统之上呢,这种可行性又有多少呢?
Sacha:目前为止还没有对其它数据库的官方支持,但有些社区成员已经在制作这些构件了,而Meteor团队也在产品路线图中指出了将改善数据库支持的功能(包括MySQL、Redis等等)。
在书中有关部署的一章中,你提到在Heroku环境中只能在一个单独的dynamo(一个单独的进程)中运行。是否其它部署方式也是如此呢,还是说这是Heroku独有的限制呢?
Tom:为了让Meteor的实时特性能够正常运行,每个用户必须在整个会话期都与同一个web服务器保持连接。有许多通用的做法能够实现这一点(它叫做“sticky sessions”),但Heroku平台对这些方法都不支持。
不过如果你在服务器上有更多的掌控权限的话,搭建起来就很容易了。比方说,有一份说明详细地指出了在AWS上完成这一点的流程。
在目前,这种做法有一个负面因素——在web服务器之间的数据传输有延迟(因此如果你我分别连接到两个不同的web服务器,那么我如果要观察到你对数据的改动,可能会有最多10秒钟的延迟),不过核心开发团队正在努力地克服这一问题,在Meteor 1.0版本发布时就会解决了。
除了你自己的Telescope应用,你还注意到其它使用Meteor的应用程序吗?
Sacha:你可以在madewith.meteor.com网站上看到一张列表,上面列举了许多Meteor应用和一些小实验。除此之外,还有许多大型的Meteor应用存在,包括FriendTrumps(一个Facebook游戏)、Gander(一个email应用)、ShareWith911(一个紧急联系人应用)、PiJS(一个帮助你将代码发布至RaspberryPi的应用)以及其它许多。
《Discover Meteor》一书不仅是一份指南,它也是帮助你理解在Meteor的底层发生了哪些“魔法”的知识之源,对于任何开始使用Meteor的程序员来说,它都是一份很好的资源。
Tom Coleman是Percolate Studio的一员,这是一个web开发的在线商店,专注于质量和用户体验。他也是Meteorite和Atmosphere构件库的共同创始人之一,并且为其它许多Meteor相关的开源项目(例如Router)默默地做着贡献。
Sacha Greif曾在Hipmunk和RubyMotion这样的创业公司中做过产品设计与web设计。他是Telescope和Sidebar(一个基于Telescope的应用)的开发者,同时也是Folyo的创始人。
查看英文原文:Book Review and Interview: Discover Meteor