Hi Raven,

Technically, you are right, and the second solution is a tad faster. I 
highly doubt you can even measure the difference, though. At least not with 
at least as a few 1000's of calls on it. Let me explain a little bit, 
change detection has changed a lot from AngularJS to Angular. While in the 
past, there was a digest cycle, and functions like tat would have been 
called up many times, that is not the case anymore.

In Angular, there is no cycle, everything is evaluated just 1 time. So if 
you have ~200 elements, this just adds 200 function calls. That will not 
take that much time, a simple function call usually stays under 1 
nanosecond.
Take this code, and paste it in your console!
(function (){
    "use strict";

    class test {
        constructor() {
            this.canSave = true;
            this.isUnchanged = false;
            this.isSpecial = () => new Date(); // note I return something 
that will change on every iteration!
            // I do this so the benchmark won't be optimized by the 
compiler to a noop.            
        }
        setClasses() {
          let classes =  {
            saveable: this.canSave,      // true
            modified: !this.isUnchanged, // false
            special: this.isSpecial,     // true
          };
          return classes;
        }
    }

    let myvar = new test();
    let someArray = [];
    let t0 = performance.now()
    let iterations = 200000;
    for (let x=0; x<iterations; x++) {
       let result = myvar.setClasses().special()
       if (result < Math.random()*t0) {
           //again doing something to prevent this from being optimized to 
a NOOP
           someArray.push(result)
       }
    }
    let t1 = performance.now()
    console.log(`Each Call to setClasses took ${ 
Math.ceil(((t1-t0)*10000)/iterations)/10} NANOseconds. `);
}());


On my system, this results into ~1.5 Nanosecond. (and this is doing quite 
some more work, in this case solely to prevent the JS optimizer from making 
the loop a no-op. (yes the JS compiler is smart enough to not loop x times 
if you are just repeating yourself)
if I change the isSpecial to something that returns a 'static' value, it 
goes well below 0.2 Nano (note that I'm rounding UP)

Moral of the story, don't do premature optimizations. It probably won't do 
you any good. In Angular, you don't need to worry as much about this as in 
angularjs 1.x.
Also, measuring beats assumptions.

With kind regards
Sander


-- 
You received this message because you are subscribed to the Google Groups 
"Angular" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to angular+unsubscr...@googlegroups.com.
To post to this group, send email to angular@googlegroups.com.
Visit this group at https://groups.google.com/group/angular.
For more options, visit https://groups.google.com/d/optout.

Reply via email to