Why for..of+push() may be faster than Array.from(foo) and [...foo]?

Viewed 211

I often use Array.from() or [...foo] to obtain an array from iterable objects. I also can iterate it and push to an array manually instead, but I'd prefer native one because it's much simple and I thought native implementation will be more efficient.

However, I found some benchmark result which shows those native way are slower.

https://jsperf.com/set-iterator-vs-foreach/4

I've also run tests with fewer (50) and more (10k) elements on Chrome and Firefox, but ends up a similar result.

https://jsfiddle.net/unarist/k0cu8wta/2/

I can understand [...foo] is faster than Array.from() because Array.from() have to handle array-like objects and the mapFn parameter, but I couldn't find a plausible reason about between [...foo] and for..of+push() way.

What makes for..of+push() faster than Array.from() and [...foo]?

Update: My concern is not how fast nor which should I use. I was surprised about native version is slower than JS version and I wanted to know why, because I thought "generally, native one is fast".

(e.g. native one does more work than loop+push way, special optimization for something, etc.)

I've tested on Chrome 60 and Firefox 54 on Windows 10 x64.

0 Answers
Related