`
ghl116
  • 浏览: 163923 次
  • 性别: 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

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

    一个轻量级的PHP依赖注入框架

    iiDestiny依赖注入框架,正如其名,是一个轻量级的解决方案,专注于提供简洁、高效的依赖注入功能。它允许开发者自定义方法使用依赖注入,这意味着你可以在任何需要的地方利用这一特性,而不仅仅是构造函数。这种...

    scriptjs异步JavaScript加载器和依赖管理器

    `script.js`是一个轻量级且功能强大的工具,它允许开发者实现异步加载JavaScript文件,并有效地管理它们之间的依赖关系,从而提升网页的加载速度和用户体验。 1. **异步加载的优势** - **非阻塞加载**:传统的方式...

    轻量级JavaEE企业应用实战第三版

    读者在阅读《轻量级JavaEE企业应用实战第三版》时,应关注如何合理运用Struts 2处理Web层的请求,如何利用Spring 3的强大功能实现业务逻辑和资源管理,以及如何借助Hibernate进行高效的数据持久化操作。同时,书中...

    一个轻量级的multi-tier WPF application 嵌入到框架Catharsis中的程序例子

    - `WpfMvc.sln`:这是一个Visual Studio解决方案文件,包含了项目的所有组件和依赖关系,允许开发者在IDE中管理和编译整个应用。 - `WpfMvc.suo`:这是Visual Studio解决方案用户选项文件,存储了用户的个性化设置,...

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

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

    基于原生JavaScript的轻量级图片懒加载组件设计源码

    该项目是一款采用原生JavaScript编写的轻量级图片懒加载组件源码,总文件数为39个,涵盖18个JPEG图片文件、17个JavaScript脚本文件、2个Markdown文件、1个HTML文件及1个LICENSE文件。组件旨在提供高效且无依赖的图片...

    JAVA里使用Jetty作为轻量级嵌入式的Web容器

    Java中的Jetty是一个轻量级、高性能且可嵌入式的Web服务器和Servlet容器,它以其简单易用和高效性在开发社区中广受欢迎。本文将深入探讨Jetty的基本概念、特性以及如何在Java项目中使用它。 1. **Jetty简介** - ...

    轻量级XML文件解析类

    轻量级XML文件解析类通常是为了在资源有限或者对性能有较高要求的环境中,提供一种简洁、高效的处理XML文档的解决方案。 在给定的场景中,我们有一个名为"SXmlUnicode.h"的头文件,这很可能是一个实现了轻量级XML...

    轻量级的Dot Net编译器支持C#和VB.NET_.net 静态编译器.rar

    该编译器的轻量级特性意味着它具有较小的体积和较高的运行效率。这在某些特定场景下特别有价值,比如在资源有限的设备上运行应用程序或者需要快速部署的应用。轻量级编译器能够在不影响功能的前提下,降低对系统资源...

    ModRunJava类加载器可以直接从Maven存储库加载并运行类

    2. **轻量级部署**:由于不需要预先包含所有依赖,应用的体积可以显著减小,特别是对于依赖众多第三方库的大型项目,这种优势更为明显。 3. **快速迭代**:开发过程中,只需更新Maven仓库中的类或库,无需重新构建...

    Sundial,一种轻量级作业调度框架.zip

    总结,Sundial作为一款轻量级的Java作业调度框架,以其简洁的API和强大的功能,为开发者提供了高效的任务调度解决方案。了解并掌握Sundial的使用,能极大地提升开发效率,为项目带来便利。通过合理的任务设计和管理...

    轻量级的自定义弹窗插件 不需要设置属性

    总结来说,这个轻量级的自定义弹窗插件凭借其无需设置属性的特性,为开发者提供了一种快速实现弹窗功能的解决方案。结合jQuery的强大功能,无论你是前端新手还是资深开发者,都能轻松地将弹窗集成到你的项目中,提升...

    轻量级Django第三章代码基于Django2.1

    轻量级Django通常指的是使用较少的资源和依赖,但仍能提供核心功能的方法。这可能涉及到简化项目结构、精简配置或利用特定的库和工具来提高效率。在这个项目的第三章中,我们可能会看到如何利用Django的内置功能和第...

    轻量级数据库sqlite(c#,java)

    SQLite是一款开源、轻量级的嵌入式关系型数据库,被广泛应用于移动设备、桌面系统以及服务器环境。它不需要单独的服务器进程,而是作为一个库直接集成到应用程序中,因此得名“轻量级”。SQLite支持多种编程语言,...

    基于PHP的轻量级框架(Y).zip

    5. **社区支持**:尽管轻量级,但许多框架仍拥有活跃的社区,提供丰富的插件和解决方案。 【核心组件及功能】 - **路由系统**:负责解析URL,将请求映射到相应的控制器和方法。 - **依赖注入**:允许动态地向对象...

    移动端touch焦点图插件无任何依赖轻量级简单易用易改

    总结起来,移动端touch焦点图插件TouchSlider以其无依赖、轻量级和易用性,为移动Web开发提供了一个高效的解决方案。它简化了图片轮播功能的实现,降低了开发难度,并且允许开发者根据需求进行灵活的定制,从而提升...

    AureliaFramework7一个轻量级的移动应用平台

    Aurelia Framework7 是一款基于JavaScript的轻量级移动应用框架,它结合了Aurelia框架的强大力量和Framework7的优秀UI设计,旨在帮助开发者构建高性能、跨平台的混合移动应用程序。在这个主题中,我们将深入探讨...

    simpledatatable轻量级和简单的数据表没有任何依赖

    总结来说,`simpledatatable`是一个适用于小型项目或者需要轻量级表格解决方案的JavaScript库,它的无依赖、易用性和可扩展性使其在特定场景下具有很高的价值。对于开发者而言,熟悉并掌握这种工具,可以提高开发...

Global site tag (gtag.js) - Google Analytics