javasavacript 递归优化,递归变while
2016-05-01 20:17
267 查看
javascript优化无止境,突发奇想把递归变成while,没想到还真有性能上的提升,只是我不明白其中的原理是什么,如果有那位大神知道,还请指导。 说一下思路:在一般树状数据结构中,插入和删除往往都用到递归,如果在插入数据时,只是改变插入数据时的作用域,我们就把递归省去了,好了,贴代码:
var t = ( //一个节点类,用闭包创建 function(){ function t(id){ var s =this; s.id= id ; s.node =[];//记录子节点 } t.prototype.insert = function(node){//插入函数 var s =this; while(s.node[0] !== undefined)//判断是否有子节点 { s = s.node[0];//改变作用域 } s.node.push(node);//没有子节点,退出循环,添加子节点 return; }; return t } )(); var sta=Date.now(); var b = new t(0);//new一个根节点 for(var i = 0;i<10000;i++)//插入一万个子节点 { var c = new t(i+1); b.insert(c); } console.log(Date.now()-sta);
谷歌浏览器中递归调用时间大约是1080~1334;而改变作用域时间是640~1189;而且改变作用域时间多集中在1000以下;
if(s.node[0] !== undefined)//判断是否有子节点 { s = s.node[0].insert(node);//递归 }
这是递归调用;
相关文章推荐
- JQuery1——基础($对象,选择器,对象转换)
- Android学习笔记(二九):嵌入浏览器
- Android java 与 javascript互访(相互调用)的方法例子
- JavaScript演示排序算法
- javascript实现10进制转为N进制数
- MySQL 优化
- 最后一次说说闭包
- Ajax
- 2019年开发人员应该学习的8个JavaScript框架
- HTML中的script标签研究
- 对一个分号引发的错误研究
- 异步流程控制:7 行代码学会 co 模块
- ES6 走马观花(ECMAScript2015 新特性)
- JavaScript拆分字符串时产生空字符的原因
- Canvas 在高清屏下绘制图片变模糊的解决方法
- Redux系列02:一个炒鸡简单的react+redux例子
- JavaScript 各种遍历方式详解