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 合并内容相同的单元格(示例代码)
Dec 13 Javascript
JavaScript bold方法入门实例(把指定文字显示为粗体)
Oct 17 Javascript
js实现上传图片及时预览
May 07 Javascript
详解Vue 事件驱动和依赖追踪
Apr 22 Javascript
webpack学习--webpack经典7分钟入门教程
Jun 28 Javascript
backbone简介_动力节点Java学院整理
Jul 14 Javascript
Vue项目分环境打包的实现步骤
Apr 02 Javascript
JS实现的判断方法、变量是否存在功能示例
Mar 28 Javascript
Vuejs学习笔记之使用指令v-model完成表单的数据双向绑定
Apr 29 Javascript
vue 集成 vis-network 实现网络拓扑图的方法
Aug 07 Javascript
jQuery实现异步上传一个或多个文件
Aug 17 jQuery
vue实现轮播图帧率播放
Jan 26 Vue.js
微信小程序 登陆流程详细介绍
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
怎么使 Mysql 数据同步
2006/10/09 PHP
PHP笔记之:基于面向对象设计的详解
2013/05/14 PHP
PHP实现图片自动清理的方法
2015/07/08 PHP
PHP基于方差和标准差计算学生成绩的稳定性示例
2017/07/04 PHP
9款2014最热门jQuery实用特效推荐
2014/12/07 Javascript
js与jquery回车提交的方法
2015/02/03 Javascript
js实现跨域的几种方法汇总(图片ping、JSONP和CORS)
2015/10/25 Javascript
jquery实现树形菜单完整代码
2015/12/29 Javascript
jquery广告无缝轮播实例
2017/01/05 Javascript
js按条件生成随机json:randomjson实现方法
2017/04/07 Javascript
防止页面url缓存中ajax中post请求的处理方法
2017/10/10 Javascript
webpack+vue中使用别名路径引用静态图片地址
2017/11/20 Javascript
解决angular2 获取到的数据无法实时更新的问题
2018/08/31 Javascript
mpvue+vant app搭建微信小程序的方法步骤
2019/02/11 Javascript
详解vue-cli项目开发/生产环境代理实现跨域请求
2019/07/23 Javascript
JS中的算法与数据结构之二叉查找树(Binary Sort Tree)实例详解
2019/08/16 Javascript
微信小程序项目总结之记账小程序功能的实现(包括后端)
2019/08/20 Javascript
Node如何后台数据库使用增删改查功能
2019/11/21 Javascript
js实现有趣的倒计时效果
2021/01/19 Javascript
使用Python中的cookielib模拟登录网站
2015/04/09 Python
PYTHON压平嵌套列表的简单实现
2016/06/08 Python
python中正则的使用指南
2016/12/04 Python
解决Pycharm无法import自己安装的第三方module问题
2018/05/18 Python
python 多线程重启方法
2019/02/18 Python
python实现维吉尼亚加密法
2019/03/20 Python
Python3.5基础之NumPy模块的使用图文与实例详解
2019/04/24 Python
HTML5+CSS3实现无插件拖拽上传图片(支持预览与批量)
2017/01/05 HTML / CSS
2014年大学生自我评价
2014/01/19 职场文书
高中家长寄语
2014/04/02 职场文书
2015年新学期寄语
2015/02/26 职场文书
检察院起诉书
2015/05/20 职场文书
2015年机关党委工作总结
2015/05/23 职场文书
工程款催款函
2015/06/24 职场文书
《吃水不忘挖井人》教学反思
2016/02/22 职场文书
2019如何书写演讲稿?
2019/07/01 职场文书
超外差式晶体管收音机的组装与统调
2021/04/22 无线电