在我們的
web page
,特別是移動裝置上,太多的
angular $watch
將可能導致效能問題。這篇文章將解釋如何去移除額外的
$watch
提高你的應用程式效能。
$watch
如果不再使用,我們最好將其釋放掉,在
angular
中我們可以自由的選擇在什麼時候將
$watch
從$watch
列表中移除。
讓我們來看個示例:
($scope) ;
var textwatch = $scope.$watch('text', function
(newval, oldval) $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
預約的頁面,頁面像如下結構:
($scope) });
<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>
假想這是乙個大型的預約,一天會有30個
sessions
。這裡會產生多少個
$watch
?這裡每個
session有5
個繫結,額外的
ng-repeat乙個.
這將會產生
151個
$watch
。這有什麼問題?每次使用者「
like」
乙個session
,angular
將會去檢查
name
是不是被改變
(其他的屬性也相同)。
問題在於除了例外的「
like」
外,所有的資料都是靜態資料,這是不是有點浪費資源?我們能夠
100%
保證我們的資料不會改變,既然這樣為什麼我們讓
angular
要去檢查是否改變呢?
解決方案很簡單。我們移除永遠不會改變的
$watch
。$watch
在第一非常重要,它用靜態資訊生產更新了我們的
dom結構,但是在此之後,它監聽了乙個永遠不會被改變的常量,這明顯是很大的浪費資源。
如果你相信我了的話,會我們能怎麼去解決呢?幸運的是,這有個
nice guy
在我們之前也問了自己這個問題,並建立了一系列的指令實現這個:
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
到我們的應用程式。
在這裡我們將
angular
表示式換位了
bo-text
指令。這指令將會繫結我們的
model
,知道更新
dom,然後去掉繫結。這樣我就可以顯示
view
但是移除不必要的餓繫結了。
在此例中每個
session
只有乙個
$watch
繫結,所以這裡用
31個繫結替代了
151個繫結。我們正確的使用
bingonce
將會為我們的應用程式大量減少
$watch
繫結。
當我們的效能無法避免的需要優化的時候,
bindonce
能夠幫助脫離
$watch
的效能瓶頸。在
bindonce
中還有很多的指令,我可以從這裡搜尋到:
wordpress移除不必要的資訊
1.移除不必要的頭部資訊 移除不必要head資訊 remove action wp head wp generator 去除版本資訊 remove action wp head wlwmanifest link remove action wp head rsd link 清除離線編輯器介面 rem...
linux安全 移除不必要的服務
鳥哥的 一 關閉服務 關閉的方法有很多,通常我是使用 usr sbin setup 來關閉的,只是用這樣的方式來關閉的話,需要重新啟動 linux 比較麻煩一些些,如果您是使用我們這個網頁的 redhat6.1 系統的話,那就執行 usr sbin setup 吧!然後選擇 system servi...
避免不必要的float
float中文翻譯為浮動,很形象的翻譯,在css很常用,當你需要吧兩個塊級元素定排放在同一高度上經常會用到float,先看一下float的 屬性。先看一下float可能的值 float left 元素向左浮動 float right 元素向右浮動 float none 不浮動 float inher...