一直在学习 java,也有看过《犀利开发 Jquery 内核详解与实践》,对这本书的评价只有两个字犀利,可能是对 java 理解的还不够透彻异或是自己太笨,更多的是自己不擅于思考懒得思考以至于里面说的一些精髓都没有太深入的理解。
鉴于想让自己有一个提升,进不了一个更加广阔的天地,总得找一个属于自己的居所好好生存,所以平时会有意无意的去积累一些使用 jQuerry 的常用知识,特别是对于性能要求这一块,总是会想是不是有更好的方式来实现。
避免全局查找
在一个函数中会用到全局对象存储为局部变量来减少全局查找,因为访问局部变量的速度要比访问全局变量的速度更快些
function search(){//当我要使用当前页面地址和主机域名 alert(window.location.href + window.location.host);}//最好的方式是如下这样 先用一个简单变量保存起来function search(){var location = window.location; alert(location.href + location.host);}
定时器
如果针对的是不断运行的代码,不应该使用 setTimeout,而应该是用 setInterval,因为 setTimeout 每一次都会初始化一个定时器,而 setInterval 只会在开始的时候初始化一个定时器
var timeoutTimes =0;function timeout(){ timeoutTimes++;if(timeoutTimes <10){ setTimeout(timeout,10);}}timeout();//可以替换为:var intervalTimes =0;function interval(){ intervalTimes++;if(intervalTimes >=10){ clearInterval(interv);}}var interv = setInterval(interval,10);
字符串链接
如果要连接多个字符串,应该少使用 +=,如
s+=a;
s+=b;
s+=c;
应该写成 s+=a + b + c;
而如果是收集字符串,比如多次对同一个字符串进行 += 操作的话,最好使用一个缓存,使用 Java 数组来收集,最后使用 join 方法连接起来
var buf =[];for(var i =0; i <100; i++){ buf.push(i.toString());}var all = buf.join("");
避免 with 语句
和函数类似 ,with 语句会创建自己的作用域,因此会增加其中执行的代码的作用域链的长度,由于额外的作用域链的查找,在 with 语句中执行的代码肯定会比外面执行的代码要慢,在能不使用 with 语句的时候尽量不要使用 with 语句。
with(a.b.c.d){ property1 =1; property2 =2;}//可以替换为:var obj = a.b.c.d;obj.property1 =1;obj.property2 =2;
数字转换成字符串
般最好用 "" + 1 来将数字转换成字符串,虽然看起来比较丑一点,但事实上这个效率是最高的,性能上来说:
("" +) > String() > .toString() > new String()
浮点数转换成整型
很多人喜欢使用 parseInt(),其实 parseInt() 是用于将字符串转换成数字,而不是浮点数和整型之间的转换,我们应该使用 Math.floor() 或者 Math.round()
各种类型转换
var myVar ="3.14159",str =""+ myVar,// to string i_int =~~myVar,// to integer f_float =1* myVar,// to float b_bool =!!myVar,/* to boolean - any string with length and any number except 0 are true */array =[myVar];// to array
如果定义了 toString() 方法来进行类型转换的话,推荐显式调用 toString(),因为内部的操作在尝试所有可能性之后,会尝试对象的 toString() 方法尝试能否转化为 String,所以直接调用这个方法效率会更高
多个类型声明
在 Java 中所有变量都可以使用单个 var 语句来声明,这样就是组合在一起的语句,以减少整个脚本的执行时间,就如上面代码一样,上面代码格式也挺规范,让人一看就明了。
插入迭代器
如 var name=values[i]; i++; 前面两条语句可以写成 var name=values[i++]
使用直接量
var aTest =newArray();//替换为var aTest =[];var aTest =newObject;//替换为var aTest ={};var reg =newRegExp();//替换为var reg =/../;//如果要创建具有一些特性的一般对象,也可以使用字面量,如下:var oFruit =new O;oFruit.color ="red";oFruit.name ="apple";//前面的代码可用对象字面量来改写成这样:var oFruit ={ color:"red", name:"apple"};
使用DF 优化多次append
一旦需要更新 DOM, 请考虑使用文档碎片来构建 DOM 结构,然后再将其添加到现存的文档中。
for(var i =0; i <1000; i++){
var el = document.('p');
el.innerHTML = i;
document.body.(el);
}
//可以替换为:
var frag = document.createDocumentFragment();
for(var i =0; i <1000; i++){
var el = document.('p');
el.innerHTML = i;
frag.(el);
}
document.body.(frag);
鉴于想让自己有一个提升,进不了一个更加广阔的天地,总得找一个属于自己的居所好好生存,所以平时会有意无意的去积累一些使用 jQuerry 的常用知识,特别是对于性能要求这一块,总是会想是不是有更好的方式来实现。
避免全局查找
在一个函数中会用到全局对象存储为局部变量来减少全局查找,因为访问局部变量的速度要比访问全局变量的速度更快些
function search(){//当我要使用当前页面地址和主机域名 alert(window.location.href + window.location.host);}//最好的方式是如下这样 先用一个简单变量保存起来function search(){var location = window.location; alert(location.href + location.host);}
定时器
如果针对的是不断运行的代码,不应该使用 setTimeout,而应该是用 setInterval,因为 setTimeout 每一次都会初始化一个定时器,而 setInterval 只会在开始的时候初始化一个定时器
var timeoutTimes =0;function timeout(){ timeoutTimes++;if(timeoutTimes <10){ setTimeout(timeout,10);}}timeout();//可以替换为:var intervalTimes =0;function interval(){ intervalTimes++;if(intervalTimes >=10){ clearInterval(interv);}}var interv = setInterval(interval,10);
字符串链接
如果要连接多个字符串,应该少使用 +=,如
s+=a;
s+=b;
s+=c;
应该写成 s+=a + b + c;
而如果是收集字符串,比如多次对同一个字符串进行 += 操作的话,最好使用一个缓存,使用 Java 数组来收集,最后使用 join 方法连接起来
var buf =[];for(var i =0; i <100; i++){ buf.push(i.toString());}var all = buf.join("");
避免 with 语句
和函数类似 ,with 语句会创建自己的作用域,因此会增加其中执行的代码的作用域链的长度,由于额外的作用域链的查找,在 with 语句中执行的代码肯定会比外面执行的代码要慢,在能不使用 with 语句的时候尽量不要使用 with 语句。
with(a.b.c.d){ property1 =1; property2 =2;}//可以替换为:var obj = a.b.c.d;obj.property1 =1;obj.property2 =2;
数字转换成字符串
般最好用 "" + 1 来将数字转换成字符串,虽然看起来比较丑一点,但事实上这个效率是最高的,性能上来说:
("" +) > String() > .toString() > new String()
浮点数转换成整型
很多人喜欢使用 parseInt(),其实 parseInt() 是用于将字符串转换成数字,而不是浮点数和整型之间的转换,我们应该使用 Math.floor() 或者 Math.round()
各种类型转换
var myVar ="3.14159",str =""+ myVar,// to string i_int =~~myVar,// to integer f_float =1* myVar,// to float b_bool =!!myVar,/* to boolean - any string with length and any number except 0 are true */array =[myVar];// to array
如果定义了 toString() 方法来进行类型转换的话,推荐显式调用 toString(),因为内部的操作在尝试所有可能性之后,会尝试对象的 toString() 方法尝试能否转化为 String,所以直接调用这个方法效率会更高
多个类型声明
在 Java 中所有变量都可以使用单个 var 语句来声明,这样就是组合在一起的语句,以减少整个脚本的执行时间,就如上面代码一样,上面代码格式也挺规范,让人一看就明了。
插入迭代器
如 var name=values[i]; i++; 前面两条语句可以写成 var name=values[i++]
使用直接量
var aTest =newArray();//替换为var aTest =[];var aTest =newObject;//替换为var aTest ={};var reg =newRegExp();//替换为var reg =/../;//如果要创建具有一些特性的一般对象,也可以使用字面量,如下:var oFruit =new O;oFruit.color ="red";oFruit.name ="apple";//前面的代码可用对象字面量来改写成这样:var oFruit ={ color:"red", name:"apple"};
使用DF 优化多次append
一旦需要更新 DOM, 请考虑使用文档碎片来构建 DOM 结构,然后再将其添加到现存的文档中。
for(var i =0; i <1000; i++){
var el = document.('p');
el.innerHTML = i;
document.body.(el);
}
//可以替换为:
var frag = document.createDocumentFragment();
for(var i =0; i <1000; i++){
var el = document.('p');
el.innerHTML = i;
frag.(el);
}
document.body.(frag);









