資源描述:
《angularjs進行性能調(diào)優(yōu)的7個建議_angularjs》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫。
1、AngularJS進行性能調(diào)優(yōu)的7個建議AnglarJS作為一款優(yōu)秀的Web框架,可大大簡化前端開發(fā)的負(fù)擔(dān)。近日SebastianFr6sll在一篇博文《AngularJSPerformaneeTuningforLongLists》中表示AnglarJS在處理包含復(fù)雜數(shù)據(jù)結(jié)構(gòu)的大型列表時,其運行速度會非常慢。他在文小同時分享了解決方案。下而為該文的譯文。AnglarJS很棒,但當(dāng)處理包含復(fù)雜數(shù)據(jù)結(jié)構(gòu)的大型列表時,其運行速度就會非常慢。這是我們將核心管理頁面遷移到AngularJS過程中遇到的問題。這
2、些頁面在顯示500行數(shù)據(jù)吋木應(yīng)該工作順暢,但首個方法的渲染吋間竟花費了7秒,太可怕了。后來,我們發(fā)現(xiàn)了在實現(xiàn)過程中存在兩個主要性能問題。一個與“ng-repeat”指令冇關(guān),另一個與過濾器冇關(guān)。一下文將分享我們通過不同的方法解決性能問題的經(jīng)驗,希望可以給你帶來啟力£o一、AngularJS中的ng-repeat在處理人型列表時,速度為什么會變慢?AngularJS中的ng-rcpcat在處理2500個以上的雙向數(shù)據(jù)綁定時速度會變慢。這是由于AngularJS通過“dirtychecking”函數(shù)來檢
3、測變化。每次檢測都會花費時間,所以包含復(fù)雜數(shù)據(jù)結(jié)構(gòu)的大型列表將降低你應(yīng)用的運行速度。二、提高性能的先決條件時間記錄指令為了測量一個列表渲染所花費的時間,我們寫了一個簡單的程序,通過使用“ng-repeat”的屬性“$last”來記錄時間。時間存放在TimeTracker服務(wù)中,這樣時間記錄就與服務(wù)器端的數(shù)據(jù)加載分開了。//Postrepeatdirectiveforloggingtherenderingtimeangular?module('siApp?services5)?directive('p
4、ostRepeatDirective,,f$timcout,,'$log','TimeTracker',function($timeout,$log,TimeTracker){returnfunction(scope,element,attrs){if(scope.$last){$timeout(function(){vartimeFinishedLoadingList二TimeTracker.reviewListLoaded();varref=newDate(timeFinishedLoading
5、List);varend=newDcite();$log.debug(〃##DOMrenderinglisttook:"+(end-ref)+"ms〃);});}};}]);//UseinHTML:???Chrome開發(fā)者工具的時間軸(Timeline)屬性在Chrome開發(fā)者工具的時間軸標(biāo)簽屮,你可以看見事件、每秒內(nèi)瀏覽器幀數(shù)和內(nèi)存分配?!癿emory”工具用來檢測內(nèi)存泄漏,及頁面所需的內(nèi)存。當(dāng)幀速率每秒低于30幀時就會出現(xiàn)頁面閃爍問題?!癴rames”工具可幫助了解渲染性能,還可顯示出一個Jav
6、aScript任務(wù)所花費的CPU吋間。三、通過限制列表的人小進行基本的調(diào)優(yōu)緩解該問題,最好的辦法是限制所顯示列表的大小??赏ㄟ^分頁、添加無限滾動條來實現(xiàn)。分頁分頁,我們可以使用AngularJS的"limitTo”過濾器(AngularJSl.1.4版本以后)和“startFrom”過濾器??梢酝ㄟ^限制顯示列表的大小來減少渲染時間。這是減少淚染時間最高效的方法。//Paginationincontroller$scope.currentPage=0;$scope.pageSize=75;$scope
7、.numberOfPages=function(){returnMath,ceil($scope.displayedltemsList.length/$scope.pageSize);};//Startfromfi1terangular.module('app').fi1ter('startFrom,,function(){rcturnfunction(input,start){returninput.slicc(start);};//UseinHTML//Paginationbuttons{{$i
8、ndex+1}}如果你不能/不想使用分頁,但過濾過程乂很慢,這時一定要檢查前五步,并使用“ng-show”隱藏掉多余的列表元素。無限滾動條如果你希望進一步了解該方法,可訪問http://binarymuse?github?io/nglnfiniteScroll/四、七大調(diào)優(yōu)法則1.渲染沒有數(shù)據(jù)綁定的列表這是最明顯的解決方案,因為數(shù)據(jù)綁定是性能問題最可能的根源。如果你只想顯示一次列表,并不需耍更新、改變數(shù)據(jù),放棄數(shù)據(jù)綁定是絕佳的辦法。不過可惜的是,你會失去對數(shù)據(jù)的控制權(quán)