フリーランス チャレンジ!!

フリーランス チャレンジ!!

週休4日制に俺はなる!

【AngularJs】applyはdigestよりも遅い? applyのほうが速い場合があるよ!!(訂正:digestの方が速い)

f:id:ksakae1216:20170106215102j:plain

みなさん、コウタロウです!!

 

今日はタイトルについて。

 

 

applyはdigestよりも遅い

 AnuglarJsの双方向バインディングは便利ですよね!

ただ、変数($scope)をを変更しても画面表示が更新されない場合があります

 

今の案件でAngular-Ganttを使ってるんだけど、変数($scope)を変更しても画面表示が更新されない

Webで簡単にガントチャートが作成できるAngular Gantt - フリーランス チャレンジ!!

 

画面表示が更新されない場合、下記のいずれかで画面表示を更新させます

・$timeout

・$watch

・$digest

・$apply

 

基本的には、$timeoutを使えばいいんですが使えない場合は、その他の3つのいずれかを使うんだけど、$watchは多用するとパフォーマンスが悪くなる

 

そうなると、使うのは$digestか$applyになる

 

下記記事によると、$digestは$applyによって呼ばれるとのこと

AngularJSの$watch、$digest、$applyの概要 | VPSサーバーでWebサイト公開 備忘録 ~Linux、MySQLからAJAXまで

3)$digestはどのようにして呼び出される?
 
$scope.$apply()によって呼び出されます。

 

となると、$digestの方が処理が軽いはず!

 

applyの方が速い場合もある

そう信じて、 $digestを使ったんだけどガントチャートの変数を変更して、画面表示まで2秒位かかる?!

 

さすがに遅いと思って$applyに変更したら秒殺で更新された!!

しかももうチョット調べると、$applyには引数を指定でき、そうすると指定した変数のみピンポイントで変更を検知し、画面表示を更新してくれる

 

こんな感じ

$scope.$apply(変数); 

例)$scope.$apply($scope.aaa.bbb);

  

2017/9/9更新

digestも引数指定すれば速い!!

例)$scope.$digest($scope.aaa.bbb);

 

むしろ、「$apply」よりも「$digest」の方が速かった!

っていうことで「$digest」を使って下さい!!

 

 

最後に

AngularJsで困るのは、変数を変更しても画面表示が更新されないことと、パフォーマンスですよね

 

もし、画面表示が更新されない場合は、$apply(変数);$digest(変数);をぜひ試してみて!!