• 自研模块加载器(二) 加载器结构与设计导论


    结构导论

    模块部分

    数据初始化: 加载器中设计来一个名为Module的构造函数,每个模块都是此构造函数实例对象。构造函数中给实例对象扩展了"未来"所需用到的属性和方法。 

    模块存储: 加载器中设计来一个名为cache的缓存对象,每个文件(模块)都会存储在cache对象中。

    具体存储方式: { "当前模块的绝对路径" : new Module()}, 注意: 当前模块的绝对路径是通过资源部分,资源定位方法实现的。

    每个模块创建都先初始化数据,存储在缓存对象中。

    资源部分

    依赖管理:已知当前模块在cache中的形态,{"当前模块的绝对路径": new Module()}

    换算: {"当前模块的绝对路径": {uri: "当前模块的绝对路径", deps:[]}};  deps存储当前模块的依赖列表,依赖列表通过动态加载script文件正则解析获取。

    重点: 解析依赖->获取依赖模块绝对路径->动态加载->提取依赖->解析依赖. 递归的方式加载所有的模块,直至模块全部加载完毕。

    资源定位:加载器中设计了一个 resolve()的方法把模块名解析成绝对路径格式。

    模块名的获取: startUp.use(['a.js', 'b.js']);  startUp.use()加载器的启动方法,启动时会去调用传入数组列表中的模块。

    动态加载script文件: 通过加载器resolve()方法把模块名解析成绝对路径格式。动态创建script document.createElement('script');  把src指向当前模块的绝对路径地址。加载文件的同时,模块加载器解析当前模块所依赖的模块以数组的形式存储。

    资源定位依赖管理是加载器设计的两大核心。

  • 相关阅读:
    五子棋
    纯ASP实现的“无刷新”聊天室
    砸砖块
    ASP.NET中批量插入数据
    判断一个dataset的数据是否包含另一个dataset的数据
    使用DB2时的一些问题
    RTOS,什么是硬实时和软实时
    异或运算^的一个作用
    vc 重启和关机
    About DLL
  • 原文地址:https://www.cnblogs.com/zzd0916/p/12234286.html
Copyright © 2020-2023  润新知