YUI 3 学习笔记:loader
YUI 3 的 loader 已经很优雅地融合在YUI(config).use('moduleName', callback)
中:
YUI({ base: 'http://t-yubo/assets/yui/3.0.0/build/', debug: true, filter: 'debug', modules: { jquery: { fullpath: 'http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js' } } }).use('jquery', 'node', function(Y) { jQuery('body').text('YUI kisses jQuery!'); });
config
参数,在 yui-base 模块里,原封不动地传给了 Loader:
// use loader to expand dependencies and sort the // requirements if it is available. if (Y.Loader) { dynamic = true; this._useQueue = this._useQueue || new Y.Queue(); loader = new Y.Loader(Y.config); loader.require(a); loader.ignoreRegistered = true; loader.allowRollup = false; loader.calculate(); a = loader.sorted; }
注意 debug 和 filter 等参数值,用来切换调试状态非常方便。另外,通过 fullpath, 可以很方便加载任意 js/css 文件。
Loader 的基本工作原理
1. 将 YUI 自带的所有 modules 信息,存放在一个很大的数据对象里:
modules = { moduleName: { requires: [...], optional: [...], skinnable: true, submodules: { ... }, plugins: { ... } }, ... }
2. 根据传入参数和上面的数组,将需要加载的模块按依赖关系排好顺序。核心方法是calculate
:
calculate: function(o) { if (o || this.dirty) { this._config(o); this._setup(); this._explode(); if (this.allowRollup && !this.combine) { this._rollup(); } this._reduce(); this._sort(); // Y.log("after calculate: " + this.sorted); this.dirty = false; }
封装成了 6 个辅助方法,其中_sort
方法最考验算法。
3. 按照依赖关系排好顺序的模块信息存放在this.sorted
属性中。接下来,调用 get 模块加载即可,具体请参考源码中的_insert, _continue, loadNext
等方法。
以上是主线,还有很多细节和分支就不多说了。loader 总共 2000 多行代码,相当不易。
快乐学习,欢迎讨论。
YUI 3 学习笔记:loader相关推荐
- YUI 3 学习笔记:YUI Base
基于 github 上 yui 3.0 2009-06-19 version YUI Base 包含 7 个 submodules: 展开的详细图请看:yui-base-full.png 一些好的想法 ...
- oracle数据库开多线程,学习笔记:Oracle表数据导入 DBA常用单线程插入 多线程插入 sql loader三种表数据导入案例...
天萃荷净 oracle之数据导入,汇总开发DBA在向表中导入大量数据的案例,如:单线程向数据库中插入数据,多线程向数据表中插入数据,使用sql loader数据表中导入数据案例 1.Oracle数据库 ...
- java学习笔记13--反射机制与动态代理
本文地址:http://www.cnblogs.com/archimedes/p/java-study-note13.html,转载请注明源地址. Java的反射机制 在Java运行时环境中,对于任意 ...
- java jvm学习笔记二(类装载器的体系结构)
欢迎装载请说明出处:http://blog.csdn.net/yfqnihao 在了解java虚拟机的类装载器之前,有一个概念我们是必须先知道的,就是java的沙箱, ...
- amazeui学习笔记--css(HTML元素2)--代码Code
amazeui学习笔记--css(HTML元素2)--代码Code 一.总结 1.行内代码:code标签<code> 2.代码片段:pre标签<pre> 3.限制代码块高度:添 ...
- ReactJS学习笔记——npm、JSX、webpack
2019独角兽企业重金招聘Python工程师标准>>> #ReactJS学习笔记--npm.JSX.webpack [toc] React是一个JavaScript库文件,使用它的目 ...
- LVS学习笔记--概念
最近在学习南非蚂蚁大大的博客上的一些文章,主要在学习LVS,现在就是将自己学习到的内容记录下来,做一个学习笔记与大家分享. 南非蚂蚁大大的博客是http://ixdba.blog.51cto.com ...
- Vue 学习 第六天学习笔记
Vue 学习 第六天学习笔记 1.webpack 使用复习 第一步:先建立文件夹. 第二步,用webpack将其初始化,建立管理.npm 的包管理工具管理起来, npm init -y .注意{查 ...
- jvm学习笔记(一)
jvm学习笔记(一) 文章目录 jvm学习笔记(一) 1.全部笔记链接 3.类加载器 作用 类别 加载步骤 获得类加载器 4.双亲委派机制 5.沙箱安全机制 沙箱概念 JAVA沙箱的基本组件 基本组件 ...
最新文章
- Git 分布式版本控制系统
- python在工作上可以干什么-学习Python以后能在企业里工作中能做什么?
- python 判断子序列_LeetCode 392. 判断子序列 | Python
- Hadoop配置文件
- 云服务器的发展历程,盘点微软Azure云服务器的发展历程
- 使用XAMPP轻松建站(上)
- VB 创建快捷方式函数(可带参数)
- Linux scp连接很慢,ssh连接很慢问题分析
- css左侧投影_css单边投影与双侧投影
- 【JZOJ4743】【NOIP2016提高A组模拟9.2】积木
- mysql编译安装后各种常见错误集锦
- ARC094F Normalization
- win10下装黑苹果双系统_预算5000的黑苹果/WIN双系统台式电脑组装建议
- 2020-10-28网络安全之网络安全产品
- 科技赋能时代 用ocr身份证识别
- 电感式传感器的原理大白话
- 【转】DICOM医学图像处理:浅析SWF、MWL、SPS、MPPS
- 楼氏电子推出Raspberry Pi 开发工具包,为新物联网应用和行业语音整合提供支持
- 无名2021/01/18
- 虚拟主机换云服务器,云虚拟主机想换云服务器