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 load Page,load css,load js实现代码
Mar 31 Javascript
javascript 事件处理、鼠标拖动效果实现方法详解
May 11 Javascript
Struts2的s:radio标签使用及用jquery添加change事件
Apr 08 Javascript
Javascript字符串拼接小技巧(推荐)
Jun 02 Javascript
JS工作中的小贴士之”闭包“与事件委托的”阻止冒泡“
Jun 16 Javascript
基于jQuery插件jqzoom实现的图片放大镜效果示例
Jan 23 Javascript
jQuery插件FusionCharts绘制的2D帕累托图效果示例【附demo源码】
Mar 28 jQuery
微信小程序之发送短信倒计时功能
Aug 30 Javascript
XMLHttpRequest对象_Ajax异步请求重点(推荐)
Sep 28 Javascript
webpack 样式加载的实现原理
Jun 12 Javascript
js序列化和反序列化的使用讲解
Jan 19 Javascript
webpack常用配置总览(小结)
Nov 18 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使用Smarty的相关注意事项及访问变量的几种方式
2011/12/08 PHP
解析如何用php screw加密php源代码
2013/06/20 PHP
PHP接收json 并将接收数据插入数据库的实现代码
2015/12/01 PHP
CodeIgniter自定义控制器MY_Controller用法分析
2016/01/20 PHP
php处理单文件、多文件上传代码分享
2016/08/24 PHP
php自定义函数实现二维数组按指定key排序的方法
2016/09/29 PHP
PHP jpgraph库的配置及生成统计图表:折线图、柱状图、饼状图
2017/05/15 PHP
php注册系统和使用Xajax即时验证用户名是否被占用
2017/08/31 PHP
php在windows环境下获得cpu内存实时使用率(推荐)
2018/02/08 PHP
laravel框架使用极光推送消息操作示例
2020/02/15 PHP
安装PHP扩展时解压官方 tgz 文件后没有configure文件无法进行配置编译的问题
2020/08/26 PHP
JQuery 解析多维的Json数据格式
2009/11/02 Javascript
jQuery中的pushStack实现原理和应用实例
2015/02/03 Javascript
canvas实现钟表效果
2017/02/13 Javascript
微信小程序实现多宫格抽奖活动
2020/04/15 Javascript
Vue.directive()的用法和实例详解
2018/03/04 Javascript
vue实现todolist基本功能以及数据存储功能实例详解
2019/04/11 Javascript
原生JS使用Canvas实现拖拽式绘图功能
2019/06/05 Javascript
nodejs简单抓包工具使用详解
2019/08/23 NodeJs
Nuxt.js实现一个SSR的前端博客的示例代码
2019/09/06 Javascript
vue 在服务器端直接修改请求的接口地址
2020/12/19 Vue.js
[03:38]2014DOTA2西雅图国际邀请赛 VG战队巡礼
2014/07/07 DOTA
[01:00:30]TFT vs VGJ.T Supermajor 败者组 BO3 第一场 6.5
2018/06/06 DOTA
Python判断中文字符串是否相等的实例
2018/07/06 Python
查看python安装路径及pip安装的包列表及路径
2019/04/03 Python
Python基于类路径字符串获取静态属性
2020/03/12 Python
django-利用session机制实现唯一登录的例子
2020/03/16 Python
Pycharm编辑器功能之代码折叠效果的实现代码
2020/10/15 Python
优衣库美国官网:UNIQLO美国
2018/04/14 全球购物
农民入党思想汇报
2014/01/03 职场文书
写给爸爸的道歉信
2014/01/15 职场文书
服装设计师职业生涯规划范文
2014/02/28 职场文书
语文高效课堂实施方案
2014/05/03 职场文书
高中国旗下的演讲稿
2014/08/28 职场文书
Java 中的 Unsafe 魔法类的作用大全
2021/06/26 Java/Android
python实现对doc、txt、xls等文档的读写操作
2022/04/02 Python