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

结构导论

模块部分

数据初始化: 加载器中设计来一个名为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指向当前模块的绝对路径地址。加载文件的同时,模块加载器解析当前模块所依赖的模块以数组的形式存储。

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

原文地址:https://www.cnblogs.com/zzd0916/p/12234286.html

时间: 2024-08-25 20:50:37

自研模块加载器(二) 加载器结构与设计导论的相关文章

JAVA类加载器二 通过类加载器读取资源文件

一.getResourceAsStream方法 getResourceAsStream方法实现如下: public InputStream getResourceAsStream(String name) { URL url = getResource(name); try { return url != null ? url.openStream() : null; } catch (IOException e) { return null; } } 可见getResourceAsStream

python 之装饰器(用装饰器给现有函数增加新功能)

#!/usr/bin/env python # -*- coding: utf-8 -*- """ Created on Mon Nov 14 01:01:29 2016 @author: toby """ #知识点:装饰器 ''' #一.小粒子: #要求1.假如产品经历要求在每个函数之上执行之前都添加一个验证的功能,当然这里只是模拟而已,别当真哈! #已写好的现有函数如下,有1000个函数 def func1():     print 'fun

自研模块加载器(三) module模块构造器设计-模块数据初始化

依赖加载策略 模块数据初始化 status状态生命周期 代码展示 demo包括4个文件, index.html , a.js , b.js , startUp.js index.html <!DOCTYPE html> <html> <head> <title>自研模块加载器</title> </head> <body> <script src="./startUp.js"></scr

自研模块加载器(四) 模块资源定位-异步加载

资源定位-动态加载 通过resolve方法进行异步解析,完整解析如下图所示: 根据上篇文章startUp.js代码,我们继续完善本章动态加载资源的代码. (function(global) { var startUp = global.startUp = { version: '1.0.1' } var data = {}; // 获取当前模块加载器配置信息 var cache = {}; // 缓存 //模块的生命周期 var status = { FETCHED: 1, SAVED: 2,

类的加载机制和反噬——二、类加载器

类加载器 1.类加载器简介 (1)类加载器负责加载所有的类,系统为所有被载入内存中的类生成一个java.lang.Class实例: (2)一旦一个类被载入JVM中,同一个类就不会被再次载入了: (3)同一个类的标准:在JVM中用全限定名和类加载器作为其唯一标识: (4)JVM启动时,形成的三个类加载器组成的初始类加载器层次结构: 1)BootStrap ClassLoader:根类加载器: 2)Extension ClassLoader:拓展类加载器: 3)System ClassLoader:

面试题思考:其实类加载器的加载机制很简单

针对类加载器的分类与说明 一.类加载器的分类: 1.系统提供的类加载器 1.BootStarp(引导类加载器):负责加载java核心类库,不继承自ClassLoader加载器: 2.Extension(扩展类加载器):负责加载java扩展库(例如sun公司专门为连接数据库设计的JDBC的一组API) 3.Application(系统类加载器): 负责加载普通用户编写的java应用类 备注:1.BootStrap加载器是由原生代码(C++)编写而成的,因此不继承自ClassLoader加载器,其他

C编译器、链接器、加载器详解

摘自http://blog.csdn.net/zzxian/article/details/16820035 C编译器.链接器.加载器详解 一.概述 C语言的编译链接过程要把我们编写的一个c程序(源代码)转换成可以在硬件上运行的程序(可执行代码),需要进行编译和链接.编译就是把文本形式源代码翻译为机器语言形式的目标文件的过程.链接是把目标文件.操作系统的启动代码和用到的库文件进行组织形成最终生成可加载.可执行代码的过程. 过程图解如下: 预处理器:将.c 文件转化成 .i文件,使用的gcc命令是

Struts2配置拦截器,struts2加载常量时的搜索顺序

1:struts2加载常量时的搜索顺序 1.Struts-default.xml 2.Struts-plugin.xml 3.Struts.xml 4.Struts-properties(自己创建的) 5.web.xml 如果在多个文件中配置了同一个常量,则后一个文件中配置的常量值会覆盖前面的文件配置的常量值 2:Struts2拦截器配置 1.在Struts.xml中配置一个默认请求的action <!-- 没有找到action时默认执行的action --> <default-acti

Java 类加载器及加载Class字节码

参考来源:http://www.cnblogs.com/fingerboy/p/5456371.html       java笔记--理解java类加载器以及ClassLoader类 参考来源:http://blog.csdn.net/shareus/article/details/52422788    Java 类加载器及加载Class字节码