Skip to content
This repository was archived by the owner on Apr 12, 2024. It is now read-only.

ng-animation slowly with ng-repeat #12678

Closed
kimx opened this issue Aug 26, 2015 · 9 comments
Closed

ng-animation slowly with ng-repeat #12678

kimx opened this issue Aug 26, 2015 · 9 comments

Comments

@kimx
Copy link

kimx commented Aug 26, 2015

Hello
I have a array that contain 500 items.First time it render by ng-repeat is faster but when it get data from backend server again that render slowly. I try some tip from other site suggestion like used 'track by'.But it cannot be improve.

Finally I used chrome profile tool record to find out .As below photo.The root cause seems by ng-animate.When I remove ng-animate from module the render time from 4300 ms to 100 ms.
ng-animation-slowly

example
slowly ng-repeat

faster ng-repeat

ps: For second plunkr I just remove ng-animate from module

Please help the Issue,thank you very much.

@kimx kimx changed the title ng-animation slowy with ng-repeat ng-animation slowly with ng-repeat Aug 26, 2015
@matsko
Copy link
Contributor

matsko commented Aug 26, 2015

We do have a fix that does speed this up at least twice for 1.4.5

(slowly)
http://plnkr.co/edit/qRl4IAHRPfpBVgiq34Xg?p=preview

(somewhat faster)
http://plnkr.co/edit/ELyqLggWtCaVoGfskvrD?p=preview

Once 1.4.5 is out later this week we can look into speeding up.

@kimx
Copy link
Author

kimx commented Aug 26, 2015

Hi @matsko
I just try your faster sample,but It just speeding up for about 1000ms.That is not far than remove ng-animate from module or used animateProvider.classFilter

@matsko
Copy link
Contributor

matsko commented Aug 26, 2015

Yes exactly. There will be an effort to speed this up post 1.4.5.

@kimx
Copy link
Author

kimx commented Aug 26, 2015

Hi @matsko I am looking forward this coming release.
Thanks a lot.

@Narretz
Copy link
Contributor

Narretz commented Jan 11, 2016

This is unfortunately still slow, even in 1.5. Most of the time is lost in the loop that determines if an element is animatable. For that, it needs to make sure a) the element and its parents have $animate.enabled(true), b) the element is a child of the body and c) the element is a child of the app $rootElement. In an ngRepeat, this is done for each element, which takes a while.
There is a micro optimization that I will put in a PR later, but it's not doing a lot.

What you can do is call $animate.enabled(el, false) on each element in the repeat, which will cut down the render time by a second or so:

http://plnkr.co/edit/SGuXzgU2u1ZFhBr0EZkT?p=preview

@Narretz
Copy link
Contributor

Narretz commented Jan 11, 2016

Sorry, $animate.enabled(e, false) on the repeated element doesn't actually work because of ngRepeat / transclusion.

@Narretz Narretz modified the milestones: 1.4.x, 1.5.x May 27, 2016
@Narretz Narretz modified the milestones: 1.5.x, 1.6.x Mar 31, 2017
@graingert
Copy link
Contributor

@Narretz I'm rendering angular components with jsdom, and calls to $animate seem to be taking the most time.

Is there any way to tell angular that no elements animate?

@Narretz
Copy link
Contributor

Narretz commented Oct 13, 2017

@Narretz Narretz modified the milestones: 1.6.x, 1.7.x Apr 12, 2018
@petebacondarwin
Copy link
Contributor

@Narretz says that #14166 could improve this performance when there are no animations running. But otherwise we are not going to be able to work on this further.

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

No branches or pull requests

5 participants