《高性能Javascript》读书笔记-4

第四章

算法和流程控制

代码组织结构解决具体问题的思路是影响代码性能的主要因素

循环处理是最常见的编程模式之一,也是提高性能的关注点之一

循环分四种:标准for循环

 for (var i = 0; i < Things.length; i++) {
                Things[i] //循环主题
            }

while循环

   var i =0;
            while(i<10){  //前提条件
                 //循环主题
                 i++;
            }

do-while循环:

 var i =0;
            do{
                 //循环主题
            }while(i++ <10); //后测条件

for-in循环

 for(var pro in object){
              //循环主题
          }

pro变量赋值给object的一个属性名  返回 属性包括的对象实例属性 原型链中继承而来的属性

 

四种循环类型中 只有for-in循环比其他四种明显要慢

 

不要使用for-in来遍历数组的成员

 

 

循环类型的选择应该基于需求而不是性能

 

减少迭代的工作量:

循环优化的第一步:减少对象成员及数组的查找次数

提高这个循环的性能很简单,只查找一次属性,并把值存储到一个局部变量,然后在控制条件中使用这个变量;

var len = len=Things.length   //存储变量 len

  for (var i = 0 ; i < len; i++) {

    //循环主题

  }

 

还可以颠倒数组来提高循环性能

 

//减少属性查找 并反转
		   for (var i =Things.length; i--;) {
		   	Things[i]
		   }

  控制条件与true做比较,非0得数值转true   等于0的数值则为false;

 

减少迭代次数

能获得更加显著的新能提升,最知名的一种模式为:达夫设备;

基本概念:每次循环最多可调用8次process() 循环迭代次数为总数除以8;由于不是所有数字都能被8整除,变量stratAt 用来存放余数;表示第一次循环应调用多少次process   如果是12 则第一次循环 调用4次

 第二次调用8次  用二次循环替代12次循环;

<script type="text/javascript">
          var i = items.length %8;
          while(i)
          {
               process(items[i--]);
          }
          i = math.floor(items.length/8);
          while(i)
          {
               process(items[i--]);
               process(items[i--]);
               process(items[i--]);
               process(items[i--]);
               process(items[i--]);
               process(items[i--]);
               process(items[i--]);
          }
         </script>

例如  在500000此迭代中    运行速度将比常规循环少70%;

 

if-else与 switch

最流行的方法是基于测试条件的数量判断,数量越大 越倾向于 switch 而不是 if-else

 

二分法把值域分成一系列区间,然后逐步减少范围,代码运行的平均时间大约是前面列子的一半,这个方法非常适用于多个值域的需要测试的时候(如果离散值 那么switch更合适)

 

 递归

   function digui(n){
               if (n==0) {
                   return 1;
               }else{
                   return n*digui(n-1);
               }
           }

递归的问题:终止条件不明确 或者缺少终止条件会导致函数长时间运行 并使得界面处于假死状态

合并排序算法是递归函数可以提升性能  也是最常见的递归算法

 

 

 

 

 

 

 
posted @ 2016-10-02 10:55  h5monkey  阅读(199)  评论(0编辑  收藏  举报