首页 > 代码库 > YUI笔记 1 模块加载
YUI笔记 1 模块加载
我们通常开发js程序就是使用<script>标签把脚本引入到页面中进行开发,如果是简单的逻辑还好,但是如果是比较庞大的大规模js开发,可能会出现下面的问题:
1. <script>标签载入脚本和执行脚本是在一起处理的,所以开发人员需要自己控制这个过程
2. <script>标签是阻塞型下载的,所以对用户体验可能会产生影响,所以通常推荐把脚本放在页面底部,一些async和defer属性也部分解决了这个问题
3. <script>的全局变量是共享的,也就是说所有的代码都是在一个环境下执行的,没有命名空间的概念,这样容易引起代码的相互影响,比如后引入的代码造成之前代码的崩溃和bug
4.<script>没有依赖关系,脚本的载入通常是要严格遵守先后顺序,不如可能会引起依赖问题。
出现这些问题的原因是JS环境没有高级编程语言(例如PHP,Java,C#)中的模块概念,为了解决这些问题,随着JS的发展,YUI提供了一个解决方案:YUI3提供了一个全局对象 YUI,他既是一个命名空间,同时也包含了一些加载注册模块等基本功能,他的优点是:
1. 解耦脚本注册和执行阶段,YUI.add()将代码按需加载,YUI.use()在安全沙箱内运行这些模块
2. YUI可以同步或异步加载模块
3. 除了一些静态方法外,YUI避免了使用全局上下文环境,Y实例是私有的,不会被外面的沙箱覆盖
4. YUI支持依赖加载,在add注册模块时,可以包含一些依赖信息,当use这个模块时使用这个信息来构建依赖树,同时跳过已经加载的模块。