为什么我要放弃meteor

最近接了一个老外的项目,对方要求用meteor开发。刚开始我觉得这个框架太好了,甚至打算以后在自己项目中也用这个框架,经过这段时间的使用,我今天来谈谈自己对这个框架的理解。meteor是一个基于nodejs平台的实时web开发框架,采用全新的编程理念,全新的通信模式。具体情况,可以百度,这里就不废话了。

先来说说优点:

1. 搭建环境非常简单,可以轻松建立开发环境,文档还算齐全。

2. 前后端语言统一,前后端完全整合,后端与前端完全可以共享代码,比如,定义在一个文件中的常量,函数,在后端可以调用,你要是喜欢,在浏览器上也可以调用。最大限度地共享代码。减少工作量。

3. 可以快速迭代,缩短开发周期和成本。

4. 代码以同步方式运行,尽量避免回调(其实回调这东西,你要是习惯了,真觉得没啥,有很多库可以使做好这个事,可能有些人从其他语言转到nodejs刚开始不太习惯)。

5. 浏览器里模拟了一个mini Mongo,你可以直接在客户端查询数据,感觉就像在服务器上查询一样。

6. 反应式编程,很多地方你只要更新数据了,更新数据之后的其他操作,不需要程序员做。比如刷新视图。

7. 采用DDP协议,以后可以扩展到其他语言,实事上已经有社区版本的,但官方只有js。

再来说说缺点:

1. 框架基本都使用全局变量,它自己这么做就算了,而且程序员也必须这么做,这是由它的实现机制决定的,这对小项目还行,但稍大一点的工程, 将是灾难,谁也不知道别人定义了什么全局变量,更要命的是框架自己还有很多全局变量,这些有可能是你不知道的,但也无从可查,比如框架自己带underscore库,用了全局变量’_‘, 如果有谁不知道这个是被underscore使用的,覆盖了,后果很严重,更要命的是,整个框架都是这种模式。在你使用之前,你必须清楚框架或你使用的第三方包中已经使用了哪些全局变量,哪些变量不能用。如果你想使用一个变量名,如果这个变量名已经被某个包使用,你就只能换。所以从这一点上来讲,这个尤其不适合多人协作,大型项目的开发。

2. 不能手动控制文件的加载顺序,在普通的nodejs工程中,你可以通过reqiure来加载一个文件,但在meteor中这个是不可用的。程序员不能去决定这个,框架完全按自己的方式去加载文件,官方提供的方法是改文件名,改成字母序,或放到一个子目录中,因为meteor是按文件名字母序和子目录优先加载。这个做法感觉太山寨了。为了省去程序require的步骤,做了这样一种自动加载。我觉得不可取,也很不方便,比如我在一个项目中就遇到这样一个总是,想加载 bootstrap.js  和bootstrap-switch.js
,而bootstrap.js必须在后面这个文件之前加载,但实际情况是bootstrap-switch.js加载到前面去了,结果会报错,相当头疼,解决方法要么把bootstrap.js重命名为a-bootstrap.js要么把bootstrap.js放到子目录,这两种方式 我都不喜欢,凭什么我不能用这个名字,非要换个,作为程序员的我,还不能自由给文件取名了?,凭什么我要把它放到一个子目录,我就喜欢把同一类文件放到一个目录。所以这点让人觉得很不愉快 。

3. Session问题,meteor里的session只能在浏览器里使用,服务端是没有session这个东西的,这个感觉很不方便,有时候需要在服务器上保存一些状态,只能保存在数据库中,每次自己去查询。更不方便的是如果没用使用登录接口存下用户的id,你根本无法区分游客用户。因为它里面没有cookie这样的东西。解决办法 也有,就是在浏览器第一次访问的时候,生成 一个随机字符串,然后每次传给服务器,服务器存下来,用来区分是哪个用户。

4. 内存问题,meteor应用的内存占用比一般应用是要大很多的,可能跟他实现的实时特性有关系,因为它要维护每个客户端的连接和数据状态,一是客户端订阅的数据状态发生变化,服务器会主动通知客户端这些变化,所以内存消耗是很可怕的。

5. 分页支持,分页是一个应用最基本的功能,但这个功能居然没有一个很好的官方支持,在discover in meteor, 作者有提到,为什么不能很好的支持分页,但有很多插件辅助,但这些功能,我还是希望有官方的解决方案。

6. 没有完整的测试解决方案,官方虽然提供了一些测试方案,但感觉都是轻描淡写,而且官方的解决方案还在探索中,不适合大型产品的完整测试。

7. 不能直接使用npm上的包,如果是没有异步的包,可以直接用,但如果一个包有异步想关的功能,你就不能直接使用,需要你自己重新封装,封装成同步的,虽然官方提供了方法,但感觉还是很麻烦。

8. 性能问题,虽然nodejs是高效的,但meteor为了做到实时,在服务器上做了大量计算比较操作,还占用了大量内存,每个浏览器都用websockt与服务器建立了一个长连接,所以性能并不是多好,这一点在你开发的时候不容易感觉出来,但稍有点用户访问你的网站,你将会立即感觉到。

9. 不支持windows环境开发,有社区支持的,但没有官方支持的。

总结下:

meteor作为一个全新的框架,有它的过人之处,有其他框架不能提供的特性,但我们同时也应该看到它的的不足,还有很大的成长空间,就个人观点而言,仅仅适合做一些小项目,绝对不要用于大型项目的开发,至少现在还不能。我有一种不袢的预感,如果你用它来开发大点的工程,将会让你疯狂。

时间: 2024-08-04 08:25:25

为什么我要放弃meteor的相关文章

oracle/node-oracledb 数据库驱动 与 Meteor 驱动包!

oracle/node-oracledb: https://github.com/oracle/node-oracledb   Oracle 官方维护. metstrike/meteor-oracle: https://github.com/metstrike/meteor-oracle Oracle Database Driver for Meteor. Translates the meteor collection operations into SQL. Detailed install

Meteor:组件思想

受React组件思想启发,本文讨论在Meteor客户端应用组件化思想,以Spacebar模板语言为例. 所谓前端组件(我的定义),是一组html代码以及相关样式.行为的封装.它可被复用,通过传递参数进行初始化,并可以调用其定义的方法对其进行控制.并且,其状态,样式都是局部封装的,不会扩散并影响全局. 典型地,一个组件具有data和states(React中叫做props和statues).data是外部传入,用于构建.渲染组件的数据,在组件实例的整个生命周期中是不变的.states是组件内部封装

Meteor 中的代码包有点特殊,分为五种

Meteor 中的代码包有点特殊,分为五种: Meteor 核心代码本身分成多个核心代码包(core package),每个 Meteor 应用中都包含,你基本上不需要花费精力来维护它们 常规 Meteor 代码包称为"isopack",或同构代码包(isomorphic package,意味着它们既能在客户端也能在服务器端工作).第一类代码包例如 accounts-ui 或 appcache 由 Meteor 核心团队维护,与 Meteor 捆绑在一起. 第三方代码包就是其他用户开发

一个Flash开发者从入门到放弃的成长之路

本文将按照入门.成长.转行三个关键词来讲述作者这些年使用Flash进行项目开发的整个历史过程. 一.入门--开始走上Flash的道路. 和Flash的机缘要从大学时代说起.2005年下半年,学校开设了网页三剑客,就是DreamWeaver.Fireworks.Flash三个软件.在那个课程之前,各种课程都是偏理论的课程,比如C.数据库原理.线性代数,这些课程学着都比较枯燥,而这个网页三剑客课程这是实践性非常强,可以做网站.动画之类的.我对这些自然也有很大的兴趣,那时候自己刚刚买了电脑,课间之余,

洛谷 P2895 [USACO08FEB]流星雨Meteor Shower

P2895 [USACO08FEB]流星雨Meteor Shower 题目描述 Bessie hears that an extraordinary meteor shower is coming; reports say that these meteors will crash into earth and destroy anything they hit. Anxious for her safety, she vows to find her way to a safe locatio

POJ 3669 Meteor Shower 题解 《挑战程序设计竞赛》

题目链接: http://poj.org/problem?id=3669 题意: 这个同学发现流星雨要来了,会对地球造成伤害于是决定逃跑.N颗流星会不定时降落在坐标轴第一象限300*300内的点上.给出每颗流星降落的坐标和时刻,求这个同学能否成功逃跑,能的话用时多少. 思路: 略有一点tricky,无法变通了(@﹏@)~.看了码农场的代码. 这道题没有给出地图,所以需要自己生成地图. 关键的点在于:在生成地图的时候,将每个点的初始值设为无穷大(表示不会有流星),将要被摧毁的点设置为流星降落的时刻

meteor实例—7—发布(Publication)和订阅(Subscription)

发布(Publication)和订阅(Subscription)是 Meteor 的最基本最重要的概念之一,但是如果你是刚刚开始接触 Meteor 的话,也是有些难度的.这已经导致不少误解,比如认为 Meteor 是不安全的,或者说 Meteor 应用无法处理大量数据等等.人们起初会感觉这些概念很迷惑很大程度上是因为 Meteor 像变魔法一样替你做了很多事儿.尽管这些魔法最终看起来很有效,但是它们掩盖了后台真正做的工作(好像魔术一样).所以让我们剥去魔法的外衣来看看究竟发生了什么.过去的日子首

非常用心,不要放弃,一直向前看

今天我想讨论改变世界的话题.很多人会问我是怎么创立企业的,或是怎么解决问题的.但是,今天我想要讨论一个不一样的问题.不是"怎么去创立",而是"为什么创立",这是使命的本质. 今天我想说3个故事. 第一个故事关于"相信你的使命". 2004年,我之所以创立Facebook,是因为我觉得能在网上和人连接起来是非常重要的. 那时候,互联网上有很多网站,你可以找到差不多所有的东西,如新闻.音乐.书.电影.商品--可是没有哪种服务能帮我们找到生活中最重要的

爱是人海茫茫中彼此不先放弃找寻

"云儿,云儿,像朵花,开在天上笑哈哈:云儿,云儿,像妈妈,一朵一朵爱心大--"这是年轻的巴西妈妈苏珊教给3岁女儿露菲的一首原创儿歌.在每个母女两人独处的时间里,她们都会经常唱起这首歌. 可就在距露菲3周岁生日还有17天时,这首儿歌戛然而止--露菲在外出的途中被人抱走了,因为粗心保姆的一次失职. 此后的一年,失女心痛的苏珊开始疯狂地四处寻找露菲,贴寻人启事.登报,找电视台--所有能想到的方法都试了,但依然毫无线索. 家人都劝苏珊再生一个吧,因为好在毕竟还很年轻,但苏珊却坚决不愿意:&qu