高效率JavaScript编写技巧整理

最近在编写一个JavaScript框架,发现有很多细节注意得不够,担心长时间积累会导致框架实际应用的时候出现严重的效率问题。于是开始关注JavaScript提高效率的一些技巧,在这里分享给大家。

1.JavaScript是唯一一个对代码体积要求越小越好的语言,因此我们可以通过一些工具来精简和压缩JavaScript代码,如JSMin、Packer、YUICompressor等。这些工具会将局部变量的名字替换成很短的变量名,例如将parseFloat()替换成a()。因此我们在编写JavaScript代码时,应将每一个全局变量都映射到一个局部变量,如var parseFloat = parseFloat;

2.通过JSLint来检测你编写的JavaScript,可以发现里面隐藏的很多问题。JSLint是一个JavaScript验证工具(非开源),可以扫描JavaScript源代码来查找问题。如果JSLint发现一 个问题,JSLint就会显示描述这个问题的消息,并指出错误在源代码中的大致位置。

3.我们在写JavaScript的时候经常需要遍历一个数组,代码如下:


代码如下:

for (var i=0;i<array.length;i++){
//do something
}

JavaScript的成员变量是运行时确定的,这就导致每一次循环都需要查找数组length属性,因此我们可以增加一个变量来存储数组大小:


代码如下:

var l = array.length;
for (var i=0;i<l;i++){
//do something
}

这样看起来已经优化得不错了,但实际上我们可以做得更好:


代码如下:

var i=array.length;
while(i--){
//do something
}

这是因为这两行代码转换成汇编时,while语句所需的指令更少,在这里就不展开说明了,大家有兴趣可以去研究下汇编。

4.由于JavaScript中任何人都可以修改或添加Object.prototype中的属性,因此我们在遍历一个对象的属性时,应先使用hasOwnProperty进行判断,避免遍历整个原型链,影响效率。如:


代码如下:

for (var key in obj) {
if (obj.hasOwnProperty(key)) {
//do something
}
}

5.在使用undefined的时候先定义一个局部变量undefined


代码如下:

var checkVal = function(val) {
var undefined;
return val !== undefined;
};

上述代码中,如果没有提前定义局部变量,直接使用全局变量undefined进行判断,如果第三方在别的地方定义了一个全局变量undefined=3将导致结果错误。

6.在将一个非字符串类型的变量转换成字符串类型时,可以直接使用


代码如下:

var str = (i + "").replace(...);

这个地方如果使用String(i)会慢很多。

7.定义数组的时候如果不需要使用数组类的排序等方法,只是进行一般的赋值和访问,应该直接写


代码如下:

var array = {};

而不是


代码如下:

var array = new Array();

否则这就和定义一个数字变量时写var i = new Number(1)一样没有意义

8.使用jQuery时,对同一个对象执行多个函数尽量放在同一行代码里,例如:


代码如下:

$("p.neat").addClass("ohmy").show("slow");

而不是


代码如下:

$("p.neat").addClass("ohmy");
$("p.neat").show("slow");

其余的技巧还有使用DocumentFragment优化多次append,使用firstChild和nextSibling代替childNodes遍历dom元素等。
具体大家可以参考这篇博客:http://www.nowamagic.net/librarys/veda/detail/363
本文还参考了这篇文章:http://www.cnblogs.com/justinw/archive/2009/12/07/1618500.html

(0)

相关推荐

  • 优化javascript的执行效率一些方法总结

    1.在低版本浏览器中(如IE6,IE7等)串联字符串时使用数组的join方法就比使用+号来连接高效很多(如['aaa','bbb','ccc'].join()比'aaa'+'bbb'+'ccc'高效): 2.Array: pop比shift高效,push比unshift高效.这对于设计二叉堆结构比较重要,将最大或者最小的元素放在数组末尾最好. 3.数字取整最好用移位操作: 1.1 >> 0; 4.使用直接量创建Array和Object: var a = []; var o = {}; 5.对象

  • Javascript执行效率全面总结

    Javascript是一门非常灵活的语言,我们可以随心所欲的书写各种风格的代码,不同风格的代码也必然也会导致执行效率的差异,开发过程中零零散散地接触到许多提高代码性能的方法,整理一下平时比较常见并且容易规避的问题 Javascript自身执行效率Javascript中的作用域链.闭包.原型继承.eval等特性,在提供各种神奇功能的同时也带来了各种效率问题,用之不慎就会导致执行效率低下. 1.全局导入我们在编码过程中多多少少会使用到一些全局变量(window,document,自定义全局变量等等)

  • javascript字符串拼接的效率问题

    复制代码 代码如下: function xntest(){ var d1=new Date(); var str=""; for(var i=0;i<10000;i++){ str+="stext"; } var d2=new Date(); document.write(" 字符串拼接方式耗时:"+(d2.getTime()- d1.getTime())+"毫秒:"); d1=new Date(); var sb=ne

  • JavaScript执行效率与性能提升方案

    如何提升JavaScript执行效率与性能在前端开发中位于一个很重要的地方,这节来研究下如何在平时做项目过程中,提升JavaScript性能与运行效率. 循环 循环是很常用的一个控制结构,大部分东西要依靠它来完成,在JavaScript中,我们可以使用for(;;),while(),for(in)三种循环,事实上,这三种循环中for(in)的效率极差,因为他需要查询散列键,只要可以就应该尽量少用.for(;;)和while循环的性能应该说基本(平时使用时)等价. 而事实上,如何使用这两个循环,则

  • JavaScript效率调优经验

    1. 将循环次数的定义放到循环体外:这点好像所有的语言都是一样的,在100个元素以上时效果越来越明显.也就是说将for(var i=0;i<arrData.length;i++)修改为for(var i=0,len=arrData.length;i<len;i++)会很大地提高性能,因为它避免了每循环一次计算一下length的操作.另外,有老外宣称,降序循环速度更快,即for(var i=arrData.length-1;i>=0;i--).本人测试后发现和升序循环相比效率差异不大. 2

  • 有效提高JavaScript执行效率的几点知识

    为了提供新鲜.别致的用户体验,很多网站都会使用 JavaScript 来改善设计.验证表单.检查浏览器,以及Ajax请求,cookie操作等等,实现无刷新动态效果 .但是,要将大量内容在浏览器呈现,如果处理不好,网站性能将会急剧下降.所以我们有必要了解下,如何提高JavaScript的执行效率. JavaScript 函数 在JavaScript 中,函数在使用前会预编译.尽管有些时候下可以使用字符串代替函数,但是每次执行这段JavaScript 代码时都会重新解析,影响性能. 1.eval例子

  • javascript 包裹节点 提高效率

    原理基本是这样,如果传入的是字符串,那么让它们变成一个元素节点,不过这元素节点也可以有许多层,在最内层把要包裹的元素放进.把字符串变成元素节点的方法有如下几个.1,createElement,IE可以连元素属性也一起创建,但只能创建一层.2,innerHTML,不过需要对原来的字符串进行处理,IE与FF都有许多意想不到的默认行为,可以为你多加一点东西或少加一点东西.3,createContextualFragment,由于Opera的行为有点怪异,需要选中修改元素的位置.经日本人的测试,它转换字

  • javascript之更有效率的字符串替换

    首先看看原来是怎么样做的: 复制代码 代码如下: function toTXT(str){      str = str.replace(/\&/g, "& amp;");      str = str.replace(/\>/g, "& gt;");      str = str.replace(/\</g, "& lt;");      str = str.replace(/\"/g, &

  • java使用ArrayList遍历及效率比较实例分析

    本文实例讲述了java使用ArrayList遍历及效率比较.分享给大家供大家参考.具体如下: ArrayList arrL = new ArrayList(); ArrayList arrLTmp1 = new ArrayList(); ArrayList arrLTmp2 = new ArrayList(); ArrayList arrLTmp3 = new ArrayList(); ArrayList arrLTmp4 = new ArrayList(); for (int i=0;i<10

  • 提高javascript效率 一次判断,而不要次次判断

    判断嘛,就是面临2个或以上的选项时进行选择.比如我家门前去公司有一个岔路,只要我第一次知道了哪一条路是对的,那我下一次或以后的每次都不用再思考了,直接走那条路即可--当然,突发天灾时不算. 做出判断是需要时间的,是需要对应条件的.正确的判断很好,但每次面临岔路,哪怕是走了无数次的岔路,都来进行一下判断,无疑是一种脑残行为. 下面来看一个我们平时经常看到的JS函数,他的作用是判断浏览器类型然后设置对应的透明度属性: 复制代码 代码如下: function setAlpha(obj,alpha){

  • 让Java代码更高效

    本文简单介绍一下在写代码过程中用到的一些让JAVA代码更高效的技巧. 1,将一些系统资源放在池中,如数据库连接,线程等.在standalone的应用中,数据库连接池可以使用一些开源的连接池实现,如C3P0,proxool和DBCP等,在运行在容器中的应用这可以使用服务器提供的DataSource.线程池可以使用JDK本身就提供的java.util.concurrent.ExecutorService. import java.util.concurrent.Executors; import j

随机推荐