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遭遇CoffeeScript的时候 使用分享
Sep 17 Javascript
jquery 扑捉回车键事件代码
Apr 24 Javascript
javascript无刷新评论实现方法
May 13 Javascript
js实现类似MSN提示的页面效果代码分享
Aug 24 Javascript
js仿百度登录页实现拖动窗口效果
Mar 11 Javascript
一个例子轻松学会Vue.js
Jan 02 Javascript
ES6中class类用法实例浅析
Apr 06 Javascript
Vue2.0表单校验组件vee-validate的使用详解
May 02 Javascript
JS写谷歌浏览器chrome的外挂实例
Jan 11 Javascript
JavaScript累加、迭代、穷举、递归等常用算法实例小结
May 08 Javascript
ng-zorro-antd 入门初体验
Dec 03 Javascript
jQuery pager.js 插件动态分页功能实例分析
Aug 02 jQuery
微信小程序 登陆流程详细介绍
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读取html并截取字符串的简单代码
2009/11/30 PHP
Trying to clone an uncloneable object of class Imagic的解决方法
2012/01/11 PHP
利用phpexcel把excel导入数据库和数据库导出excel实现
2014/01/09 PHP
Extjs学习笔记之四 工具栏和菜单
2010/01/07 Javascript
JavaScript继承方式实例
2010/10/29 Javascript
jQuery.get、jQuery.getJSON、jQuery.post无法返回JSON问题的解决方法
2011/07/28 Javascript
jQuery $.extend()用法总结
2014/06/15 Javascript
JavaScript动态添加style节点的方法
2015/06/09 Javascript
基于HTML模板和JSON数据的JavaScript交互(移动端)
2016/04/06 Javascript
JavaScript进阶练习及简单实例分析
2016/06/03 Javascript
使用vue.js实现checkbox的全选和多个的删除功能
2017/02/17 Javascript
Vue axios 中提交表单数据(含上传文件)
2017/07/06 Javascript
利用ES6实现单例模式及其应用详解
2017/12/09 Javascript
微信小程序将字符串生成二维码图片的操作方法
2018/07/17 Javascript
微信小程序日历组件使用方法详解
2018/12/29 Javascript
Vue+Express实现登录注销功能的实例代码
2019/05/05 Javascript
nuxt框架中对vuex进行模块化设置的实现方法
2019/09/06 Javascript
js点击事件的执行过程实例分析【冒泡与捕获】
2020/04/11 Javascript
python实现连接mongodb的方法
2015/05/08 Python
使用pyecharts无法import Bar的解决方案
2020/04/23 Python
Python2.7编程中SQLite3基本操作方法示例
2017/08/09 Python
Python内建函数之raw_input()与input()代码解析
2017/10/26 Python
Python文件操作中进行字符串替换的方法(保存到新文件/当前文件)
2019/06/28 Python
使用Python给头像加上圣诞帽或圣诞老人小图标附源码
2019/12/25 Python
用 Python 制作地球仪的方法
2020/04/24 Python
python百行代码自制电脑端网速悬浮窗的实现
2020/05/12 Python
Django ForeignKey与数据库的FOREIGN KEY约束详解
2020/05/20 Python
keras的ImageDataGenerator和flow()的用法说明
2020/07/03 Python
Win10下配置tensorflow-gpu的详细教程(无VS2015/2017)
2020/07/14 Python
Python3+selenium配置常见报错解决方案
2020/08/28 Python
CSS3 Flex 弹性布局实例代码详解
2018/11/01 HTML / CSS
Lookfantastic香港官网:英国知名美妆购物网站
2018/06/19 全球购物
英国HYPE双肩包官网:英国本土时尚潮牌
2018/09/26 全球购物
教师节班会开场白
2015/06/01 职场文书
个人工作决心书
2015/09/22 职场文书
Vue过滤器(filter)实现及应用场景详解
2021/06/15 Vue.js