angularjs ocLazyLoad分步加载js文件实例


Posted in Javascript onJanuary 17, 2017

用angular有一段时间了,平日里只顾着写代码,没有注意到性能优化的问题,而今有时间,于是捋了捋,讲学习过程记录于此:

问题描述:由于采用angular做了网页的单页面应用,需要一次性在主布局中将所有模块需要引用到的js都引入.对于比较小的项目,这是可行的,但是对于大的项目,一旦js文件较多,在页面首次加载时就引入所有js文件,无疑会延缓页面加载的速度,造成不良额用户体验.那么分布加载(按需加载)就显得很有必要了.

<!DOCTYPE html>
<html lang="en" ng-app="myApp">
<head>
  <meta charset="UTF-8">
  <title>ui-router-lazyload</title>
  <link rel="stylesheet" href="../bootstrap/dist/css/bootstrap.min.css">
  <script src="../angular/angular.min.js"></script>
  <script src="../angular-ui-router/release/angular-ui-router.min.js"></script>
  <script src="../oclazyload/dist/ocLazyLoad.min.js"></script>
  <script src="index.js"></script>
</head>
<style>
  body{
    font-family: "Microsoft JhengHei UI";
  }
  .navigator{
    width: 500px;margin: 0 auto
  }
  .navigator li{
    color: #000;font-size: 14px;
  }
</style>
<body ng-controller="myController">
<ul class="navigator nav nav-pills">
  <li role="presentation" class="active"><a href="#home" ng-click="isActive($event)">主页</a></li>
  <li role="presentation" class="active"><a href="#child">子页面</a></li>
  <li role="presentation" class="active"><a href="#third" ng-click="isActive($event)">三级页面</a></li>
</ul>
<div ui-view style="width: 500px;margin: 50px auto 0"></div>
</body>
</html>

js代码:

var myApp=angular.module("myApp",["ui.router","oc.lazyLoad"]);
myApp.config(function ($stateProvider,$urlRouterProvider) {
  $urlRouterProvider.when("","/home");
  $stateProvider.state('home',{
    url:"/home",
    templateUrl: 'homepage.html',
    resolve:{
      loadMyCtrl:['$ocLazyLoad',function ($ocLazyLoad) {
        return $ocLazyLoad.load({
          name:"homeApp",
          files:["homepage.js"]
        })
      }]
    }
  });
  $stateProvider.state('index',{
    url:"/home",
    templateUrl:'index.html'
  });
  $stateProvider.state('child',{
    url:"/child",
    templateUrl:'child.html',
    resolve:{
      loadMyCtrl:function ($ocLazyLoad) {
        return $ocLazyLoad.load({
          name:'childApp',
          files:["child.js"]
        })
      }
    }
  })
  $stateProvider.state('third',{
    url:"/third",
    templateUrl:'third.html',
    resolve:{
      loadMyCtrl:function ($ocLazyLoad) {
        return $ocLazyLoad.load({
          name:'grandApp',
          files:["third.js"]
        })
      }
    }
  })
  
});
myApp.controller("myController",function ($state,$scope,$location) {
  $scope.turnPage=function () {
    // $state.go('home');
    $location.path('/home')
  }
});

页面初始效果如下图,打开浏览器控制台,可以看到child.js以及third.js在页面载入时并没有加载:

 页面初始化:

angularjs ocLazyLoad分步加载js文件实例

angularjs ocLazyLoad分步加载js文件实例

当点击子页面和三级页面时,会依次加载所依赖的js文件.实现分步加载.

点击子页面:

angularjs ocLazyLoad分步加载js文件实例

angularjs ocLazyLoad分步加载js文件实例

三级页面:

angularjs ocLazyLoad分步加载js文件实例

angularjs ocLazyLoad分步加载js文件实例

 填坑:网上关于angular按需加载的文章也蛮多的,也有人使用的是requireJS来进行这个操作,而且ocLazyLoad的使用方法也有很多.之前按照一些文档的方法,在配置路由时,加了下面的蓝色代码,页面是能跳转,但是homepage.html的js代码却执行了两次,难道是控制器加载了两次么.对于这个坑,我还在探索中,也希望大家能够发表意见或者建议.

$stateProvider.state('home',{
     url:"/home",

 controller:'homeController',
     templateUrl: 'homepage.html',
     resolve:{
       loadMyCtrl:['$ocLazyLoad',function ($ocLazyLoad) {
         return $ocLazyLoad.load({
           name:"homeApp",
           files:["homepage.js"]
         })
       }]
     }
  });

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript窗口宽高,鼠标位置,滚动高度(详细解析)
Nov 18 Javascript
vue基于Vue2.0和高德地图的地图组件实例
Apr 28 Javascript
slideToggle+slideup实现手机端折叠菜单效果
May 25 Javascript
使用Bootstrap和Vue实现用户信息的编辑删除功能
Oct 25 Javascript
微信小程序封装的HTTP请求示例【附升级版】
May 11 Javascript
JS拖动选择table里的单元格完整实例【基于jQuery】
May 28 jQuery
js获取对象,数组所有属性键值(key)和对应值(value)的方法示例
Jun 19 Javascript
ES6 Object属性新的写法实例小结
Jun 25 Javascript
vue实现codemirror代码编辑器中的SQL代码格式化功能
Aug 27 Javascript
Vue实现商品详情页的评价列表功能
Sep 04 Javascript
JavaScript实现字符串与HTML格式相互转换
Mar 17 Javascript
ant design vue的form表单取值方法
Jun 01 Vue.js
微信小程序 登陆流程详细介绍
Jan 17 #Javascript
jQuery无刷新上传之uploadify简单代码
Jan 17 #Javascript
javascript判断元素存在和判断元素存在于实时的dom中的方法
Jan 17 #Javascript
js处理层级数据结构的方法小结
Jan 17 #Javascript
JS中Select下拉列表类(支持输入模糊查询)功能
Jan 17 #Javascript
JavaScript的事件机制详解
Jan 17 #Javascript
js判断手机号是否正确并返回的实现代码
Jan 17 #Javascript
You might like
php正则表达式获取内容所有链接
2015/07/24 PHP
javascript读取RSS数据
2007/01/20 Javascript
基于jquery创建的一个图片、视频缓冲的效果样式插件
2012/08/28 Javascript
通过上下左右键和回车键切换光标实现代码
2013/03/08 Javascript
window.event.keyCode兼容IE和Firefox实现js代码
2013/05/30 Javascript
JavaScript中双叹号!!作用示例介绍
2014/09/21 Javascript
15个jquery常用方法、小技巧分享
2015/01/13 Javascript
angularJS 中$attrs方法使用指南
2015/02/09 Javascript
jquery预加载图片的方法
2015/05/27 Javascript
AngularJS 实现按需异步加载实例代码
2015/10/18 Javascript
利用Angular.js限制textarea输入的字数
2016/10/20 Javascript
Javascrip实现文字跳动特效
2016/11/27 Javascript
Vue.js对象转换实例
2017/06/07 Javascript
详解基于webpack2.x的vue2.x的多页面站点
2017/08/21 Javascript
jQuery+css last-child实现选择最后一个子元素操作示例
2018/12/10 jQuery
vue基础之使用get、post、jsonp实现交互功能示例
2019/03/12 Javascript
[03:01]2014DOTA2国际邀请赛 DC:我是核弹粉,为Burning和国土祝福
2014/07/13 DOTA
[03:02]生活中的Dendi之野外度假篇
2016/08/09 DOTA
Python基于tkinter模块实现的改名小工具示例
2017/07/27 Python
Python科学计算包numpy用法实例详解
2018/02/08 Python
Python Requests库基本用法示例
2018/08/20 Python
Python3自动签到 定时任务 判断节假日的实例
2018/11/13 Python
安装docker-compose的两种最简方法
2019/07/30 Python
Flask框架学习笔记之表单基础介绍与表单提交方式
2019/08/12 Python
Python爬虫库requests获取响应内容、响应状态码、响应头
2020/01/25 Python
如何理解Python中的变量
2020/06/01 Python
python 检测nginx服务邮件报警的脚本
2020/12/31 Python
科研先进个人典型材料
2014/01/31 职场文书
毕业生如何写自荐信
2014/03/26 职场文书
人事任命书格式
2014/06/05 职场文书
2014年小学班主任工作总结
2014/11/08 职场文书
酒店总经理岗位职责
2015/04/01 职场文书
2015年社区党务工作总结
2015/04/21 职场文书
2015年高二班主任工作总结
2015/05/25 职场文书
python通配符之glob模块的使用详解
2021/04/24 Python
JavaScript严格模式不支持八进制的问题讲解
2021/11/07 Javascript