`
ghl116
  • 浏览: 161436 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

轻量级文件加载和依赖管理解决方案

阅读更多

近一年来,国内外都十分热衷于异步加载的研究,为了加快页面的载入速度,无阻塞加载Javascript的方法和框架成为了前端开发的焦点和亮点之一。 

国外的像基于jQuery的RequireJs,YUI Loader,LabJs,RunJs,国内也有淘宝的SeaJs,豆瓣的DoJs等,这些都是一些十分优秀的模块加载器。但是本文将会向大家介绍一个新的开源的轻量级“多线程”异步模块加载器In.js,In的开发借鉴了Do的一些思路和使用习惯,在此期间感谢@kejun同我的耐心交流,In.js压缩后只有4.77k,不仅小巧而且十分好用。 

 

优点: 

按需加载 

无阻塞加载 

依赖关系管理 

颗粒化模块管理 

如何使用? 

A.引入In.js 

复制代码 代码如下:

<script type="text/javascript" src="in.js" autoload="true" core="jquery.min.js"></script> 

 

只需要在页面顶部引入in.js即可,这里有两个参数需要注意: 

autoload: 是否在加载in.js的时候加载底层核心库 – {可选参数 – true|false} 

core: 底层核心库的路径 – {可选参数 – url} 

如果同时设置了core,并且autoload=true,则在引入In.js的同时加载core到页面中。 

B.声明各个模块的地址和依赖关系In.add(name,{config}) 

复制代码 代码如下:

In.add('mod-a',{path:'mods/a.js',type:'js',charset:'utf-8'}); 

In.add('mod-b',{path:'mods/b.js',type:'js',charset:'utf-8',rely:['mod-b-css']}); 

In.add('mod-b-css',{path:'mods/b.css',type:'css',charset:'utf-8',rely:['mod-a']}); 

 

上述代码声明了三个模块的依赖关系和模块的地址,并将它们加入到队列中去(仅仅是加入队列,并没有加载到页面中去)。 

C.加载队列In(queue) 

复制代码 代码如下:

var demo=In('mod-b',function() { 

//do something 

},function() { 

//do something 

return false; 

}); 

 

加载mod-b模块,加载完后执行functionA和functionB,在此假设引入in.js时设置了autoload=true,那么队列中的加载顺序依次为: 

1 jquery.min.js >>> mod-a >>> mod-b-css >>> mod-b >>> functionA() >>> functionB() 

队列全部加载完成后,demo会被赋值为一个数组,其中存放的是每个function的返回值: 

1 demo={returns:[undefined,false],complete:true} 

D.在domReady之后加载队列In.ready(queue) 

复制代码 代码如下:

In.ready('mod-b',function() { 

//do something 

}); 

 

队列加载顺序: 

jquery.min.js >>> {domReady} >>> mod-a >>> mod-b-css >>> mod-b >>> function() 

In.ready()和In()的区别在于两点: 

In.ready()中的队列只有在domReady之后才会执行 In.ready()没有返回值 E.监听变量变化,值改变则执行回调In.watch(object,property,function(prop,old,new) {}) 

由于In加载的队列均为异步非阻塞式加载,所以有时候为了特殊需求(比如后续的操作依赖队列中function的返回值),我们需要在确保队列执行完成后,再执行后续操作。这种情况下,可以用In.watch()监听return.complete变量,当 return.complete==true的时候执行回调函数,代码如下: 

复制代码 代码如下:

var model=In('model',function() { 

//do something 

return 123; 

}); 

In.watch(model,'complete',function(prop,old,new) { 

if(model[prop]==true) { 

console.log(model.returns[0]);//print 123 

In.unwatch(model,prop);//destroy the watch event of model.complete 

}); 

 

In的魅力远远不止上述这些,它的可靠性也已经在几个大项目中得到了印证,除此之外,In也有智能的提示,比如如果用In()加载一个事先未声明的模块,就会提示你检查模块名。真心的希望有更多的前端朋友关注In,使用In,甚至投入到In的后续开发中来。

 

 

详细出处参考:http://www.jb51.net/article/27801.htm

分享到:
评论

相关推荐

    轻量级文件加载和依赖管理解决方案.zip

    通过系统性的规划和执行,方案能够分析问题的根本原因,提供可行的解决方案,并引导实施过程,确保问题得到合理解决。 目标达成: 方案通常与明确的目标相关联,它提供了一种达成这些目标的计划。无论是企业战略、...

    in.js 一个轻量级的JavaScript颗粒化模块加载和依赖关系管理解决方案

    但是本文将会向大家介绍一个新的开源的轻量级“多线程”异步模块加载器In.js,In的开发借鉴了Do的一些思路和使用习惯,在此期间感谢@kejun同我的耐心交流,In.js压缩后只有4.77k,不仅小巧而且十分好用。 优点: 按...

    delayed-js:通过动态加载和依赖跟踪来延迟 JavaScript 文件和脚本的加载

    Delayed JS 是一种轻量级解决方案,旨在通过动态加载和依赖跟踪来延迟 JavaScript 文件和脚本的加载,而无需外部加载大型库。 它有助于防止页面呈现阻塞,从而使页面加载速度更快,并满足谷歌的页面速度建议。 使用...

    dobux::leaf_fluttering_in_wind:轻量级的响应状态管理解决方案

    多布克斯基于React Context和React Hooks的轻量级响应状态管理解决方案。 English | :sparkles: 特征 :party_popper: 简化:只有3个核心API,没有额外的学习成本,易于使用React Hooks的知识入门。 :rocket: 不可变...

    sal::rocket:注重性能的轻量级滚动动画库:rocket:

    Sal (滚动动画库)的创建旨在为滚动动画元素提供高性能和轻量级的解决方案。 它基于 ,它在检查元素在视口中的存在方面提供了惊人的性能。 注意: Intersection Observer API是一项实验性技术,因此请务必参考并...

    ichartjs和示例程序

    轻量级:ichartjs压缩文件只有90k。如果你只需要单一的图形功能,你也可以只加载你所需要的js文件。 那样代码量会更少。ichartjs不依赖任何其他库。只和浏览器相关。这样给你带来的是一个完全独立的轻量级js组件。 ...

    JAVA上百实例源码以及开源项目

    2个目标文件,FTP的目标是:(1)提高文件的共享性(计算机程序和/或数据),(2)鼓励间接地(通过程序)使用远程计算机,(3)保护用户因主机之间的文件存储系统导致的变化,(4)为了可靠和高效地传输,虽然用户...

    基于vite+vue3+pinia+element-plus+ts后台管理系统源码+项目说明.zip

    vue-element-perfect 是一个后台前端解决方案,它使用了最新的前端技术栈、动态路由,权限验证,并且有着丰富的组件,企业级中后台解决方案,可免费商用,同时支持PC、平板、手机 ## 项目功能 - 使用Vue3.0开发,单...

    gioc:Golang IOC框架

    gioc是一个轻量级的Ioc框架,它提供注册和工厂依赖的解决方案特征依赖解决依赖注入单例/瞬态支持自定义标签调用者支持加载扩展支持支持支持正在安装go get -u github.com/vlorc/gioc快速开始创建根模块gioc ....

    JAVA上百实例源码以及开源项目源代码

    2个目标文件,FTP的目标是:(1)提高文件的共享性(计算机程序和/或数据),(2)鼓励间接地(通过程序)使用远程计算机,(3)保护用户因主机之间的文件存储系统导致的变化,(4)为了可靠和高效地传输,虽然用户...

    基于opencv的4种YOLO目标检测,C++和Python两个版本的实现,仅仅只依赖opencv库就可以运行.zip

    物联网与嵌入式系统:在资源受限的嵌入式设备上,OpenCV提供轻量级的计算机视觉解决方案。 学习与社区资源 OpenCV拥有丰富的官方文档、教程、示例代码以及活跃的开发者社区,包括GitHub、StackOverflow、官方论坛...

    java开源包1

    MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包 jSIP.tar jSIP这个Java包目标是用Java实现SIP(SIP:...

    java开源包11

    MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包 jSIP.tar jSIP这个Java包目标是用Java实现SIP(SIP:...

    java开源包2

    MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包 jSIP.tar jSIP这个Java包目标是用Java实现SIP(SIP:...

    java开源包3

    MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包 jSIP.tar jSIP这个Java包目标是用Java实现SIP(SIP:...

    java开源包6

    MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包 jSIP.tar jSIP这个Java包目标是用Java实现SIP(SIP:...

    java开源包5

    MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包 jSIP.tar jSIP这个Java包目标是用Java实现SIP(SIP:...

    java开源包10

    MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包 jSIP.tar jSIP这个Java包目标是用Java实现SIP(SIP:...

Global site tag (gtag.js) - Google Analytics