angularjs ocLazyLoad分步加載js文件實(shí)例
用angular有一段時(shí)間了,平日里只顧著寫代碼,沒有注意到性能優(yōu)化的問題,而今有時(shí)間,于是捋了捋,講學(xué)習(xí)過程記錄于此:
問題描述:由于采用angular做了網(wǎng)頁的單頁面應(yīng)用,需要一次性在主布局中將所有模塊需要引用到的js都引入.對(duì)于比較小的項(xiàng)目,這是可行的,但是對(duì)于大的項(xiàng)目,一旦js文件較多,在頁面首次加載時(shí)就引入所有js文件,無疑會(huì)延緩頁面加載的速度,造成不良額用戶體驗(yàn).那么分布加載(按需加載)就顯得很有必要了.
<!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)">三級(jí)頁面</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')
}
});
頁面初始效果如下圖,打開瀏覽器控制臺(tái),可以看到child.js以及third.js在頁面載入時(shí)并沒有加載:
頁面初始化:


當(dāng)點(diǎn)擊子頁面和三級(jí)頁面時(shí),會(huì)依次加載所依賴的js文件.實(shí)現(xiàn)分步加載.
點(diǎn)擊子頁面:


三級(jí)頁面:


填坑:網(wǎng)上關(guān)于angular按需加載的文章也蠻多的,也有人使用的是requireJS來進(jìn)行這個(gè)操作,而且ocLazyLoad的使用方法也有很多.之前按照一些文檔的方法,在配置路由時(shí),加了下面的藍(lán)色代碼,頁面是能跳轉(zhuǎn),但是homepage.html的js代碼卻執(zhí)行了兩次,難道是控制器加載了兩次么.對(duì)于這個(gè)坑,我還在探索中,也希望大家能夠發(fā)表意見或者建議.
$stateProvider.state('home',{
url:"/home",
controller:'homeController',
templateUrl: 'homepage.html',
resolve:{
loadMyCtrl:['$ocLazyLoad',function ($ocLazyLoad) {
return $ocLazyLoad.load({
name:"homeApp",
files:["homepage.js"]
})
}]
}
});
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- 詳解AngularJS通過ocLazyLoad實(shí)現(xiàn)動(dòng)態(tài)(懶)加載模塊和依賴
- AngularJS中的按需加載ocLazyLoad示例
- JS實(shí)現(xiàn)圖片延遲加載并淡入淡出效果的簡單方法
- Webpack 實(shí)現(xiàn) AngularJS 的延遲加載
- AngularJS中的Directive實(shí)現(xiàn)延遲加載
- javascript實(shí)現(xiàn)圖片延遲加載方法匯總(三種方法)
- js實(shí)現(xiàn)延遲加載的方法
- 關(guān)于延遲加載JavaScript
- 淺析js預(yù)加載/延遲加載
- AngularJS使用ocLazyLoad實(shí)現(xiàn)js延遲加載
相關(guān)文章
Angular通過指令動(dòng)態(tài)添加組件問題
這篇文章主要介紹了Angular通過指令動(dòng)態(tài)添加組件問題,文中通過寫一個(gè)小組件來簡單總結(jié)下,需要的朋友可以參考下2018-07-07
Angular2 父子組件數(shù)據(jù)通信實(shí)例
這篇文章主要介紹了Angular2 父子組件數(shù)據(jù)通信實(shí)例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-06-06
angular 動(dòng)態(tài)組件類型詳解(四種組件類型)
這篇文章給大家講解四種組件類型,非常不錯(cuò),具有參考借鑒價(jià)值,對(duì)angular 動(dòng)態(tài)組件類型感興趣的朋友參考下吧2017-02-02
詳解@angular/cli 改變默認(rèn)啟動(dòng)端口兩種方式
這篇文章主要介紹了詳解@angular/cli 改變默認(rèn)啟動(dòng)端口兩種方式,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-11-11
Angular實(shí)現(xiàn)點(diǎn)擊按鈕控制隱藏和顯示功能示例
這篇文章主要介紹了Angular實(shí)現(xiàn)點(diǎn)擊按鈕控制隱藏和顯示功能,結(jié)合實(shí)例形式分析了AngularJS簡單控制頁面元素顯示與隱藏的相關(guān)操作技巧,需要的朋友可以參考下2017-12-12

