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 相关文章推荐
ExtJS Store的数据访问与更新问题
Apr 28 Javascript
DOM Scripting中的图片切换[兼容Firefox]
Jun 12 Javascript
纯JAVASCRIPT图表动画插件Highcharts Examples
Apr 16 Javascript
Jquery.Form 异步提交表单的简单实例
Mar 03 Javascript
纯jquery实现模仿淘宝购物车结算
Aug 20 Javascript
JS实现新浪博客左侧的Blog管理菜单效果代码
Oct 22 Javascript
使用jQuery给input标签设置默认值
Jun 20 Javascript
AngularJS实现使用路由切换视图的方法
Jan 24 Javascript
jQuery操作之效果详解
May 19 jQuery
Angular4编程之表单响应功能示例
Dec 13 Javascript
Vuejs中的watch实例详解(监听者)
Jan 05 Javascript
ant-design-vue中tree增删改的操作方法
Nov 03 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
一个多文件上传的例子(原创)
2006/10/09 PHP
php 提速工具eAccelerator 配置参数详解
2010/05/16 PHP
php打开文件fopen函数的使用说明
2013/07/05 PHP
测试php函数的方法
2013/11/13 PHP
php截取视频指定帧为图片
2016/05/16 PHP
解决Laravel 使用insert插入数据,字段created_at为0000的问题
2019/10/11 PHP
MacOS下PHP7.1升级到PHP7.4.15的方法
2021/02/22 PHP
js打印纸函数代码(递归)
2010/06/18 Javascript
JQuery里面的几种选择器 查找满足条件的元素$(&quot;#控件ID&quot;)
2011/08/23 Javascript
js动态修改input输入框的type属性(实现方法解析)
2013/11/13 Javascript
JS对字符串编码的几种方式使用指南
2015/05/14 Javascript
百度地图API之本地搜索与范围搜索
2015/07/30 Javascript
跟我学习javascript的执行上下文
2015/11/18 Javascript
jQuery fancybox在ie浏览器下无法显示关闭按钮的解决办法
2016/02/19 Javascript
javascript基本语法
2016/05/31 Javascript
jQuery实现输入框邮箱内容自动补全与上下翻动显示效果【附demo源码下载】
2016/09/20 Javascript
JS动态添加选项案例分析
2016/10/17 Javascript
discuz表情的JS提取方法分析
2017/03/22 Javascript
BootStrap数据表格实例代码
2017/09/13 Javascript
LayerClose弹窗关闭刷新方法
2018/08/17 Javascript
es6数值的扩展方法
2019/03/11 Javascript
详解python的几种标准输出重定向方式
2016/08/15 Python
python批量修改图片大小的方法
2018/07/24 Python
pycharm设置当前工作目录的操作(working directory)
2020/02/14 Python
Python中and和or如何使用
2020/05/28 Python
详解Python遍历列表时删除元素的正确做法
2021/01/07 Python
小程序canvas中文字设置居中锚点
2019/04/16 HTML / CSS
科室工作个人总结的自我评价
2013/10/29 职场文书
植物生产学专业求职信
2014/08/08 职场文书
出纳工作检讨书
2014/10/18 职场文书
初中生300字旷课检讨书
2014/11/19 职场文书
学雷锋广播稿大全
2015/08/19 职场文书
Redis 配置文件重要属性的具体使用
2021/05/20 Redis
Vue.js中v-for指令的用法介绍
2022/03/13 Vue.js
python模拟浏览器 使用selenium进入好友QQ空间并留言
2022/04/12 Python
delete in子查询不走索引问题分析
2022/07/07 MySQL