seajs动态加载js原理_seajs的加载原理

刚跟 @乱码 讨论了下seajs的加载原理, 做了下手记, 记下来... 啦啦啦

define添加到到seajs.cache里里#723 => 检测检测下依赖+返回值整个 #746 => 页面use触发(主入口,并留下回调埋点)#795 => 执行mod.load#813 => 分析所有依赖如果没有加载则加载#557 => fetch是加载js文件 => 如果全部加载完成执行mod.onload => onload负责运行回调(use里的埋点,CA又转回来了##798) => 回调里又运行所有依赖模块的exec#662 => exec里负责查看define的模块是是否被运行#668,如果没有运行则建立一个require的临时fn当param运行运行#677 并把返回结果打在mod的exports上上#704, 反返回给回调那那处理#710 #803, 这也是怎么能use([1,2,3],function(1,2,3){})的的原因 => 到这里已经加载完所有的依赖了,且拿到回调了#805 => 如果有callback还不运行等着干啥呢? #807

其实就一句话:

定义->缓存(依赖+整个fn)->use触发->判断依赖->判断所有依赖+js文件是否加载成功->判断每个模块的fn是否被运行->拿到每个模块的返回值->执行回调, 当然其中的心酸只有玉伯知道,比如 模块依赖模块,url解析 等... 那个提前预加载preload跟依赖相比就略显轻松了

注: 以上代码行号为2.2.1版本.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值