对有效提高Javascript执行效率的一些知识
为了提供新的和独特的用户体验,很多网站会使用Javascript来改进设计、验证的形式,检查浏览器的Ajax请求,饼干等操作,从而实现无刷新动态效果。然而,在浏览器中呈现大量的内容,如果处理不好,对网站的性能会急剧下降,所以我们有必要了解如何提高执行效率。Javascript函数
在Javascript中,函数是编译后使用。在某些情况下,一个字符串可以用来代替一个功能,但每一次的Javascript代码执行时,它将重新分析和影响性能。
1、评价实例
复制代码代码如下所示:
eval('output =(输入输入));
建议的更改:
eval(新功能(){输出=(输入输入)});
2、setTimeout的例子
复制代码代码如下所示:
setTimeout(警报(1)
建议的更改:
setTimeout(函数(){ alert(1)},1000);
使用函数而不是字符串作为参数,以确保新方法中的代码可以由Javascript编译器优化。
Javascript的范围
Javascript作用域链中的每个范围包含几个变量,理解一个操作链以便使用它非常重要。
复制代码代码如下所示:
VAR次的局部变量递增=全球; / /全局变量
函数测试(){
VAR次的局部变量递增=地方; / /局部变量
本地变量
警报(次的局部变量递增);
全局变量
警报(这个次的局部变量递增);
在全局变量的本地变量中找不到文档。
无功而= document.getelementbyid(而);
}
使用局部变量比使用全局变量要快得多,因为链越远,分辨率就越慢:
如果代码中有或尝试catch语句,范围链将更加复杂,如下所示:
Javascript字符串
Javascript中最有影响力的功能之一是字符串连接,它通常使用+号来实现一个拼接字符串。然而,早期的浏览器并没有优化这种连接,从而在连续创建和销毁字符串时严重降低了Javascript的执行效率。
复制代码代码如下所示:
hello+世界;
建议改为:
复制代码代码如下所示:
var;
O.push(你好);
O.push();
O.push(世界);
VaR txt = o.join();
让我们再简单地把它包装起来。
复制代码代码如下所示:
函数的StringBuffer(STR){
var arr = { };
Arr.push(STR | | );
this.append =功能(STR){
Arr.push(STR);
返回此;
};
this.tostring =函数(){
返回arr.join();
};
};
然后这样称呼它:
复制代码代码如下所示:
VaR txt =新StringBuffer();
Txt.append(你好);
Txt.append();
Txt.append(世界);
警报(txt.tostring());
Javascript DOM操作
HTML文档对象模型(DOM)定义了访问和操作HTML文档的标准方法,它将HTML文档表示为一个节点树,其中包含元素、属性和文本内容,通过使用HTML DOM,Javascript可以访问HTML文档中的所有节点并操作它们。
重绘的DOM
每一个DOM对象,修改页面需要重绘的DOM和浏览器将重新渲染页面,从而减少对DOM对象变化的数量,可以有效地提高Javascript的性能。
复制代码代码如下所示:
对于(var i = 0;i < 1000;i + +){
var元素= document.createelement('p');
elmt.innerhtml =我;
document.body.appendchild(元素);
}
建议改为:
复制代码代码如下所示:
var;
对于(var i = 0;i < 1000;i + +){
Html.push('+我+的);
}
html.join document.body.innerHTML =(' ');
DOM访问
在HTML文件中的每个节点都可以通过DOM访问。每次你叫getElementById(),getElementsByTagName(),和其他的方法,所有的节点都重新搜索和访问。所以缓存DOM节点你发现还可以提高Javascript的性能。
复制代码代码如下所示:
document.getelementbyid(P2)。style.color =蓝色;
document.getelementbyid(P2)。style.fontfamily =宋体;
document.getelementbyid(P2)。style.fontsize =大;
建议改为:
复制代码代码如下所示:
var元素= document.getelementbyid(P2);
elmt.style.color =蓝色;
elmt.style.fontfamily =宋体;
elmt.style.fontsize =大;
DOM遍历
下一个孩子的指标通常读DOM遍历子元素。在早期的浏览器中,阅读方式效率低下。Using nextSibling can improve the efficiency of JS traversing DOM.
复制代码代码如下所示:
var;
var x = document.getelementsbytagname(P); / /所有节点
对于(var i = 0;i < x.length;i++){
}
建议改为:
复制代码代码如下所示:
var;
var x = document.getelementbyid(div); / /父节点
var node = x.firstchild;
当(节点)!= NULL){
节点= node.nextsibling;
}
Javascript的内存释放
在Web应用程序中,随着DOM对象数量的增加,内存消耗将越来越大,因此对象的引用应该及时释放,这样浏览器就可以恢复内存。
释放DOM占用的内存
复制代码代码如下所示:
document.getelementbyid(测试).innerHTML = ;
该DOM元素的innerHTML设置为空字符串,它可以释放内存占用的子元素。
Javascript对象的释放
复制代码代码如下所示:
对象:
obj = null
对象/属性:
删除obj.property
数组元素:
Arr.splice(0,3); / / 3之前删除元素