5 ms·
How I discovered my love for JavaScript after throwing 90% of it in the trash
- satori99 9y ago> The for loop is now completely extinct in my codebase. If you do happen to stumble across one, point it out so I can kill it. For loops in JS are significantly faster than .forEach() or .map() When performance matters (WebAudio, WebGL etc), you can't easily get rid of for loops just yet.
- dvdhnt 9y agoHuh, do you have a source on that statement? I'm not disagreeing with you, I actually don't know, and am always happy to learn useful facts for refactoring and improved performance :)
- satori99 9y agoThere are plenty of online benchmarks that show this. jsperf is down for me atm, so i can't provide a link. Some of the popular JS frameworks actually re-implement an array.forEach function as an internal for-loop to mitigate this. I am not sure of why this is the case, and I am also not sure if the situation has improved or not since I last had to deal with the performance difference. edit: The mozilla page about this has a polyfill for the forEach method, that shows it does more than a simple for loop: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach#Polyfill https://developer.mozilla.org/en-US/docs/Web/JavaScript/Refe...
- dvdhnt 9y agoCool, thanks!
- fenomas 9y agoThis isn't a concern unless you're tuning performance and the loop is a bottleneck. forEach can be slower (if the JS engine doesn't inline the function body), but not to the extent that you need to structure your code around it.
- satori99 9y agoYeah, I agree with that. Which is why I mentioned performance sensitive stuff like WebGL. Personally I use the functional methods whenever I can, but the original quote I re-posted indicates that the author thinks that for-loops should always be replaced with their functional equivalents, and I was just pointing out that this is not universally a good idea yet.
- fenomas 9y agoYeah, I agree - just adding a caveat to your caveat. Personally I found the whole article very skippable. None of it is necessarily terrible advice, but everything is overstated, and said without really explaining why its advice better than the alternatives.
- jazoom 9y agoI use for loops mainly when I want to be able to break;
- empthought 9y agoReplacing ifs with ternaries and switches with cond are hardly significant or important changes. The whole point of abstraction (functional or object-oriented) is to push that logic from control structures in code to composition structures in runtime data. If you weren't replacing conditionals with polymorphism, you weren't doing object-oriented programming in the first place.
- igemnace 9y ago`const` doesn't mean immutable data. It means immutable variables, i.e. you can't reassign to `const` variables. You can mutate the data regardless (push to an array, add a new key to an object), unless the variable points to an immutable value to begin with (primitives, or actual immutable data structures such as with Immutable.js).
- kimi 9y agoSuggestion: throw the remaining 10% away as well and go for ClojureScript. You are ready.
- xkcd-sucks 9y agoIs it really okay to do recursion in JS?