`
zhouyrt
  • 浏览: 1172551 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

JS/CSS module LazyLoad 之一

 
阅读更多

随着web app中JS越来越多,有时页面首次加载时有很多JS并没有用到。这时为了提高下载速度,提高页面渲染效率就需要让这部分暂时不用的JS延迟加载,即只在用到它们的时候再下载。这里会先实现一个最简单JS的惰性加载。后续几篇会逐步加强功能直至一个完整的JS/CSS模块加载库。这个系列里我不会实现队列,即各个JS文件是并行下载的,只有当多个JS全部下载后才执行回调。当然在第二个系列JS Queue LazyLoad中会实现各个JS文件顺序加载,每个JS文件下载后都有一次回调机会。这两种方式有各自的应用场景。

 

先给出使用接口

 

LazyLoad.js(
	urls  // js文件路径
	fn    // 全部加载后回调函数
	scope // 指定回调函数执行上下文
);

 

示例

 

LazyLoad.js(['a.js','b.js','c.js'], function(){
	alert('加载完毕');
});

 

Firebug中效果如下,a,b,c三个文件几乎是同一时间开始下载的。

 

 

这个系统会尽全力去加载所有的JS文件,即当某个文件不存在或加载失败它不会就此中断,仍然会去加载其它的JS文件。直到所有的模块都加载了一次才去回调。

 

完整代码

 

LazyLoad = function(win){	
	var list,
		isIE = /*@cc_on!@*/!1,
		doc = win.document,
		head = doc.getElementsByTagName('head')[0];

	function createEl(type, attrs){
		var el = doc.createElement(type),
			attr;
		for(attr in attrs){
			el.setAttribute(attr, attrs[attr]);
		}
		return el;
	}
	function finish(obj){
		list.shift();
		if(!list.length){
			obj.fn.call(obj.scope);
		}
	}
	function js(urls, fn, scope){
		list = [].concat(urls);
		var obj = {scope:scope||win, fn:fn};
		for(var i=0,len=urls.length; i<len; i++){
			var script = createEl('script', {src: urls[i]});
			if(isIE){
				script.onreadystatechange = function(){
					var readyState = this.readyState;
					if (readyState == 'loaded' || readyState == 'complete'){
						this.onreadystatechange = null;
						finish(obj);
					}
				}
			}else{
				script.onload = script.onerror = function(){
					finish(obj);
				}
			}
			head.appendChild(script);
		}
	}
	return {js:js};
}(this);
 

 

  • 大小: 15.4 KB
0
2
分享到:
评论

相关推荐

    Angular4LazyloadAngular4懒加载htmljscss等资源

    Angular 4 懒加载(Lazy Loading)是提高应用程序性能的一种关键策略,它允许我们按需加载模块,而不是一次性加载整个应用。这显著减少了初始加载时间,尤其在大型项目中,用户可以更快地看到应用程序的主要界面,而...

    edge-magento-module-lazyload:外缘的Magento延迟加载产品模块

    安装和配置"edge-magento-module-lazyload"模块时,需要修改Magento的布局文件(XML),可能还需要定制一些CSS和JavaScript,以适应网站的现有样式和交互。 在"edge-magento-module-lazyload-master"这个压缩包中,...

    font-load-module-samples:CSS 字体加载模块示例

    本篇将深入探讨“font-load-module-samples”项目,以及如何利用CSS字体加载模块提升网页性能。 1. **CSS字体加载策略** - **延迟加载(Lazy Loading)**:传统CSS通过`@font-face`规则引入字体,可能导致页面渲染...

    angularjs-requirejs-lazy-load

    标题 "angularjs-requirejs-lazy-load" 指向的是一个使用 AngularJS 和 RequireJS 进行懒加载(Lazy Loading)的项目。这个项目旨在展示如何在基于 AngularJS 的应用中结合 RequireJS 来优化资源加载,提高应用程序...

    基于webpack4搭建的react项目框架的方法

    Webpack 4是一个强大的模块打包工具,它能够处理JavaScript和静态资源,如CSS、图片等。与React结合使用,可以构建高性能的单页应用程序(SPA)。 首先,我们要安装必要的依赖。在本示例中,我们使用`yarn`来管理包...

    angularjs ocLazyLoad分步加载js文件实例

    在`index.js`中,我们定义了一个名为`myApp`的AngularJS模块,并注入了`ui.router`和`oc.lazyLoad`。 接下来,配置路由状态(states): ```javascript var myApp = angular.module("myApp", ["ui.router", "oc....

    AngularJS中的按需加载ocLazyLoad示例

    在AngularJS中,为了优化大型应用的性能和用户体验,我们可以采用按需加载(Lazy Loading)技术,其中ocLazyLoad是一个非常实用的库,它允许我们在运行时动态加载模块、控制器、服务、指令等。以下是对ocLazyLoad的...

    Webapp Architecture

    - **LazyLoad**:按需加载资源,提高页面性能。 - **curl.js**:用于异步加载脚本和样式表的工具。 - **DeferJS**:延迟脚本执行。 - **jquery.defer.js**:基于jQuery的异步控制工具。 - **jQI**:jQuery插件...

    使用Workbox20的Angular渐进式Web应用程序

    在构建现代Web应用程序时,渐进式Web应用(Progressive Web Apps, PWA)已经成为一个热门话题。渐进式Web应用结合了Web和原生应用的优点,提供了离线支持、快速加载、即时更新等特性。在Angular框架中,我们可以利用...

    yui 资源包

    此外,YUI的延迟加载(LazyLoad)特性,能让非核心模块在需要时才加载,进一步优化资源使用。 总结,YUI 3.9.0 r2是一个强大的前端开发框架,它提供了一整套工具和组件,以应对复杂的界面设计挑战,并通过优化资源...

    AngularJS使用ocLazyLoad实现js延迟加载

    var app = angular.module('formCtrlParts', ['oc.lazyLoad']); ``` 3. **控制器中的按需加载**:在需要使用延迟加载模块的控制器中,使用`$ocLazyLoad`服务加载具体的JavaScript文件。例如: ```javascript ...

    AngularJS动态加载模块和依赖的方法分析

    angular.module('myApp', ['oc.lazyLoad']); ``` ### 配置ocLazyLoad 在配置阶段,你可以使用`$ocLazyLoadProvider`来设置动态加载的参数: ```javascript .config(['$ocLazyLoadProvider', function($...

    Angular-Ui-Router+ocLazyLoad动态加载脚本示例

    angular.module('myRouters', ['ui.router', 'oc.lazyLoad']) .state('index', { url: '/index', title: '首页 | 示例应用', views: { 'A': { templateUrl: 'components/header/header.html', controller: '...

    page-loading

    在网页开发中,"page-loading"通常指的是页面加载的过程,它是用户访问网站时首先进入视线的元素之一,直接影响到用户体验。"page-loading"优化是前端性能优化的关键部分,尤其在资源丰富的现代网页中,快速的加载...

Global site tag (gtag.js) - Google Analytics