小编说:Meteor作为开源的全栈JavaScript开发平台,在工作方式上进行了较大创新,和传统Web 应用区别较大,对于任何一项技术,都有其擅长的领域,也有其不擅长的地方,Meteor也不例外。
本文选自《Meteor全栈开发》一书,我们在前面的文章中向您介绍了Meteor为何这么“快”,在本文中我们将深入探讨Meteor的工作原理以及优势弱势。 
讯享网
1 Meteor 的工作原理
1.1 工作流程
Meteor 在工作方式上进行了较大创新,和传统Web 应用区别较大。下面先回顾一下传统应用的工作流程,如图所示。 
客户端(Client)负责向服务器请求所需的数据、资源,然后渲染显示;服务器端(Server)负责业务处理、数据库操作、构造响应内容、资源管理,服务器端的责任大、任务重。其各自职责关系如图所示。 
Meteor的工作方式更像是手机APP。客户端首次访问 Meteor应用时,会从服务器把需要用到的资源都加载到客户端,如 JS、CSS、字体、图片,并创建一个mini数据库。然后和服务器端建立好数据通信的通道。之后,用户操作应用过程中涉及业务操作时,也是在客户端进行处理;进行数据库操作时,也是操作客户端的mini 数据库。服务器端只负责向客户端传输数据、数据的安全写入,以及执行一些只能在服务器端进行的操作,例如发送email,如图所示。 
Meteor 应用的客户端包含了应用所需的静态资源、业务处理代码、一个简化的数据库。如手机APP 一样,很多操作直接在本地完成,需要执行特定动作和需要数据时才请求服务器端。
所以相比较于传统Web 应用,Meteor 选择了重客户端、轻服务器端的模式,充分利用现代客户端强大的运算能力,减轻服务器端的压力。
1.2 核心技术
Meteor 的工作方式必然需要一些特定的技术来支持,让我们来了解一下Meteor 的几个核心技术。
1. mini 数据库(mini-database)
Meteor 的底层技术中首先吸引我的就是客户端的 mini 数据库。Meteor 目前支持的数据库是 MongoDB,所以客户端的mini 数据库就是 miniMongo。
对于开发人员来讲,miniMongo 就像是一个真实 MongoDB 数据库,可以进行各种增删改查的操作,和MongoDB 的 API 完全一致。
miniMongo 的主要作用是缓存数据,相当于服务器端数据库的局部镜像,它不会缓存全部数据,只是缓存当前客户端用到的数据。
使用 miniMongo 的效果就是应用运行非常快,而且提供了更好的用户体验。例如用户保存了一条数据,Meteor会先保存到 miniMongo,保存成功后立即反馈给用户,体验极其顺畅;同时 Meteor会把数据同步到服务器端的真实数据库中,这个过程对于用户和开发者都是透明的。
那么如果网络出现问题,或者后台数据库操作时出现问题时,数据没有同步成功怎么办?
当客户端发现没有同步成功后,会通知用户出现了问题,页面执行相应的错误处理逻辑。例如用户保存了一条数据,数据先被写入 miniMongo,然后反馈用户操作成功,同时后台进行数据库同步。万一服务器端操作失败,会通知客户端,客户端会告知用户之前的操作有问题,并执行相应的错误处理流程。
2. Tracker
Tracker提供了响应式应用的基础功能。下面先简单了解一下什么是响应式。以之前创建的项目为例,页面中有一个按钮,单击按钮后,页面中显示的那一个数字自动加1。通过查看代码,代码的逻辑如图所示。 
{
{ counter }} 通过函数关联了 val 变量,按钮单击事件的处理函数中修改了变量 val 的值,并没有更新页面中的内容,但{
{ counter }} 自动更新了,这就是响应式。
响应式的背后技术基础就是 Tracker。Tracker会跟踪目标数据,当其有任何变化后,都会重新计算使用到目标数据的地方。
在上面的示例中,变量 val 是一个响应式变量,会被 Tracker 跟踪,{
{ counter }} 是变量 val 的消费者,当 val 被修改后,Tracker 便通知它的消费者进行更新。
3. DDP
DDP是一个数据传输协议。Web应用通常会使用HTTP,为什么还要使用 DDP呢?因为 HTTP 适合传输document,而 Meteor 中主要是传输数据,HTTP 在这方面就不太适合了,所以需要使用专门用于传输数据的 DDP。
DDP 基于 websockets,实现了全双工的数据传输,这一点也优于HTTP。如果使用 HTTP,则只能是客户端请求服务器获取数据,服务器端无法主动向客户端发送数据,而 DDP 的双向机制使数据传输更加主动、灵活。
DDP 使用 JSON 格式封装数据。因为 MongoDB 存储的文档结构是 JSON,客户端的JS 对JSON 的处理也是非常方便的,所以 DDP 协议使客户端和服务器端的数据沟通变得极其自然。
DDP 协议也是响应式功能的基础。因为通过 DDP,服务器端可以主动向客户端发送数据,所以当数据库中有任何变化时,都可以立即通知客户端,客户端便可以进行更新操作,以快速响应。
2 优势与不足
对于任何一项技术,都有其擅长的领域,也有其不擅长的地方。下面就看一下Meteor 的优势和劣势。
2.1 优势
Meteor 作为一站式的全栈开发平台,使用一种开发语言就可以贯穿前后端的开发,具有方便的数据交换协议、繁荣的生态等特质,使Meteor 自然地具备了很多优势,如下所示。
易学
偏向客户端
响应式
在目前很多应用的开发中,处理事件(用户单击了某些元素后触发某动作, 如更新数据库,或者更新当前视图)的代码是一个重要部分。
在响应式编程中,这类事件处理函数的工作就减少了。
响应式是Meteor 的主要特征,所以Meteor 非常适合如实时聊天或者在线游戏类的应用。
代码高度重用
强大的 CLI 命令行工具
Meteor 提供了一个命令控制台工具,用来辅助整个开发过程(具体功能上面有描述)。
健康的生态系统
Meteor还是一个生态系统,拥有大量的扩展包,提供了非常丰富的功能。这减少了开发者的很多工作量,而且众多开发者还在不断分享更多的扩展包。

运算密集型应用
Meteor是基于Node.js的,Node.js本质上是单线程处理模式,不能很好地利用多处理器,所以 Meteor不能提供很强的计算能力。
成熟度
Meteor毕竟还很年轻,在大型应用方面还没有成熟的案例,Meteor在大型部署和处理高请求压力方面还需证明自己。
在社区方面,尽管Node.js的社区已经非常成熟,对大家帮助很大,但它还是没法和老牌语言的社区相比,如PHP、Java。
在主机环境方面,支持Meteor的主机仍大大少于支持PHP、Python等语言的主机。
约束少
在Meteor中,对于项目的结构方面没有严格的规定。其好处是很自由,但同时也是缺点。在一个人开发时,没有约束意味着开发速度快;但是在团队中,还是有清晰、固定的结构比较好,便于协作开发。
SQL
静态化内容
2.3 关于质疑
Meteor 的快速发展过程中也伴随着不少的质疑,例如,Meteor 不适合大型项目的开发,Meteor 的实时机制以及长连接会占用很多系统资源导致Meteor 的性能很差, 等等。
对于这些质疑,如何回应本身没那么重要,最关键的是我们面对这些质疑的心态。因为质疑是源自他人的自身感受,并不是非常客观的定论。这就需要我们有正确的思维角度,而不是简单否定或肯定。
例如,面对“Meteor 不适合大型项目的开发”这个结论,我们可能需要考虑, 是还没有大型项目真正去使用Meteor,还是很多大型项目使用Meteor 后遇到了很多问题;如果是真正遇到了麻烦的问题,那么这些问题是Meteor 自身机制导致的, 还是由于使用者对Meteor 不够熟悉而没有找到好的解决办法。
再比如性能问题。Meteor 把很多逻辑移到了前端执行,利用了更多的客户端处理能力,减轻了服务器端的压力;同时,实时机制也的确增***务器端的压力。那么此类机制具体增***务器的多少性能消耗?这两方面相比较的话,具体是好处更多还是负面影响更大?
很多问题需要我们根据自己的实际情况来分析,根据利弊的分析与总结来下结论。即使同一个项目,在不同的发展阶段也会根据不同的需求和面临的不同问题, 而使用不同的技术。例如,京东初期使用ASP.NET,随着规模的不断壮大,逐渐改为Java ;Facebook 初期使用PHP 开发,后来性能无法满足其要求,便自行研发PHP 虚机来提升性能。
Meteor 成长于创业孵化器。在这个环境下,Meteor 自然会更加关注创业团队的开发问题,希望创业项目能够快速迭代,尽可能快地根据用户反馈来改进。因此便形成了其自身的鲜明特性:开发速度快。
所以,应该根据自身项目的需求定位和发展阶段来分析技术,不能感觉Meteor有很多好处就贸然采用,也不要因为他人的质疑而轻易否定。 
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/16944.html