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 相关文章推荐
获取任意Html元素与body之间的偏移距离 offsetTop、offsetLeft (For:IE5+ FF1 )[
Dec 22 Javascript
JavaScript 学习笔记(十三)Dom创建表格
Jan 21 Javascript
JS trim去空格的最佳实践
Oct 30 Javascript
JS通过ajax动态读取xml文件内容的方法
Mar 24 Javascript
javascript动画算法实例分析
Jul 31 Javascript
javascript获取以及设置光标位置
Feb 16 Javascript
JavaScript实现简单的四则运算计算器完整实例
Apr 28 Javascript
详解升级react-router 4 踩坑指南
Aug 14 Javascript
微信小程序实现联动选择器
Feb 15 Javascript
vue实现计步器功能
Nov 01 Javascript
微信小程序实现多选框全选与反全选及购物车中删除选中的商品功能
Dec 17 Javascript
Vue通过配置WebSocket并实现群聊功能
Dec 31 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
JAVA/JSP学习系列之七
2006/10/09 PHP
IStream与TStream之间的相互转换
2008/08/01 PHP
thinkPHP数据库增删改查操作方法实例详解
2016/12/06 PHP
PHP面向对象之事务脚本模式(详解)
2017/06/07 PHP
php 中self,this的区别和操作方法实例分析
2019/11/04 PHP
js null undefined 空区别说明
2010/06/13 Javascript
PHP 与 js的通信(via ajax,json)
2010/11/16 Javascript
js子页面获取父页面数据示例
2014/05/15 Javascript
jquery获取tagName再进行判断
2014/05/29 Javascript
javascript自定义in_array()函数实现方法
2015/08/03 Javascript
JS实现的tab切换选项卡效果示例
2017/02/28 Javascript
Node接收电子邮件的实例代码
2017/07/21 Javascript
使用async-validator编写Form组件的方法
2018/01/10 Javascript
JS获取并处理php数组的方法实例分析
2018/09/04 Javascript
Electron autoUpdater实现Windows安装包自动更新的方法
2018/12/24 Javascript
[03:14]DOTA2斧王 英雄基础教程
2013/11/26 DOTA
使用Python开发windows GUI程序入门实例
2014/10/23 Python
Python二维码生成库qrcode安装和使用示例
2014/12/16 Python
浅谈python中的面向对象和类的基本语法
2016/06/13 Python
轻松掌握python设计模式之策略模式
2016/11/18 Python
Pycharm设置utf-8自动显示方法
2019/01/17 Python
python操作kafka实践的示例代码
2019/06/19 Python
10行Python代码计算汽车数量的实现方法
2019/10/23 Python
后端开发使用pycharm的技巧(推荐)
2020/03/27 Python
Python OpenCV去除字母后面的杂线操作
2020/07/05 Python
使用分层画布来优化HTML5渲染的教程
2015/05/08 HTML / CSS
N.Peal官网:来自伦敦的高档羊绒品牌
2018/10/29 全球购物
澳大利亚个性化儿童礼品网站:Bright Star Kids
2019/06/14 全球购物
Linux内核的同步机制是什么?主要有哪几种内核锁
2013/01/03 面试题
公务员个人自我评价分享
2013/11/06 职场文书
修理厂厂长岗位职责
2014/01/30 职场文书
《记金华的双龙洞》教学反思
2014/04/19 职场文书
优质服务口号
2014/06/11 职场文书
幼儿园辞职书
2015/02/26 职场文书
2015年暑期社会实践活动总结
2015/03/27 职场文书
python可视化分析绘制带趋势线的散点图和边缘直方图
2022/06/25 Python