日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

angularjs移除不必要的$watch

發布時間:2025/3/18 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 angularjs移除不必要的$watch 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

? ?在我們的web page,特別是移動設備上,太多的angular $watch將可能導致性能問題。這篇文章將解釋如何去移除額外的$watch提高你的應用程序性能。

? ? $watch如果不再使用,我們最好將其釋放掉,在angular中我們可以自由的選擇在什么時候將$watch$watch列表中移除。

讓我們來看個示例:

app = angular.module('app', []);app.controller('MainCtrl', function($scope) {$scope.updated = 0;$scope.stop = function() {textWatch();};var textWatch = $scope.$watch('text', function(newVal, oldVal) {if (newVal === oldVal) { return; }$scope.updated++;});}); <body ng-controller="MainCtrl"><input type="text" ng-model="text"/> `updated` times updated.<button ng-click="stop()">Stop count</button></body>



$watch函數會返回一個釋放$watch綁定的unbind函數。所以當我們不再需要watch改變的時候,我們可以easy的調用這個函數釋放$watch

由靜態數據構成的頁面

? 讓我假想我們要創建一個會議session預約的頁面,頁面像如下結構:

app.controller('MainCtrl', function($scope) {$scope.sessions = [...];$scope.likeSession = function(session) {// Like the session}}); <ul><li ng-repeat="session in sessions"><div class="info">`session`.`name` - `session`.`room` - `session`.`hour` - `session`.`speaker`</div><div class="likes">`session`.`likes` likes! <button ng-click="likeSession(session)">Like it!</button></div></li></ul>

假想這是一個大型的預約,一天會有30sessions。這里會產生多少個$watch?這里每個session5個綁定,額外的ng-repeat一個.這將會產生151$watch。這有什么問題?每次用戶“like”一個sessionangular將會去檢查name是不是被改變(其他的屬性也相同)

? ?問題在于除了例外的“like”外,所有的數據都是靜態數據,這是不是有點浪費資源?我們能夠100%保證我們的數據不會改變,既然這樣為什么我們讓angular要去檢查是否改變呢?

? 解決方案很簡單。我們移除永遠不會改變的$watch$watch在第一非常重要,它用靜態信息生產更新了我們的DOM結構,但是在此之后,它監聽了一個永遠不會被改變的常量,這明顯是很大的浪費資源。

如果你相信我了的話,會我們能怎么去解決呢?幸運的是,這有個nice guy在我們之前也問了自己這個問題,并創建了一系列的指令實現這個:Bindonce.

Bindonce

? Bindonce是一系列綁定但是不帶watch的指令集,這很完美的符合了我們的需求。

讓我們用Bindonce重新實現我們的view

<ul><li bindonce ng-repeat="session in sessions"><div class="info"><span bo-text="session.name"></span> -<span bo-text="session.room"></span> -<span bo-text="session.hour"></span> -<span bo-text="session.speaker"></span></div><div class="likes">`session`.`likes` likes! <button ng-click="likeSession(session)">Like it!</button></div></li></ul>


為了讓示例能夠工作,我們必須引入bindonce到我們的應用程序。

app = angular.module('app', ['pasvaz.bindonce']);


在這里我們將angular表達式換位了bo-text指令。這指令將會綁定我們的model,知道更新DOM,然后去掉綁定。這樣我就可以顯示view但是移除不必要的餓綁定了。

? 在此例中每個session只有一個$watch綁定,所以這里用31個綁定替代了151個綁定。我們正確的使用bingonce將會為我們的應用程序大量減少$watch綁定。

總結

? 當我們的性能無法避免的需要優化的時候,bindonce能夠幫助脫離$watch的性能瓶頸。在bindonce中還有很多的指令,我可以從這里搜索到:https://github.com/Pasvaz/bindonce#attribute-usage





?本文轉自 破狼 51CTO博客,原文鏈接:http://blog.51cto.com/whitewolfblog/1277368,如需轉載請自行聯系原作者

總結

以上是生活随笔為你收集整理的angularjs移除不必要的$watch的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 亚洲色精品三区二区一区 | 91av片| 日本美女一区 | 亚洲精品免费网站 | 国产成人精品久久久 | 亚洲一区二区三区麻豆 | 成人妇女淫片aaaa视频 | 女同性恋一区二区三区 | 久久蜜臀 | 一区二区三区免费看 | 色丁香久久 | 99精品久久精品一区二区 | 中文在线日韩 | 亚洲精品激情视频 | 女大学生的家政保姆初体验 | 国产91在线播放 | 午夜偷拍福利 | 成人在线观看www | 青青成人在线 | 成人欧美一区二区 | 日韩欧美成人免费视频 | 视频一区二区三区在线 | 日本不卡久久 | 国产香蕉在线视频 | 黄色精彩视频 | 人成网站在线观看 | 超碰97国产精品人人cao | 人人插人人澡 | 91传媒视频在线观看 | 色 综合 欧美 亚洲 国产 | 深爱激情av | 影音先锋制服 | 国产com | 怡红院成人在线 | 中文字幕三级视频 | 日韩视频在线观看视频 | 久久久久久久久久久久久女国产乱 | 国产精品无码在线 | 日本精品在线 | 国产首页| 日日草天天干 | 另类激情综合 | 爱爱的免费视频 | 国产精品二三区 | 色啪综合| 黄色成人免费网站 | 97色爱 | 中文字幕第6页 | 婷婷日| 综合网视频 | 国产精品福利在线观看 | 亚洲成人精品一区 | 中国国语农村大片 | 黄色特级视频 | 国产又粗又猛又色又 | 肉丝美足丝袜一区二区三区四 | 二区影院| 国产一级久久久久毛片精品 | 91素人约啪 | 91九色网站 | 扒开jk护士狂揉免费 | 综合热久久 | 一区二区三区四区在线免费观看 | 国产第七页 | 精品国产精品网麻豆系列 | 成人免费毛片果冻 | 精品视频在线看 | 中文字幕一区二区在线视频 | 关秀媚三级 | 天堂а√在线中文在线鲁大师 | 日本午夜精品理论片a级app发布 | 天天欲色| 在线观看三区 | 天天综合永久入口 | 五月天婷婷在线视频 | 黄在线免费看 | 男人影院在线观看 | 白嫩少妇激情无码 | 欧美黄色大片视频 | 黄网站视频在线观看 | 男女ss视频 | 日本免费三级网站 | 国产精品无码久久久久成人app | 国产精品久久欧美久久一区 | 日韩视频中文字幕 | 国产精品永久免费观看 | 操穴影院| 午夜看毛片 | 午夜色网| 亚洲一区二区三区电影 | 国产精品成人Av | 一级淫片免费看 | 在线观看亚洲国产 | 亚洲射图| 超碰超碰在线 | 一区二区三区四区在线播放 | 久久岛国 | 国产麻豆精品在线观看 | 国产精品伦理一区 |