资源描述:
《javascript性能优化的小知识总结》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、JavaScript性能优化的小知识总结前言一直在学习javascript,也有看过《犀利开发Jquery内核详解与实践》,对这本书的评价只有两个字犀利,可能是又寸javascript理解的还不够透彻异或是自己太笨,更多的是自己不擅于思考懒得思考以至于里面说的一些精髓都没有太深入的理解。鉴于想让自己有一个提升,进不了一个更加广阔的天地,总得找一个属于自己的居所好好生存,所以平时会有意无意的去积累一些使用jQuerry的常用知识,特别是对于性能要求这一块,总是会想是不是有更好的方式来实现。下面是我总结的一些小技巧,仅
2、供参考。(我先会说一个总标题,然后用_小段话来说明这个意思再最后用一个demo来简单言明)避免全局查找在一个函数中会用到全局对象存储为局部变量来减少全局查找,因为访问局部变量的速度要比访问全局变量的速度更快些1functionscarch(){2〃当我要使用当前页面地址和主机域名3alert(window」ocation.href+window」ocation.host);4)5〃最好的方式是如下这样先用一个简单变量保存起来6functionscarch(){7varlocation=window」ocation;
3、8alert(location.href+location.host);9I定时器如果针对的是不断运行的代码,不应该使用setTimeout,而应该是用setinterval,因为setTimeout每一次都会初始化一个定时器,而setinterval只会在开始的时候初始化一个定时器1vartimcoutTimcs=0;2functiontimeout(){3timeoutTimes++;4if(limeoulTimes<10){5setTimeout(timeout,10);617}8timeout();9//可
4、以替换为:1()varintervalTimes=0;11functionintcrval(){12intervalTimes++;13if(intervalTimes>=10){14clearlnterval(inlerv);15)16117varinterv=setlnterval(intervah10);字符串连接如果要连接多个字符串,应该少使用+二,如s+=a;s+=b;s+=c;应该写成S+二a+b+c;而如果是收集字符串,比如多次对同一个字符串进行+二操作的话,最好使用一个缓存,使用JavaScript
5、数组来收集,最后使用join方法连接起来_d_lJ1varbuf=[];2for(vari=0;i<100;i++){1buf.push(i.toStringO);2}3varall=buf.join(,,H);避免with语句和函数类似,with语句会创建自己的作用域,因此会增加其中执行的代码的作用域链的长度,由于额外的作用域链的查找,在with语句中执行的代码肯定会比夕湎执行的代码要慢,在能不使用With语句的时候尽量不要使用with语句。dIJ1with(a.b.c.d){2property1=1;3prop
6、erty2=2;4}5〃可以替换为:6varobj=a.b.c.d;7obj.property1=1;8obj.propeily2=2;数字转换成字符串般最好用””+1来将数字转换成字符串,虽然看起来比较丑一点,但事实上这个效率是最高的,性能上来说:(""+)>StringO>.toStringO>newStringO浮点数转换成整型很多人喜欢使用parselntQz其实parselntQ是用于将字符串转换成数字,而不是浮点数和整型之间的转换,我们应该使用Math.floor()或者Math.round()各种类型
7、转换d1J1varmyVar=H3J4159M,2str=,,M+myVar,//tostring3i_int=—myVar,//tointeger4f_float=1*myVar,//tofloat5b_bool=!!myVar,/*toboolean-anystringwithlength6andanynumberexcept0aretrue*/7array=[myVarJ;//toarray如果走义了toSt「ing()方法来进行类型转换的话,推荐显式调用toStringO,因为内部的操作在尝试所有可能性之后
8、,会尝试对象的toStringO方法尝试能否转化为String,所以直接调用这个方法效率会更高多个类型声明在JavaScript中所有变量都可以使用单个var语句来声明,这样就是组合在一起的语句,以减少整个脚本的执行时间,就如上面代码一样,上面代码格式也挺规范,让人一看就明了。插入迭代器如varname=values[i];i++;前面两条语句可以写成va「