JS MythBusters – An optimization handbook from a high level point of view
mythbusters.js.org
mythbusters.js.org
Instead this site seems to be "regurgitate myths". e.g. http://mythbusters.js.org/workflow/boolean-conditions.html
"Avoid using >= and <= unless necessary. It’s faster to use a simpler comparison." There's a trivial code example, and then absolutely no evidence to support the claim. No benchmarks, nothing.
They also recommend using `let` and `const` over `var` for performance reasons in the "Scope" section, but I have to ask whether they benchmarked that at all. Engines may grow to take advantage of these signals over time for further optimization, but at the moment many ES6 features incur a performance penalty just because the code behind them is less mature. I don't know specifically about `let`/`const` but I'd be pleasantly surprised to learn that they boost performance anywhere yet.
[0] https://dxr.mozilla.org/mozilla-central/source/js/src/jit/Io...
It's just some random opinions about optimizations you most likely don't need. Who cares if something is barely faster? If the slower way is a lot more readable, I'm opting for that.
Disclaimer: MSFT employee, Engineer on Chakra
http://gs.statcounter.com/ certainly suggests that specifically optimizing for Chrome/V8 will benefit the majority of users (58% not including mobile, 50% including mobile). As with all statistics, take with a grain of salt.
Carakan doesn't either. But given that nowadays affects some old TVs (but still newish, I doubt most people replace TVs that often…) and Opera Mini's limited JS support… Yeah, okay, that doesn't matter. :)
This one also seems a bit iffy to me, depending on the stage of compilation, how often this code runs, how much information the engine is able to collect, and the size of your table. The initial unoptimized property lookups will likely be slower than if/else statements, and the engine may end up optimizing them with inline caches, which are essentially a chain of if/else comparisons and jumps between dynamically generated code stubs.
> Try-catch
Yep, SpiderMonkey does optimize this case.
Many of the examples I looked at were very granular and specific, but didn't have much explanation. Does high level point of view really mean brief and without elaboration?
From a high level on JS optimization I would like to see more emphasis on which considerations are most likely to have the biggest impact on my code. Throwing everything in together as if they were all equal seems like it may be missing the point.
Also, when Google or whoever decides to update the engine and compiles things differently, these hacks might become less efficient than just following best practices.
I swear I've heard somewhere that the try/catch limitation is specific to V8, and that other engines don't have that problem. Am I mistaken?
EDIT: Also, this page is very difficult to read. I have a laptop with a great screen and the lack of contrast is annoying.
On SpiderMonkey, deleting a property that isn't the last one that was defined may incur a "dictionary mode" conversion [0]. This means the information describing each object property, which is usually immutable and shared between similar objects, will be copied one-by-one into a unique chain owned by the particular object instance. This can only happen once per object instance, however, and subsequent usages of `delete` on its properties will be less expensive -- but still more expensive than simply setting property values to `null`. I believe something similar happens with V8's "hidden classes" mechanism.
[0] https://dxr.mozilla.org/mozilla-central/source/js/src/vm/Sha...
If the entire site were rewritten using this level of detail plus benchmarks, it would be 10x more useful.
> Avoid using >= and <= unless necessary
Is this an elaborate troll?