对有效提高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之前删除元素