`
kongxiantao
  • 浏览: 112257 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

KISSY loader 的设计

阅读更多

什么是KISSY
http://github.com/kissyteam/kissy

什么是loader

用过yui的人一定不会对yui-loader陌生,yui doc中对loader是如此描述的:

The YUI Loader Utility is a client-side JavaScript component that allows you to load specific YUI components and their dependencies into your page via script. YUI Loader can operate as a holistic solution by loading all of your necessary YUI components, or it can be used to add one or more components to a page on which some YUI content already exists.


所以,简单讲,loader就是一个处理js脚本依赖关系的加载器,实现了按需加载、延迟加载、加载相 关联的js等功能,其中按需加载大大简化了开发web app的复杂度,延时加载使得domReady的时刻大大提前,飞速提升UI渲染速度,加载关联的js则使开发者不必去关注脚本排序,简化库的使用。颗粒 化设计的库则必然需要loader来控制库的易用性,从yui2到yui3,这种趋势更加明显。因此,当KISSY开始走颗粒化的道路时,loader则 几乎成了必须组件。

页面加载脚本的方式

如果页面中以script标签引入外部脚本,是阻塞式的加载,不管 脚本加载完成先后,页面总是从上到下依次执行script脚本。如果是异步加载脚本,脚本加载完成后则立即执行脚本内容。因此,异步脚本的载入顺序和执行 顺序是无关的,是和脚本载入完成的时刻有关系。而如果要处理异步脚本的依赖关系,除了要对脚本载入开始时刻进行排序,也要对载入完成后的回调进行排序。因 此,脚本中的逻辑要写入回调函数中,以便排序只用。KISSY提供的简单沙箱可以模拟这种回调的包装。



多loader并存?

如 果页面很复杂,我们很自然的期望每个沙箱拥有一个loader,loader之间的加载可以并行,每个loader只处理各自的依赖,这种设计是为了解决 页面逻辑的解耦,页面中的每个app之间的耦合降到最低,整个页面不会因为一个app的加载障碍而影响其他app的运行,yui即是这种设计,这种设计最 常用的场景是用在门户首页,页面没有固定的维护者,每个人都可以随时添加删除模块,页面最终渲染结果不受某个app的影响。因此在越复杂越变化频繁的页面 中,多loader是一种先进的设计,而在普通页面中,多loader机制形同鸡肋。KISSY的设计宗旨是简单易用,因此,单loader模式基本可以 满足目前国内门户的所有要求,而在配置combo的前提下,单loader的性能要远超过多loader的场景的。

沙箱之间的串接

库 的设计离不开沙箱,沙箱除了用来做逻辑解耦,在loader机制中还扮演包装回调并串接执行回调的协调者角色。上面讲到,异步脚本是需要以回调的形式给出 的,这样,loader就需要对脚本依赖进行排序,这里所说的脚本依赖,实际上是各个脚本回调函数的执行顺序,并不是严格意义的脚本加载(完成)顺序, 即,严格讲,脚本加载顺序先后是和loader没必然关系的。

另外最重要的,KISSY被设计为弱沙箱,可以更清晰方便的管理回调的串接,但也正是因为弱沙箱,KISSY无法做到YUI沙箱中的独立实例设计所带来的灵活性。举个简单例子,YUI中的loader是可以嵌套的:

YUI().use('mod1
'
,function
(Y){
    YUI().use('mod2
'
,function
(Y){
        //your code
    });
});

沙 箱之间的scope相互不干扰,非常安全。KISSY作为一个全局“对象”(非构造器),是无法做到这一点的,因为多个scope受同一的全局KISSY 对象的影响。但这也涉及到刚才说的多loader的利弊,而且,我在使用YUI的实践中也从未这样写过代码,使用弱沙箱本来就应当保持简单的逻辑和苗条的 身材,所以,保持弱沙箱的简洁易读要比用强沙箱去hack原本混乱的逻辑更干脆一些。因此,KISSY在全局作可以作为loader使用,在纯粹的串行逻 辑中,依然保持其弱沙箱的本质。比如,作为loader使用:

var
 S = KISSY;
S.add('mod1
'
,function
(S){
    //scope 1

},{requires:['mod2
'
]});
S.add('mod2
'
,function
(){
    //scope 2

});
S.ready(function
(S){
    //scope 3

});

作为简单沙箱使用:

S.ready(function
(S){
    S.add('mod1
'
,function
(){
        //scope 1

    });
    S.ready(function
(S){
        //scope 2

    });
});

这种代码很容易理解,而在YUI中,加载模块和引入回调是两个不同的概念,如果加载模块忘了引用,依赖关系实际上是断裂的,这种设计很容易导致初学者的思维混乱:为什么加载了脚本但脚本代码却不能用?比如:

<script src='yui/node/node.js'
 />
<script>
YUI().use('core'
,function
(Y){
    //Y.Node是不存在的,必须 use('node'
)才可以
});
</script>

作 为开发者就不明白为什么我引入了node.js,还要use('node'),为什么要多此一举?YUI如此设计主要为了面向复杂的业务逻辑,也就是说, 当页面业务逻辑本身复杂度到达一个层次之后,更深层次的解耦则显得十分必要。因此,YUI将“加载模块”作为第一层的解耦,将“引入回调”作为第二层的解 耦,在复杂业务逻辑场景中有着无与伦比的优越性,因为这已经脱离了纯粹“架构”所做的事情,向更语义化的业务逻辑迈进了一步,我在使用YUI的过程中,对 此深有体会。而在KISSY简洁的设计原则下,完全可以省掉这种在简单场景中略显累赘的鸡肋设计,复杂的业务逻辑会遇到,但不会天天遇到。更何 况,KISSY提供KISSY.app来专门对业务逻辑进行支持,已经足够了。因此,框架层面的沙箱应当保持所见即所得的简洁,是符合KISSY的设计理 念的。

页面渲染过程

页面在使用loader的加载过程中,渲染过程会有一些状态的变化,其中异步加载的脚本是需要特殊处理的,而除此阶段之外的脚本的执行,依然保持KISSY本初设计的原汁原味。因此这里增加了一个afterReady的状态,执行过程大致如此:



因 此,KISSY loader的雏形也就差不多描述清楚了,简单沙箱、单loader、所见即所得的模块加载,另外,最终要的一点,不管是核心组件还是项目文件,一律当作 模块处理,这是和YUI不同的地方。这样做combo会非常爽,任你颗粒化万千文件,页面中外加种子文件顶多只有三个http请求(css一个,js一 个)。

提供两个demo

http://jayli.github.com/test/src/kissy/ ... oader.html

http://jayli.github.com/test/src/kissy/ ... oader.html

目前只支持js,周末我会把css的支持也加上

 

原文来自:http://www.uedmagazine.com/ued/comments.php?y=10&m=08&entry=entry100814-104521

分享到:
评论

相关推荐

    kissy-1.4.8.rar

    3. **组件丰富**:Kissy 提供了一系列的内置组件,如 AJAX、DOM 操作、事件处理、动画效果等,这些组件经过精心设计和优化,可以快速构建出功能完备的前端应用。 4. **高性能**:Kissy 通过代码压缩、合并以及异步...

    Web常用UI库 kissy.zip

    Kissy 是一个由淘宝开发并开源的JavaScript库,它的设计目标是为Web开发者提供一套全面、强大且易用的UI组件。Kissy 的出现旨在简化Web应用的开发过程,提高开发效率,尤其在构建复杂的前端界面时表现出强大的优势。...

    Kissy学习教程

    Kissy的核心设计理念是模块化。它采用了CommonJS规范,允许开发者将代码拆分成多个模块,每个模块负责一部分功能。这不仅有利于代码的组织和重用,还能降低代码间的耦合度,提高代码的可维护性。通过Kissy的模块系统...

    淘宝KISSY前端开发框架

    KISSY提供稳定的核心,包括 oo、dom、Event、Anim、...强大且易用的脚本加载器,特有的 loader;丰富的UI组件,包括 Switchable、Overlay、Draggable and Droppable 等。KISSY具备模块化、高扩展性、组件齐全等特性。

    Kissy 15天学会.zip

    Kissy 是一个轻量级的JavaScript库,专为前端开发者设计,旨在简化Web开发过程,提高代码质量和效率。这个名为“Kissy 15天学会.zip”的压缩包,很可能是为了帮助初学者在15天内快速掌握Kissy框架的核心知识和实践...

    shopify免费主题模板kissy

    "Kissy"是一个专门为Shopify设计的免费主题模板,由个人开发者辛勤工作数晚精心打造,专用于内衣商品的展示。在本文中,我们将深入探讨Shopify平台、主题模板的重要性以及Kissy主题的特点和优势。 首先,让我们了解...

    kissy学习教程

    它的设计目标是减少前端开发者的工作量,让开发人员能够更专注于业务逻辑的实现,而非纠缠于底层的DOM操作和模块加载等细节问题。 与jQuery相比,KISSY更加注重前端开发的整体解决方案,提供了更加丰富的UI组件,...

    kissy editor 2.0

    Kissy Editor 2.0是淘宝帮派推出的一款强大的富文本编辑器,专为提升用户在社区中的内容创作体验而设计。它集成了多种功能,使用户可以方便地创建、编辑和格式化文本,同时还支持插入图片、视频等多种媒体元素,极大...

    kissy 学习

    1. **模块化**:Kissy 基于CommonJS规范,采用模块化的设计思想,允许开发者将代码分割成多个模块,每个模块专注于特定的功能,便于代码的重用和维护。通过`require`和`exports`关键字,我们可以方便地引入和导出...

    kissy文件 kissyteam-kissyteam.github.com-901d2cd.rar

    Kissy 框架的设计理念是模块化和高性能。它提供了一套完整的模块加载和管理机制,使得开发者可以方便地组织和管理代码,同时支持 CommonJS 和 AMD 规范,兼容各种环境。在性能方面,Kissy 通过优化的异步加载策略和...

    Kissy Suggest 自动提示例子

    Kissy Suggest 是一个基于 JavaScript 的开源库,专为实现自动提示功能而设计。本文将深入探讨 Kissy Suggest 的工作原理、使用方法以及其在实际项目中的应用。 Kissy Suggest 是 Kissy 项目的一个组件,Kissy 是一...

    kissy源文件代码

    淘宝发布开源编辑器:KISSY Editor,和我们在 WordPress 后台使用的富文本编辑器 TinyMCE 一样,它可以让我们在线编辑和格式化文本,但是相比 TinyMCE KISSY Editor 更加轻巧,更加适合国内的网络环境。 KISSY ...

    提示补全组件:Kissy Suggest

    标题中的“Kissy Suggest”是指Kissy框架中的一个组件,Kissy是一个轻量级的JavaScript库,专注于前端开发,提供了丰富的组件化功能。Suggest组件则是Kissy中用于实现自动提示、补全功能的部分,常见于搜索框或...

    修改的Kissy富文本编辑器

    1. **模块化设计**:Kissy Editor遵循Kissy框架的模块化思想,将各种功能如图片上传、表格操作、链接插入等拆分成独立模块,开发者可以根据需要选择加载,这样既节省资源,又方便定制。 2. **插件体系**:Kissy ...

    JS开源编辑器 Kissy Editor

    **JS开源编辑器 Kissy Editor** 是一个专为前端开发者设计的轻量级文本编辑器,它具有良好的浏览器兼容性,能适应各种主流浏览器环境,包括Chrome、Firefox、Safari、Opera以及Internet Explorer等。Kissy Editor的...

    kissy-1.4.8.zip

    kissy-1.4.8.zip,淘宝最新前端开发包

    KISSY 1.4.8

    KISSY 1.4.8,一个淘宝用的类似jQuery的前端框架

    js KISSY框架阿里云滑动下拉导航菜单效果代码

    js KISSY框架阿里云滑动下拉导航菜单效果代码 js KISSY框架阿里云滑动下拉导航菜单效果代码 js KISSY框架阿里云滑动下拉导航菜单效果代码 js KISSY框架阿里云滑动下拉导航菜单效果代码

    kissy最新开源包

    Kissy是最新的开源框架,由淘宝团队开发,它是一个针对前端开发者设计的JavaScript和CSS框架。这个框架的主要目标是提供一套高效、灵活且易于使用的工具,以帮助开发者快速构建前端应用。Kissy的名字来源于“简单...

    kissy 框架

    淘宝发布开源编辑器:KISSY Editor,和我们在 WordPress 后台使用的富文本编辑器 TinyMCE 一样,它可以让我们在线编辑和格式化文本,但是相比 TinyMCE KISSY Editor 更加轻巧,更加适合国内的网络环境。

Global site tag (gtag.js) - Google Analytics