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初学者应注意的七个细节详细介绍
Dec 27 Javascript
jquery实现input输入框实时输入触发事件代码
Jan 28 Javascript
JSP中使用JavaScript动态插入删除输入框实现代码
Jun 13 Javascript
javascript将url中的参数加密解密代码
Nov 17 Javascript
jQuery中:focus选择器用法实例
Dec 30 Javascript
JS+CSS实现可拖动的弹出提示框
Feb 16 Javascript
jquery实现表单验证简单实例演示
Nov 23 Javascript
将angular-ui的分页组件封装成指令的方法详解
May 10 Javascript
jquery.masonry瀑布流效果
May 25 jQuery
vue二级路由设置方法
Feb 09 Javascript
4 种滚动吸顶实现方式的比较
Apr 09 Javascript
angular 实现同步验证器跨字段验证的方法
Apr 11 Javascript
微信小程序 登陆流程详细介绍
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中使用接口实现工厂设计模式的代码
2012/06/17 PHP
PHP的fsockopen、pfsockopen函数被主机商禁用的解决办法
2014/07/08 PHP
php正则匹配文章中的远程图片地址并下载图片至本地
2015/09/29 PHP
PHP常见数组函数用法小结
2016/03/21 PHP
PHP编程获取图片的主色调的方法【基于Imagick扩展】
2017/08/02 PHP
javascript入门·图片对象(无刷新变换图片)\滚动图像
2007/10/01 Javascript
JavaScript 在各个浏览器中执行的耐性
2009/04/06 Javascript
文本框输入时 实现自动提示(像百度、google一样)
2012/04/05 Javascript
原生javascript实现隔行换色
2015/01/04 Javascript
Js数组排序函数sort()介绍
2015/06/08 Javascript
简单实现js选项卡切换效果
2017/02/09 Javascript
微信小程序实现点击按钮修改字体颜色功能【附demo源码下载】
2017/12/05 Javascript
js实时监控文本框输入字数的实例代码
2018/01/18 Javascript
原生JS实现的双色球功能示例
2018/02/02 Javascript
vue router动态路由下让每个子路由都是独立组件的解决方案
2018/04/24 Javascript
Vue中的作用域CSS和CSS模块的区别
2018/10/09 Javascript
详解js加减乘除精确计算
2019/03/19 Javascript
微信小程序语音同步智能识别的实现案例代码解析
2020/05/29 Javascript
Vue使用v-viewer实现图片预览
2020/10/21 Javascript
[01:10:16]DOTA2上海特级锦标赛B组资格赛#2 Fnatic VS Spirit第一局
2016/02/27 DOTA
学习python 之编写简单乘法运算题
2016/02/27 Python
解决python3 urllib中urlopen报错的问题
2017/03/25 Python
python 高效去重复 支持GB级别大文件的示例代码
2018/11/08 Python
python启动应用程序和终止应用程序的方法
2019/06/28 Python
通过实例学习Python Excel操作
2020/01/06 Python
解决Jupyter Notebook使用parser.parse_args出现错误问题
2020/04/20 Python
Python用来做Web开发的优势有哪些
2020/08/05 Python
贝玲妃英国官网:Benefit英国
2018/02/03 全球购物
在阿联酋购买翻新手机和平板电脑:Teckzu
2021/02/12 全球购物
托管代码(Managed Code)和非托管代码(Unmanaged Code)有什么区别
2014/09/29 面试题
财务检查整改报告
2014/11/06 职场文书
教导主任个人总结
2015/03/03 职场文书
Nginx反向代理及负载均衡如何实现(基于linux)
2021/03/31 Servers
C站最全Python标准库总结,你想要的都在这里
2021/07/03 Python
redis击穿 雪崩 穿透超详细解决方案梳理
2022/03/17 Redis
Docker 镜像介绍以及commit相关操作
2022/04/13 Servers