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 相关文章推荐
jquery下onpropertychange事件的绑定方法
Aug 01 Javascript
javascript中动态加载js文件多种解决办法总结
Nov 15 Javascript
浅析Node.js实现HTTP文件下载
Aug 05 Javascript
js控制按钮,防止频繁点击响应的实例
Feb 15 Javascript
Mongoose经常返回e11000 error的原因分析
Mar 29 Javascript
Vue2.0 vue-source jsonp 跨域请求
Aug 04 Javascript
vue路由拦截及页面跳转的设置方法
May 24 Javascript
Vue 与 Vuex 的第一次接触遇到的坑
Aug 16 Javascript
vue+elementui实现点击table中的单元格触发事件--弹框
Jul 18 Javascript
JavaScript前端开发时数值运算的小技巧
Jul 28 Javascript
vue 解决在微信内置浏览器中调用支付宝支付的情况
Nov 09 Javascript
详细聊聊浏览器是如何看闭包的
Nov 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获取post中的json数据的实现方法
2011/06/08 PHP
dedecms中使用php语句指南
2014/11/13 PHP
php ci 获取表单中多个同名input元素值的代码
2016/03/25 PHP
JavaScript 异步调用框架 (Part 6 - 实例 &amp; 模式)
2009/08/04 Javascript
Javascript 类、命名空间、代码组织代码
2011/07/31 Javascript
input输入框的自动匹配(原生代码)
2013/03/19 Javascript
js实现div的切换特效上一个下一个
2014/02/11 Javascript
jQuery绑定事件不执行但alert后可以正常执行
2014/06/03 Javascript
QQ空间顶部折页撕开效果示例代码
2014/06/15 Javascript
使用jQuery的attr方法来修改onclick值
2014/07/07 Javascript
JavaScript中具名函数的多种调用方式总结
2014/11/08 Javascript
JavaScript设计模式学习之“类式继承”
2015/03/12 Javascript
JavaSacript中charCodeAt()方法的使用详解
2015/06/05 Javascript
javascript中JSON对象与JSON字符串相互转换实例
2015/07/11 Javascript
基于jquery实现智能提示控件intellSeach.js
2016/03/17 Javascript
javascript拖拽应用实例
2016/03/25 Javascript
DWR中各种java方法的调用
2016/05/04 Javascript
利用jquery实现瀑布流3种案例
2016/09/18 Javascript
JS/jQuery判断DOM节点是否存在的简单方法
2016/11/24 Javascript
在vue中使用vue-echarts-v3的实例代码
2018/09/13 Javascript
JS实现网站楼层导航效果代码实例
2020/06/16 Javascript
javascript实现京东快递单号的查询效果
2020/11/30 Javascript
浅谈es6中的元编程
2020/12/01 Javascript
[55:23]VGJ.T vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
Python爬取qq music中的音乐url及批量下载
2017/03/23 Python
配置 Pycharm 默认 Test runner 的图文教程
2018/11/30 Python
Python 音频生成器的实现示例
2019/12/24 Python
洲际酒店集团大中华区:IHG中国
2016/08/17 全球购物
Static Nested Class 和 Inner Class的不同
2013/11/28 面试题
保险经纪人求职信
2014/03/11 职场文书
公共场所禁烟标语
2014/06/25 职场文书
教师党员个人整改措施材料
2014/09/16 职场文书
党员先进性教育整改措施
2014/09/18 职场文书
2014年党的群众路线学习心得体会
2014/11/05 职场文书
优秀教研组申报材料
2014/12/26 职场文书
护理专业自荐信范文
2015/03/06 职场文书