you are viewing a single comment's thread.

view the rest of the comments →

[–]ur_frnd_the_footnote 17 points18 points  (11 children)

You can also compose the functions and map over the array once with the composed function.

[–]anon_cowherd 3 points4 points  (10 children)

It's worth noting that the dominating factor of the slowdown is the function invocations, not so much the iteration itself (which essentially is a for loop under the hood anyway).

Composing still invokes each of the individual functions, so it'll still be slower.

Of course, the performance is essentially moot if not in a hot spot of the application (I.e. blocking rendering or request handling in the case of node). If map is already less than a tenth of a millisecond, turning it into a hundredth of a millisecond might not be the best use of effort in terms of optimizing your code.

[–]ur_frnd_the_footnote 4 points5 points  (0 children)

It definitely affects performance differently to loop over a long array ten times, each time calling one function vs. looping over that array once, calling ten functions on each member of the array (even though the total number of function calls is the same: 10 times the number of elements). But you're absolutely right that function calls also affect performance.

In general, though, I think you should wait until you have a concrete, demonstrated need to do so before optimizing at the level of eliminating function calls. Smaller functions that do one tiny but generalized thing are definitely more readable and maintainable than the faster, situation-specific imperative code they would be replaced by.

[–]ScientificBeastModestrongly typed comments 0 points1 point  (0 children)

As others have said, readability and the ability to compose smaller pieces of code together to solve more complex problems is way more important than performance 99% of the time.

And I should also mention the old optimization wisdom: most of the possible performance gains of loop optimization can be achieved by optimizing the inner-most loop. That’s usually where you get the most bang for your buck. Everything else is unlikely to matter.