《小代码大世界》随机抽奖方法和关键词搜索请求优化
2017-08-04 21:12
225 查看
前言
技术经理(以下简称“大欢哥”,因为大欢哥人高马大的)一日出差回来,在楼下休息听到 “今日头条” 的前端网面(头条就在我们公司隔壁。公司楼下有休息区,可以坐那喝咖啡)。两个javaScript题目。
今天早上来上班,包还没放下,就一脸神秘的对我说 “ 我这听到 头条的前端面试题,等我吃完饭回来给你说,考考你,嘿嘿 ”,我的小心肝一下就紧张了。“头条”、“面试题”...貌似人生巅峰来了!!!做出来就有白富美啦!!!
终于吃完饭回来了,出题了.....
正文
回归技术!!!回归正文!!!
题目一:输入框实现输入文字,后台请求获取数据,用户输入后JS可以性能丢丢,减少请求次数!
具体表现:用户连续输入“abc”,查询 “abc”,而不是查询“a”,“ab”,“abc”。。。
关键点:用户输入 间隔时间 满足要求则请求
实现代码:(欢迎指正)
<input type="text" name="" id="search_text"> <script type="text/javascript"> var lastValue,//上一次输入值 inputIng;//定时器保存 document.getElementById('search_text').oninput=function(){ //监听input值变化 var input=false,//是否在输入状态 that=this; window.clearTimeout(inputIng); inputIng=setTimeout(function(){ if(!input){ if(lastValue==that.value){ return; } console.log(that.value); lastValue=that.value; input=true; } },800);//时间调整确定用户输入间隔 实践之后800ms最合适 } </script>
题目二:实现一个Function,要求入参为array,返回一个方法,调用方法返回数组中的一个值,值不重复,数组所有值返回完毕,重新返回!
关键点:数组在内存中的存储
实现代码:(此处贴我实现的代码,与要求有差距)。
//我写的(大错误改正了,还有一个隐藏错误) function ran(arr){ this.arr=arr.join(',').split(',');//当前操作数组 this.oldArr=arr.join(',').split(',');//备份数组 this.randomNum=function(){//定义方法操作数组返回值 if(this.arr.length==0)this.arr=this.oldArr.jion(',').split(',');//如果当前操作数组值没有了,就从备份数组中备份 var index=Math.round(Math.random()*this.arr.length-1);//获取数组中随机下标四舍五入取整数 (此写法有错,自己思考改正) return this.arr.splice(index,1).toString();//返回下标对应的值 }; } var arr=[0,1,2,3,4,5]; var a = new ran(arr); console.log(a.randomNum()); //大欢哥写的 参考思路实现,不是大欢哥原代码 function Ran(arr){ var newArr = arr.slice(); var TemArr = arr.slice(); return function(){ if(newArr.length==0){ newArr=TemArr.slice(); } var index = Math.floor(Math.random()*newArr.length); var keyVale = newArr[index]; newArr.splice(index,1); return keyVale; }; } var fun = Ran(arr); console.log(fun());
最后测试结果是:功能都实现(忽略我的隐藏bug),大欢哥写的性能在我的150%以上!
测试代码得出:1、' '+Num 转字符串的方式比 Num.toString() 性能高
2、由上衍生出,以下方式一和和方式二对比,谁随机的数比较公平(下一个随笔会详细论证)
var ran1 = Math.floor(Math.random()*a.length);//方式一 var ran2 = Math.round(Math.random()*(a.length-1));//方式二
3、尽量精简API的调用
结束总结
程序员的世界你不懂!为了讨论问题可以不吃饭、可以不回家、可以一个问题诞生很多问题。。。。。
相关文章推荐
- 超参数调优方法:网格搜索、随机搜索、贝叶斯优化算法
- ASP.NET中常用的26个优化性能方法---使请求管线内的所有模块尽可能高效
- 如何寻找关键词和优化关键词的方法
- Adam:一种随机优化方法
- dedecms模板中调用热门搜索关键词的方法
- mysql优化取随机数据慢的方法
- 百度关键词搜索量优化--搜索引擎关键词优化推广问题
- Python使用scrapy采集数据时为每个请求随机分配user-agent的方法
- 如何寻找关键词和优化关键词的方法
- 让ECSHOP首页热门搜索关键词实现随机显示
- Adam:一种随机优化方法
- 优化IIS7.5支持10万个同时请求的配置方法_win服务器
- phpcms v9添加热门搜索关键词的方法
- 批量删除织梦dedecms文档搜索关键词的方法
- 找到多个与名为“HOME”的控制器匹配的类型。如果为此请求(“{CONTROLLER}/{ACTION}/{ID}”)提供服务的路由在搜索匹配此请求的控制器时没有指定命名空间,则会发生此情况。如果是这样,请通过调用含有“NAMESPACES”参数的“MAPROUTE”方法的重载来注册此路由。
- 关键词选择和优化的方法
- 优化关键词的十五个方法
- 搜索与优化1搜索方法总结
- wordpress加速优化教程:关闭wordpress站内搜索功能以及对外请求
- 百度公布图文搜索结果优化方法预示着图文时代已经到来