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 应用程序的:
- 让我们做一个心理测验好吗。设计你在你的电脑上的两个不同的窗口中打开了一个相同的文件夹。
- 接着单击选中其中一个窗口并删除一个文件,这个文件会从另一个窗口中消失吗?
- 不用真的去尝试这些步骤,你也知道它会从另一个窗口消失的。当我们修改本地文件系统中的某些东西时,这些改变的结果会显示在任何地方,不需要刷新也无需回调函数,它就是这样发生了。
- 但是,让我们考虑一下,同样的场景在 web 上会发生些什么。比方说,假设你在两个浏览器窗口中都打开了 WordPress 的网站管理页面,然后在一个窗口中新建一个主题。与桌面端不同的是,无论等待多久,只要你不刷新另一个窗口,它就不会反映出这个变化。
- 多年以来,我们已经接受了一个观念,你与某个网站的通信就是来自于简短的、各自独立的请求而实现的。
- 但 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 的创始人。
评论