高性能javascript--算法和流程控制

- for,while和do-while性能相当

- 避免使用for-in循环,==除非遍历一个属性量未知的对象==

es5:for-in 遍历的对象便不局限于数组,还可以遍历对象。

原因:for-in每次迭代操作会同时搜索实例或者原型属性, for-in 循环的每次迭代都会产生更多开销,因此要比其他循环类型慢,一般速度为其他类型循环的 1/7。因此,除非明确需要迭代一个属性数量未知的对象,否则应避免使用 for-in 循环。如果需要遍历一个数量有限的已知属性列表,使用其他循环会更快

-  foreach没有for性能好

不能中断循环(使用break或者return)

在 for 循环中可以使用 continue,break 来控制循环和跳出循环,这个是 forEach 所不具备的。【在这种情况下,从性能的角度考虑,for 是要比 forEach 有优势的。(一个长度为100的数据,你for循环到35的时候,实现了功能,达到了目的的话,这个时候可以 break 跳出循环的;使用 forEach 的话,是不能退出循环本身的。)】

- for-of

es6里引入了一种新的循环方法,它就是for-of循环,它既比传统的for循环简洁,同时弥补了forEach和for-in循环的短板。

- switch 与if else 效率比较

使用if-else 或者switch 是基于测试条件的数量:条件数量较大,倾向于使用switch 而不是if-else。这通常归结到代码的易读性,如果条件较少时,if-else 容易阅读,而条件较多时switch更容易阅读。

优化if-else 的目标总是最小化找到正确分支之前所判断条件体的数量。最简单的优化方法是将最常见的条件体放在首位。

- 判断条件多时,使用查找算法,eg,二分查找,优于switch 与if else

- memoization (常用于递归)

一种优化技术,主要用于通过存储昂贵的函数调用的结果来加速计算机程序,并在再次发生相同的输入时返回缓存的结果。

Memoization是JavaScript中的一种技术,通过缓存结果并在下一个操作中重新使用缓存来加速查找费时的操作。

在这里,memoization通常会缩短执行时间并影响我们应用程序的性能。当我们知道一组输入将产生某个输出时,memoization最有效。

遵循最佳实践,应该在纯函数上实现memoization。纯函数输入什么就返回什么,不存在副作用。

记住这个是==以空间换速度==,所以最好确定你是否值得那么做,有些场景很有必要使用。

==在处理递归函数时,Memoization最有效,递归函数用于执行诸如GUI渲染,Sprite和动画物理等繁重操作。==

你可能感兴趣的:(高性能javascript--算法和流程控制)