随着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
分享到:
相关推荐
Angular 4 懒加载(Lazy Loading)是提高应用程序性能的一种关键策略,它允许我们按需加载模块,而不是一次性加载整个应用。这显著减少了初始加载时间,尤其在大型项目中,用户可以更快地看到应用程序的主要界面,而...
安装和配置"edge-magento-module-lazyload"模块时,需要修改Magento的布局文件(XML),可能还需要定制一些CSS和JavaScript,以适应网站的现有样式和交互。 在"edge-magento-module-lazyload-master"这个压缩包中,...
本篇将深入探讨“font-load-module-samples”项目,以及如何利用CSS字体加载模块提升网页性能。 1. **CSS字体加载策略** - **延迟加载(Lazy Loading)**:传统CSS通过`@font-face`规则引入字体,可能导致页面渲染...
标题 "angularjs-requirejs-lazy-load" 指向的是一个使用 AngularJS 和 RequireJS 进行懒加载(Lazy Loading)的项目。这个项目旨在展示如何在基于 AngularJS 的应用中结合 RequireJS 来优化资源加载,提高应用程序...
Webpack 4是一个强大的模块打包工具,它能够处理JavaScript和静态资源,如CSS、图片等。与React结合使用,可以构建高性能的单页应用程序(SPA)。 首先,我们要安装必要的依赖。在本示例中,我们使用`yarn`来管理包...
在`index.js`中,我们定义了一个名为`myApp`的AngularJS模块,并注入了`ui.router`和`oc.lazyLoad`。 接下来,配置路由状态(states): ```javascript var myApp = angular.module("myApp", ["ui.router", "oc....
在AngularJS中,为了优化大型应用的性能和用户体验,我们可以采用按需加载(Lazy Loading)技术,其中ocLazyLoad是一个非常实用的库,它允许我们在运行时动态加载模块、控制器、服务、指令等。以下是对ocLazyLoad的...
- **LazyLoad**:按需加载资源,提高页面性能。 - **curl.js**:用于异步加载脚本和样式表的工具。 - **DeferJS**:延迟脚本执行。 - **jquery.defer.js**:基于jQuery的异步控制工具。 - **jQI**:jQuery插件...
在构建现代Web应用程序时,渐进式Web应用(Progressive Web Apps, PWA)已经成为一个热门话题。渐进式Web应用结合了Web和原生应用的优点,提供了离线支持、快速加载、即时更新等特性。在Angular框架中,我们可以利用...
此外,YUI的延迟加载(LazyLoad)特性,能让非核心模块在需要时才加载,进一步优化资源使用。 总结,YUI 3.9.0 r2是一个强大的前端开发框架,它提供了一整套工具和组件,以应对复杂的界面设计挑战,并通过优化资源...
var app = angular.module('formCtrlParts', ['oc.lazyLoad']); ``` 3. **控制器中的按需加载**:在需要使用延迟加载模块的控制器中,使用`$ocLazyLoad`服务加载具体的JavaScript文件。例如: ```javascript ...
angular.module('myApp', ['oc.lazyLoad']); ``` ### 配置ocLazyLoad 在配置阶段,你可以使用`$ocLazyLoadProvider`来设置动态加载的参数: ```javascript .config(['$ocLazyLoadProvider', function($...
angular.module('myRouters', ['ui.router', 'oc.lazyLoad']) .state('index', { url: '/index', title: '首页 | 示例应用', views: { 'A': { templateUrl: 'components/header/header.html', controller: '...
在网页开发中,"page-loading"通常指的是页面加载的过程,它是用户访问网站时首先进入视线的元素之一,直接影响到用户体验。"page-loading"优化是前端性能优化的关键部分,尤其在资源丰富的现代网页中,快速的加载...