前端开发性能之算法和流程控制

前端开发小游戏制作
游戏前端和web前端开发
游戏 前端开发

算法和流程控制:
*循环:代码执行时间大部分消耗在循环中。

*循环类型:for do…while while for..in

*循环性能:由于每次迭代操作会同时搜索实例或原型属性,for-in循环的每次迭代会产生更多开销。除了for-in循环外,其他的循环类型性能都差不多,循环类型的选择更应该基于需求而不是性能。

*减少迭代的工作量:限制循环中耗时操作的数量
优化循环的第一步:减少对象成员及数组项的查找次数。局部存储数组长度。for(var i=items.length-1;i–;){//循环体}每个控制条件只是简单与零相比,控制条件与true比较,任何非零的数字会自动转换为true,而零值会等同于false。实际上,控制条件从二次比较变为一次比较,进一步提高循环的速度,运行的速度比原始版本快了50%-60%。

*减少迭代次数:即使是循环体中最快的代码,累计迭代上千次也会变得慢下来。
var iterations=Math.floor(items.length/8),
startAt=items.length%8,
i=0;
do(){
switch(startAt){
case0:process(items[i++]);
case7:process(items[i++]);
case6:process(items[i++]);
case5:process(items[i++]);
case4:process(items[i++]);
case3:process(items[i++]);
case2:process(items[i++]);
case1:process(items[i++]);
}
startAt=0;
}while(–iterations)
使用达夫设备很大程度上依赖于迭代次数,如果循环迭代次数小于1000,只有微不足道的性能提升,如果迭代的次数超过1000,将会有明显的提升。

*基于函数的迭代:
//jquery
jquery.each(items,function(index,value){

})
效率慢。

*条件语句:
if-else还是switch:条件数量越大,越倾向于使用switch,而不是if-else。当条件较少时if-else更易读。事实证明,大多数情况下,switch比if-else运行的快,但只有当条件数量很大才快的明显。
if-else适合判断离散值。
switch更适合每个键都需要对应一个独特的操作和一系列动作的场合。
优化if-else:最简单方法是确保最可能出现的条件放在首位。另一种减少条件判断次数的方法是把if-else组织成为一系列的if-else语句,使用单个庞大的if-else通常会导致运行的缓慢,因为每个条件都要判断。使用二分法把值域分成一系列的区间,然后逐步缩小范围。

*查找表:当有大量离散数值需要测试时,if-else,switch都比使用查找表慢很多。javascript中可以使用数组和普通对象来构造查找表,通过查找表访问数据比用if-else或switch快很多,特别是条件语句数量比较大的时候。
将返回值集合存入数组:var results=[result0,result1,…result10];return results[value];
当你使用查找表时,必须完全抛弃条件判断语句,这个过程变成了数组项查询或对象成员查询,查找表的一个优点是,不用书写任何条件判断语句,即便候选值数量增加时,几乎不会产生额外的性能开销。
当单个键和单个值之间存在逻辑映射的时候,查找表的优势就能体现出来。

*递归:
递归函数的潜在问题是终止条件不明确或缺少终止条件会导致函数长时间运行,并会是用户界面处于假死状态,而且,递归函数还可能遇到浏览器的调用栈大小限制。

调用栈大小限制:当你使用了大量的递归,甚至超过最大调用栈容量,浏览器会报告错误。
递归模式:二种递归模式值得注意,一为函数调用自身,二为隐伏模式即二个函数相互调用,形成一个无线循环。

小结:
1:for while do-while循环性能特性相似,所以没有一种循环类型明显快于或慢于其他类型。
2:避免使用for-in循环,除非你需要遍历一个属性数量未知对象。
3:改善循环性能的最佳方式减少每次迭代的运算量和减少循环迭代次数。
4:通常来说,switch总比if-else快,但是不总是解决方案。
5:在判断条件较好,使用查找表比if-else和switch更快。
6:浏览器的调用栈大小限制递归算法在javascript中的应用,栈溢出错误会导致其他代码中断运行。
7:如果你遇到栈溢出错误,可将方法改为迭代算法,或者使用Memoization来避免计算。

游戏开发前端薪资
开发狼人杀游戏前端
前端开发 游戏
» 本文来自:前端开发者 » 《前端开发性能之算法和流程控制》
» 本文链接地址:https://www.rokub.com/7586.html
» 您也可以订阅本站:https://www.rokub.com
赞(0)
64K

评论 抢沙发

评论前必须登录!