天津口腔医院
前些日子写了一个模块的半自动加载,实现了一个最基础的沙箱逻辑,我理解的沙箱是处理模块依赖关系的闭包,闭包之间的串接、调用、依赖均由沙箱机制解决。yui3给我们开了一个好头,但它考虑的事情太多、以至于看起来不美,因为开发者coding的时候尽管可以指定该模块的依赖,脑海中依然有一个构建好的模块树,要不然他怎么知道我依赖什么。如果不考虑性能,开发者的视野可以进一步解耦,甲只知道模块A依赖B和C,B和C各自的依赖由各自作者去解决,所以,沙箱可以加强一些,至少在loading script的时候,动态构建依赖树是完全可操作的。这样可以按照功能将模块颗粒化,yui team处于性能的考虑,很多module被强制添加到一起,也导致高层core实现并不简洁,比如Node和Event之间的解耦不清晰,“机制”和“工具”的解耦不清晰等等,这让core中的各个模块之间层次感不强,功能强大但也略感臃肿,在比如yui.js中就包含了很多脱离了core语义的东西,除了YUI类的实现之外还参杂了很多不必要的Array、Object、和Queue。因为实际上,YUI()的Sandbox是yui3的"框架",后续开发只是对Dom、Event等的实现并通过Sandbox排序并链接起来,所以,Sandbox的管理模块机制是完全可以独立出来的,像Sizzle一样,就像这样:

http://tbexample.googlecode.com/svn/tru ... ndbox.html

另外,Sizzle是可以直接拿过来用的,作为一个sub-module,sizzle是一个不错的选择器引擎,至少比yui的强多了。

ok,框架的基本框架有了,就可以更进一步实现一些核心了,这里要尤为注意的,框架的core是分层次的,因为裸写Node和Event实在是有些吃力,因此,需要一些更加基础的策略上的东西来将Node和Event支撑起来,就好象盖房子要打地基,不是上去就盖的,这一点john做的很完美,因为这些本应属于框架服务性质的机制也被良好修饰,可以被普通开发者使用,所以jquery的利用率是比较高的,每一处细节都精心设计过,都不会过度浪费,反观yui就有些杯具了,因为为了对Dom、Node和Event的封装而做了大量复杂的基础性工作,包括widget-base的模型设计、代码重用的设计、widget和Dom一致性的设计等等,这些设计一方面给yui3打造一个夯实的基础,保证了yui3在扩展性上的超级灵活,另一方面也带来了更多的资源浪费,因为多数开发者甚至不知道自定义事件、消息队列、插件机制、AOP、事件模型(EventFacade)和节点模型(NodeFacade)等等,多数开发者似乎也不会去关心自定义事件能干什么、插件是干嘛的、什么是AOP,用最高层的api就可以完成大多数工作,为什么还要费心巴力的去看这些?所以,除非做关键扩展、一般是不会用到这些框架“机制”性的东西的,对于普通开发者来说,显然是巨大的浪费。当然,也正因为基础扎实,yui3才能更加游刃有余的应对超级复杂多变的前端开发。

在我看来,“机制”性的东西要有,但不要复杂,能搞定工作上的事情,就可以了。

下一步,自定义事件。

to be continue...

[ view entry ] ( 350 views )   |  permalink  |   ( 3.1 / 138 )

<<First <Back | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | Next> Last>>