该帖已经被评为精华帖
|
|
---|---|
作者 | 正文 |
发表时间:2007-09-13
我觉得fins同学的一些说法会造成没有深入使用这几个框架的朋友的误解。因为这几个框架的思想是不一样的,所以它们的语法也是不同的。fins同学的评价似乎更像从Java的OO想法来评价几个js框架。
其实,moo一开始的想法就是light weight,所以它的很多语法其实就是没有语法。fins说的json语法,其实就是js里面的散列对象嘛,javascript语法本来就是这个样子呀,不包装就是这样。而这种方式如果写的好读起来很像DSL,很舒服,moo充分发挥了这个好处。 prototype和JQuery都没有强调继承这样的概念。javascript的强大很大就来自它的原形继承,如果要用好它就要利用好原形继承。prototype在这方面很像Ruby,比如Enumerable,这是一种按照行为的抽象,很符合Ruby/Python里面Module的想法,并非所有行为都要抽象到一个对象再继承,行为本身也可以抽象再混入。 JQuery我觉得像Python。write less do more这个想法也比较pythonic。在这个框架中有很强的函数式编程的味道,其实javascript已经具备了函数式编程的语法能力,所以使用FP的强大是JQuery受欢迎的原因之一。 说回来,还是流派原因。moo的产生比前两者要晚。prototype已经开始走大而全的路子了,而且配套的script.aculo.us也是越来越臃肿(而且这个特效库的代码质量的确不怎么好),但是要看到RoR里面使用RJS简化Ajax应用开发都得益于这些大而全的库,所以我们也没什么可抱怨的,只能说没有使用RoR少享受点便利吧。JQuery继续保持它的优美,插件也越来越多,我了解到的很多使用Django进行Web开发的朋友都在用JQuery。而moo,越来越受欢迎,我们也要认真关注它的体积,如果它能持续保持苗条,那么轻量级Web项目就很有可能越来越多的选用它。 每年学一门新语言,学两三个新框架,肯定是有益的。fins转阵营说明你也在拥抱变化呀:D |
|
返回顶楼 | |
发表时间:2007-09-13
其实我没有比较他们内部的实现,也没有比较他们的风格,我的比较很简单.
就是把同样的函数拿出来比, 看谁的用起来更舒服,或者谁考虑的更周全. 至于JQUERY我多次重申 我对它不了解,只是简单的看了看,归根结底我是不喜欢它的晦涩 和故弄玄虚. 不知道你听过"老罗语录"没,里面关于对金庸 古龙的评价那段我觉得说的很有道理. 古龙的文字第一次看到又酷又炫,但是时间久了人们才发现,还是金庸的朴实无华更动人心(当然他讲的要有意思得多,如果没听过建议听听. 老罗还在里面引用了两句话,我觉得更是精辟:"时间对于别出心裁的小花招是最无情的","过份依赖这些稀奇古怪的小花招导致结果价值受到削弱,经不起时间考验". |
|
返回顶楼 | |
发表时间:2007-09-13
对于熟悉html/css/xpath的同志来说,jquery当然是不二之选。其实自cssQuery以来,各个框架都在拼命引进使用selector或query的方式。这其实很简单,因为它比传统的桌面编程模式先进和便利许多。这是我2005年的时候做了半年winforms开发深感痛苦得到的结论。
BTW,比较框架的时候,应该要看这个框架的设计思路和目的。例如prototype本意是轻量级的基础库,拿它直接跟ext去pk,就不是很好。 再有,framework的感觉与开发者本身所属社群有关,大体如下: prototype:不用说了,ruby味道的 mochikit:正宗的Python味道 dojo:java风味 jquery:CSS/XPath的风味 jsvm:java味道 jsi:偏java风味 …… 相对来说各个社群的开发者会更喜欢接近他们口味的js框架。 |
|
返回顶楼 | |
发表时间:2007-09-13
相对来说各个社群的开发者会更喜欢接近他们口味的js框架
这个观点我非常认同 但是我觉得 如果moo加入了强大的selector后 一定会比jquery出色. 对于jquery的一条语句来说 例如 $("#mmmmmm aaa.xxx").FFFFFFFFFFFFFF..... 其实你欣赏的是 对"#mmmmmm aaa.xxx"的支持 但是你确定你对他 .后面的那些FFFFFFFFFFFFFFFFFFFf...是喜欢的吗?? 具体点 $(document).ready(function(){ $(".fold .fold-button img").click(function(){ $(".expand",$(this).parents("div.fold")).toggle(); }); }); 我也喜欢通过 (".fold .fold-button img") 取得对象的方式 但是后面的 .click(function(){ $(".expand",$(this).parents("div.fold")).toggle(); }); 你确定你第一眼就能知道他是做什么的吗?? 就算知道, 你确定这样的实现除了代码数量少之外 还有其他什么有点吗?? |
|
返回顶楼 | |
发表时间:2007-09-13
另外多问一句 我对selector的理解一直不到位
在我看来 selector只是一个帮助我们取得页面元素的工具 为我们取得页面元素提供了一个更好的 更灵活的手段. 我这样的理解对吗? 如果不对那么 他更深层次的用法还有什么呢? (别让我去google 因为gooogle过 可能是找的关键字不对,没什么收获) 如果我说的对, 那么出色的selector可以成为一个js框架的亮点,而不应该成为决定他优劣的根本.对吧? 所以我并不认为jquery有绝对的优势. |
|
返回顶楼 | |
发表时间:2007-09-13
我觉得JQuery的优秀之处在于他把AJAX程序员所需的,都以最方便的方式提供给你了。例如:selector, XHR, event binding, dom manipulation
而不是像楼主那样把它作为一个OO框架,JQ不是用来写PersonClass的。你想在JQ上构建另一个类库,那明显是你选工具的思路错误了。就像在说“在struts上构建一个MVC框架太麻烦了,还不如我直接在servlet上构建呢” 在某一楼楼主说了一句很搞笑的话,什么JQuery可以提供的,其它框架也可以提供(原句我懒得去找了)。那MOOTOOLS呢?你凭什么觉得它的东西别人抄不到呢? JQuery在这一点的优秀之处在于它比较别人更早提供大家需要的东西,例如像domready,不知道是我之前不知道什么是什么,反正就我所知JQ是第一个提供的,其它框架只是跟尾而已。 像PROTOTYPE从1。4之后就不见有什么新东西了,它在新的release notes里的东西基本上是在JQ早几版的release notes中出现过的。至于MOOTOOLS就不清楚了。 引用 $("#mmmmmm aaa.xxx").FFFFFFFFFFFFFF..... 其实你欣赏的是 对"#mmmmmm aaa.xxx"的支持 但是你确定你对他 .后面的那些FFFFFFFFFFFFFFFFFFFf...是喜欢的吗?? 我的回答同样是,JQ不是给你写PersonClass的, 是给你写应用的。别人怎样我不知道,就我自己的使用感觉,JQ提供的接口真的很实用,在我做的为数不多的应用里,这些接口都觉得用得很爽 具体一点的说 $(document).ready(function(){ $(".fold .fold-button img").click(function(){ (".expand",$(this).parents("div.fold")).toggle(); }); }); 直的太优美了。不赞成的话用别的代码写写相同的功能对比一下吧 |
|
返回顶楼 | |
发表时间:2007-09-13
fins 写道 radar 写道 fins 写道 "另外mootools的命名不是很好,为什么不用package的概念呢?"
因为他不想成为 又一个dojo 又一个yui吧 毕竟简单轻巧才是他最求的吧. 其实我觉得JS里搞命名空间实际意义不是很大 至少现在看来是这样. 因为我们一般很少会写太过复杂的js代码,而且很少会在同一个页面内同时使用两个以上的大型js框架 package怎么了?dojo的问题是package吗? 我指的是,mootools占用了太多的顶层变量名。 $extend Ajax $ fx ... ... 万一你不小心定义一个 $开头的变量呢? 可能这不是主要问题,如果都放到 var mootools={};下就没这个问题了啊!为什么不呢? 我明白你的意思. 我已经回答这个问题了. prototype也是直接使用顶层的变量名 $ ajax Element等等 以前我写东西也很注意这些,但是后来发现意义不是很大. 1 冲突的概率很小 因为你很少会将多个js框架在同以页面中混合使用 而在每一个方法前加上moo或者mootools会解决一些问题,但是他也带来了麻烦,他解决的问题是不常遇到的,带来的麻烦却是人人都能感受到的. 2 moo或者prototype的作者用意很明显,就是希望让使用者感觉不到js框架的存在,让大家把框架当作js语言本身的一部分. 他们希望通过自己的努力来改变js的开发方式. 3 当一个框架或是语言或是其他什么东西 足够强大足够出色,已经成为事实标准的时候, 使用者是会妥协的. 举一个不太恰当的例子, 你有没有质疑过 "js里为什么不给 function加一个命名空间, 例如 JS.function, 这样我就可以自由的使用 function作为变量名了" 为什么你不会有这样的质疑? 因为他是规定 他是标准, 不喜欢? 那你可以不用js啊. 其实所有这类框架都有一定的排他性. 尤其是jquery prototype moo这类相对低层的js框架, 他们不希望和竞争对手共存. 你有"$()" 那我就要用我自己的 更好的"$()"打败你,道理就是这么简单. 而让各种低层框架能够互相妥协,能够共存是 更上层的框架去做的事, 例如EXT 和他的bridge. 当然,我从来不否认这样做的缺点,但是这些缺点目前看来不是问题的关键. 这就更加让人无语了。。。 特别是 引用 3 当一个框架或是语言或是其他什么东西 足够强大足够出色,已经成为事实标准的时候, 使用者是会妥协的 那xml的namespace和java的package都不用了,谁先发围谁作主好了。 人家JQuery就完全没有这种问题了。 阁下是太过情人眼里出西施了,把缺点都说成优点了,列出来的都是霸王道理。。。 |
|
返回顶楼 | |
发表时间:2007-09-13
其实,不考虑运行速度的话,我感觉用prototype、jq还是moo都差不多,都是为了提高我们的开发效率
|
|
返回顶楼 | |
发表时间:2007-09-13
to Sam1860:
我最近怎么总是被卷入这样那样的争论中呢. 无奈了. 你喜欢jquery你就用呗 我只是说一下我不喜欢的原因. 你干嘛拿出一副声讨我的姿态啊,没必要那么激动的. 而且我都说了,我对jquery不了解, 我核心比较的也不是jquery啊 是moo 和prototype. 我更没说过:大家都别用prototype 和jquery了, 跟我一起用moo吧 另外我在比较 prototype和moo 时 一直是在拿他们都有的基础的功能去比的. 你干嘛老拿jq有而别人没有的功能来说啊. 这公平吗? 你说: 而不是像楼主那样把它作为一个OO框架,JQ不是用来写PersonClass的。你想在JQ上构建另一个类库,那明显是你选工具的思路错误了。 我就想找一个可以帮助我写出更高质量的JS代码的框架, 我这个想法有什么不可以的吗? 如果可以,那么我觉得必要的OO特性是必须的,因为我个人的习惯就是写一些OO的js代码,但是又不用太oo,那么我选择moo有错吗? 你说: JQuery在这一点的优秀之处在于它比较别人更早提供大家需要的东西 早就一定好? 你说: 直的太优美了。不赞成的话用别的代码写写相同的功能对比一下吧 我举个例子哈.框架1 和框架2 都能实现一个功能. 框架1用了两个方法,是这样实现的: function a : 3行. 其中有一行是调用b function b : 30行. 框架2也用了两个方法,是这样实现的: function a : 5行. 其中有一行是调用b function b : 10行. 然后你拿两个框架的方法a做对比, 得出框架1 比框架2 简洁,这合适吗? 我自己封装过类似你例子中的那种折叠展开的代码, 封完了就一行: toggleBar(a); 你能说我比jq moo 的作者都牛吗??? 你说: 这就更加让人无语了。。。 不是我的话让你无语了,是事实让你无语了. 我说: 冲突的概率很小 因为你很少会将多个js框架在同以页面中混合使用 这话不对吗?有谁会在一个页面中混合多种js框架? 就算有 这样的页面多吗? 我说: moo或者prototype的作者用意很明显,就是希望让使用者感觉不到js框架的存在,让大家把框架当作js语言本身的一部分. 这句话不对吗?请举反例. 我说: 这类相对低层的js框架, 他们不希望和竞争对手共存 这不对吗? 只有ext 那种相对上层一些的框架 才会渴望和更多的低层框架兼容共存呢. 3 当一个框架或是语言或是其他什么东西 足够强大足够出色,已经成为事实标准的时候, 使用者是会妥协的 这句话肯定是正确的,只是你认为用在这里不对. 当然,你可以有不同观点,但是你举的例子太不恰当了. xml的namespace和java的package的存在, 是因为如果没有他们,那么代码之间的冲突将是不可避免的, 但是我这里所说的是有前提的: 由于有了"冲突的概率很小 因为你很少会将多个js框架在同以页面中混合使用",这条做保障,所以轻量级js框架中,package不是必须的. ext dojo要有包的概念, 因为本身他自己的文件 自己的"类"就特别多, 分包便于开发和管理. 好了 不争论了 我的观点表达的很清楚了 你可以提出你的观点, 但是别一副声讨的姿态. 好吗 有话好好说呗 |
|
返回顶楼 | |
发表时间:2007-09-13
赞同fins的意见。对css,xhtml,javascript还算了解。但是实际使用jquery的时候,感觉你写的不是javascript,有种被xx的感觉。prototype在javascript原有的基础上做了一个小小的封装,这种风格我喜欢,但是确实在基础上mootools是有比较大的差距。再加上selector就更爽了。
我觉得一个js框架,最好的是在js原有语义的基础上做一些功能的加强。提供方便。而不是,想jquery一样,$()返回的是jquery对象而不是dom对象本身。这样会增加学习曲线。而且会造成,写了很长时间javascript,但是对javascript本身一点都不了解的局面。 |
|
返回顶楼 | |