JavaScript代码的编写细节

本文介绍了一系列提高前端性能的方法,包括事件委托、DOM操作优化、减少全局变量引用等实用技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


1. 给父节点绑定事件,而不是每一个子节点。delegate 方法;
2. 对要进行操作元素隐藏,构造好DOM结构,加入在show处理。
3. 减少直接对dom节点的多次操作。document.createDocumentFragment
4. 减少全局变量的重复引用:
function createChildFor(elementId){
var doc = document, //store in a local variable
element = doc.getElementById(elementId),
newElement = doc.createElement("div");
element.appendChild(newElement);
}

//用一个临时变量存放。
var c = _global.a.b.c;

5. IE6 中,数组join('') 操作优于大量字符串+操作。

6. 尽量减少css样式出现在js的代码里面。更改样式,请用定义class来代替,只针对class操作。
例如:
element.style.color = "red";
element.style.left = "10px";
element.style.top = "100px";
element.style.visibility = "visible";
or
element.style.cssText = "color: red; left: 10px; top: 100px; visibility: hidden";

方案:.reveal {color: red;left: 10px;top: 100px;visibility: visible;}

7. 分离事件监听函数、事件处理函数。不传递不必要的event对象:

var MyApplication = {
handleClick: function(event) {
this.showPopup(event.clientX, event.clientY);
},

//这里函数的处理逻辑,只是跟参数值有关,不应该牵扯到UI关联的Event事件。
showPopup: function(x, y) {
var popup = document.getElementById("popup");
popup.style.left = x + "px";
popup.style.top = y + "px";
}
};

// 这里只是定义了事件的处理函数,真正的处理逻辑不要同时写到这里。
addListener(element, "click", function(event) {
MyApplication.handleClick(event); // this is okay
});

//如此一来,重用showPopup 函数就成为了可能:
MyApplication.showPopup(10, 10);

8. 关于属性(不是属性值)存在判断,
if(typeof obj.a){} // wrong.
if(obj.a){} // wrong.
if(obj.a != null){} // wrong.
if(obj.a != undefined){} // wrong.

//为什么?假如:
var obj = { a: null, b:0, c:"",d:undefined};

//事实上,上述的判断都是值判断,不合我们的要求。正确的判断:
if("a" in obj){} //true

// 或者是
if(obj.hasOwnProperty("a")){} //true

// 注意:对于IE6/7/8, DOMElement 对象是不会继承 js原生对象Object的hasOwnProperty方法。

9. 不要重写原生对象、方法,包括直接扩展方法。
事实上,因为这些对象、方法都不是你来维护的,它们的更新超出你的控制。

一种替代方法是门面设计模式——把原生的东西包起来,例如jQuery对象。


Array.prototype.index = function(){} // 不赞成

/**
* @param arr {Array} 数组对象
*/
function MyArray(arr){
this.arr = arr;
}
MyArray.prototype.index = function(){};

var myArray = new MyArray([...]);
myArray.index()

ECMAScript 5草案中新增了对象的加锁,可以从根本上防止这一类错误的。

内容来自:《Maintainable JavaScript》
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值