seajs 源码 学习心得

学习seajs源码前:

1,异步加载js文件方法

var _script = document.createElement('script');

_script.onload = function(){

}

_script.src = src;


2,异步加载完成时,将自动执行JS文件内容

3,问题1:如何获得js文件返回结果;

解决:增加 define 方法 ,异步js文件加载完成时,将自动执行define方法


4,require('a');  如何获得 a.js 文件返回的结果,或exports

    解决: 改造 define 方法, 在define里 将返回结果 存入  cacheMod 中

5, require('a'); 返回结果早于 a.js define方法的结果

    同步获得返回结果时,require('a');获得的 cacheModes['a'].exports 为空

    需 define 执行后才有值


基于上诉的一些问题,开始学习sea.js源码 (V2.2.0)

首先是 sea.js 使用的 核心 Module.js

1,Module.requre方法

在这个方法里 调用 Module.get方法

2 ,Module.get 方法

该方法中 调用 cacheModes[uri]以保证只会加载一次同一个模块文件

如果cacheModes[uri] 不存在, 则会 创建一个新的 Module 类

3, Module.define 方法

该方法中,将保存id,依赖,及factory(回调方法)

期中 factory是重中之重。

4,Module.prototye.exec()

该方法也是Module极为重要的一个方法。

该方法中,进行了模块加载完成时的 factory方法的调用


原来的误区,认为require时  进行了 异步加载,同时继续代码继续执行。

事实上,是在加载了所有 依赖 和 require 的js文件后 才开始执行factory方法


即 在执行 require('a');时 a.js 已经加载完成

通过匹配factory的内容 找到require 的内容 在执行factory时,即加入加载队列中

当所有队列加载完毕时,开始依次执行回调函数 define = function(callback)


sea.js 流程(例子,只展现执行了的流程)


sea.use(['main'].function(main){});

Module.use = {

    mod = cacheMods['main'] = new Module('main');    //mod.uri = 'main';

    mod._entry.push(mod);                                                //mod._entry = [mod]    该mod 即位本身

    mod.callback = function(){

        exports[0] = cacheMods['main'].exec();

        callback.apply(global,exports);

    }

    mod.load();

}

Module.prototype.load = {

    mod.status = STATUS.LOADING

}


未完。。



转载于:https://my.oschina.net/wisdomofgod/blog/592394

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值