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 相关文章推荐
event.keyCode键码值表 附只能输入特定的字符串代码
May 15 Javascript
JAVASCRIPT style 中visibility和display之间的区别
Jan 22 Javascript
使用按钮控制以何种方式打开新窗口的属性介绍
Dec 17 Javascript
SOSO地图JS画出标注和中心点以html形式运行
Aug 09 Javascript
JS网页播放声音实现代码兼容各种浏览器
Sep 22 Javascript
Jquery选中或取消radio示例
Sep 29 Javascript
通过url查找a元素并点击
Apr 09 Javascript
JS实现跟随鼠标闪烁转动色块的方法
Feb 26 Javascript
jQuery插件expander实现图片翻转特效
May 21 Javascript
详解Javascript继承的实现
Mar 25 Javascript
JavaScript判断用户名和密码不能为空的实现代码
May 16 Javascript
webpack4+react多页面架构的实现
Oct 25 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
DISCUZ 分页代码
2007/01/02 PHP
PHP判断指定时间段的2个方法
2014/03/14 PHP
用PHP代替JS玩转DOM的思路及示例代码
2014/06/15 PHP
yii2使用ajax返回json的实现方法
2016/05/14 PHP
PHP基于单例模式编写PDO类的方法
2016/09/13 PHP
php cookie用户登录的详解及实例代码
2017/01/03 PHP
js资料toString 方法
2007/03/13 Javascript
List Installed Software Features
2007/06/11 Javascript
jquery向.ashx文件post中文乱码问题的解决方法
2011/03/28 Javascript
javascript实现div浮动在网页最顶上并带关闭按钮效果实例
2013/08/13 Javascript
require.js的用法详解
2015/10/20 Javascript
浅谈jQuery中hide和fadeOut的区别 show和fadeIn的区别
2016/08/18 Javascript
JavaScript中数据类型转换总结
2016/12/25 Javascript
vue编译打包本地查看index文件的方法
2018/02/23 Javascript
nodejs实现连接mongodb数据库的方法示例
2018/03/15 NodeJs
JavaScript实现简单的隐藏式侧边栏功能示例
2018/08/31 Javascript
nginx部署多个vue项目的方法示例
2020/09/06 Javascript
python通过openpyxl生成Excel文件的方法
2015/05/12 Python
Python 获取主机ip与hostname的方法
2018/12/17 Python
django与小程序实现登录验证功能的示例代码
2019/02/19 Python
PyTorch实现ResNet50、ResNet101和ResNet152示例
2020/01/14 Python
python实现堆排序的实例讲解
2020/02/21 Python
基于Python实现下载网易音乐代码实例
2020/08/10 Python
详解python对象之间的交互
2020/09/29 Python
python爬虫中url管理器去重操作实例
2020/11/30 Python
Jimmy Choo美国官网:周仰杰鞋子品牌
2018/06/08 全球购物
社团活动策划书范文
2014/01/09 职场文书
公务员转正考察材料
2014/02/07 职场文书
党员公开承诺书范文
2014/03/25 职场文书
写求职信要注意什么问题
2014/04/12 职场文书
合作经营协议书范本
2014/04/17 职场文书
个人务虚会发言材料
2014/10/20 职场文书
2014年药店工作总结
2014/11/20 职场文书
2014年度个人工作总结范文
2015/03/09 职场文书
幼儿园毕业典礼园长致辞
2015/07/29 职场文书
新党员入党决心书
2015/09/22 职场文书