`
cwqcwk1
  • 浏览: 87263 次
文章分类
社区版块
存档分类
最新评论

如何有效提高JavaScript的执行效率

 
阅读更多

为了提供新鲜、别致的用户体验,很多网站都会使用 JavaScript 来改善设计、验证表单、检查浏览器,以及Ajax请求,cookie操作等等,实现无刷新动态效果 。但是,要将大量内容在浏览器呈现,如果处理不好,网站性能将会急剧下降。所以我们有必要了解下,如何提高JavaScript的执行效率。

JavaScript 函数

在JavaScript 中,函数在使用前会预编译。尽管有些时候下可以使用字符串代替函数,但是每次执行这段JavaScript 代码时都会重新解析,影响性能。

1、eval例子
eval('output=(input * input)');
// 建议改成:
eval(new function() { output=(input * input)});
2、setTimeout例子
setTimeout("alert(1)", 1000);
// 建议改成:
setTimeout(function(){alert(1)}, 1000);

使用函数代替字符串作参数确保新方法中的代码能被 JavaScript 编译器优化。

JavaScript作用域

JavaScript作用域链中的每个作用域都包含几个变量。理解作用域链很重要,这样才能利用它。

var localVar = "global"; //全局变量

function test() {

  var localVar = "local"; //局部变量

  //局部变量
  alert(localVar);

  //全局变量
  alert(this.localVar);

  //查找document在局部变量找不到,就查找全局变量
  var pageName = document.getElementById("pageName"); 
}

使用局部变量比使用全局变量快得多,因为在作用域链中越远,解析越慢。下图显示了作用域链结构:

如果代码中有 with 或 try-catch 语句,作用域链会更复杂,如下图:

JavaScript字符串

JavaScript中一个非常影响性能的函数是字符串连接,一般情况都是使用 + 号来实现拼接字符串。但是早期浏览器没有对这样的连接方式做优化,导致在连续创建和销毁字符串严重降低JavaScript执行效率。

var txt = "hello" + " " + "world";

建议改成:

var o = [];
o.push("hello");
o.push(" ");
o.push("world");
var txt = o.join();

我们再简单封装一下:

function StringBuffer(str) {
    var arr = [];
    arr.push(str || "");
    this.append = function(str) {
        arr.push(str);
        return this;
    };
    this.toString = function() {
        return arr.join("");
    };
};
然后这样子调用:

var txt = new StringBuffer();
txt.append("Hello");
txt.append(" ");
txt.append("World");
alert(txt.toString());

JavaScript DOM操作

HTML Document Object Model (DOM) 定义了访问和操作 HTML 文档的标准方法。它将 HTML 文档表示成节点树,其中包含元素、属性和文本内容。通过使用 HTML DOM,JavaScript 能访问 HTML 文档中所有节点并操作它们。

DOM重绘

每次修改到页面的DOM对象,都涉及到DOM重绘,浏览器都会重新渲染页面。所以降低DOM对象的修改次数,可以有效地提高JavaScript的性能。

for (var i = 0; i < 1000; i++ ) {
  var elmt = document.createElement('p');
  elmt.innerHTML = i;
  document.body.appendChild(elmt);
}
建议改成:
var html = [];
for (var i = 0; i < 1000; i++) {
  html.push('<p>' + i + '</p>');
}
document.body.innerHTML = html.join('');
DOM访问

通过DOM可以访问到HTML文档中的每个节点。每次调用getElementById()、getElementsByTagName()等方法,都会重新查找并访问节点。所以将查找到的DOM节点缓存一下,也可以提高JavaScript的性能。

document.getElementById("p2").style.color = "blue";
document.getElementById("p2").style.fontFamily = "Arial";
document.getElementById("p2").style.fontSize = "larger";
建议改成:
var elmt = document.getElementById("p2");
elmt.style.color = "blue";
elmt.style.fontFamily = "Arial";
elmt.style.fontSize = "larger";

DOM遍历

DOM遍历子元素通常都是按索引循环读取下一个子元素,在早期浏览器下这种读取方式执行效率很低,利用nextSibling方式可以提高js遍历DOM的效率。

var html = [];
var x = document.getElementsByTagName("p");//所有节点
for (var i = 0; i < x.length; i++)  {
  //todo
}
建议改成:
var html = [];
var x = document.getElementById("div");//上级节点
var node = x.firstChild;
while(node != null){
  //todo
  node = node.nextSibling;
}

JavaScript 内存释放

在web应用中,随着DOM对象数量的增加,内存消耗会越来越大。所以应当及时释放对象的引用,让浏览器能够回收这些内存。

释放DOM占用的内存

document.getElementById("test").innerHTML = "";
将DOM元素的innerHTML设置为空字符串,可以释放其子元素占用的内存。

释放javascript对象

//对象:
obj = null

//对象属性:
delete obj.property

//数组元素:
arr.splice(0,3);//删除前3个元素

参考:http://www.ibm.com/developerworks/cn/web/wa-webappperformance/

分享到:
评论

相关推荐

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

    主要介绍了有效提高JavaScript执行效率的几点知识,本文从JavaScript函数、JavaScript作用域、JavaScript字符串、JavaScript DOM操作、DOM重绘、DOM访问、DOM遍历等方面讲解了提高JavaScript执行效率的小技巧,需要的...

    JavaScript执行效率优化与内存管理优化.pdf

    JavaScript执行效率优化与内存管理是Web开发中至关重要的主题,因为它们直接影响到用户体验和资源消耗。以下是基于提供的部分内容,详细阐述这些优化策略及其原理。 **1. DOM操作优化** 1.1.1 使用`...

    如何提高javascript的效率

    JavaScript是Web开发中不可或缺的一部分,理解并...总的来说,提高JavaScript效率需要从编写高性能的代码、优化DOM操作和控制页面加载等多个角度进行。遵循这些最佳实践,可以显著提升Web应用的响应速度和用户体验。

    Javascript执行效率全面总结

    全局变量的优化、避免eval的使用、合理管理闭包中的变量、高效利用原型继承以及减少DOM操作等,这些都只是提高Javascript执行效率的几个方面。要编写出既优雅又高效的Javascript代码,还需要不断实践和积累经验。

    探寻Javascript执行效率问题

    JavaScript执行效率是每个开发者关注的重要话题,因为它直接影响到网页或应用的性能和用户体验。JavaScript语言提供了许多特性,如作用域链、闭包、原型继承和eval等,它们为编程带来了便利,但同时也可能成为效率的...

    利用函数的惰性载入提高javascript代码执行效率

    惰性载入是提高JavaScript代码性能的一个重要技术手段,尤其适用于处理不同浏览器对特定JavaScript功能支持程度不一的情况。通过惰性载入,我们可以优化函数执行路径,减少不必要的条件判断,提升代码执行效率。 在...

    JavaScript提高加载和执行效率的方法

    首先,理解JavaScript执行过程中的阻塞机制至关重要。JavaScript代码无论是内嵌在HTML中还是通过`&lt;script&gt;`标签引用外部文件,都会导致浏览器暂停页面的下载和渲染,直到脚本执行完毕。这是因为JavaScript可能修改...

    JavaScript设计模式+JavaScript模式+JavaScript异步编程

    设计模式和异步编程是提升JavaScript代码质量和效率的关键。以下将详细介绍这三本书所涵盖的知识点: 1. **JavaScript设计模式**: 设计模式是软件工程中经过实践验证的、解决常见问题的有效方法。在JavaScript中...

    JavaScript 引擎技术

    JavaScript引擎的实现是通过一系列优化策略来提高性能的,例如V8引擎使用了即时编译(JIT)技术,将JavaScript代码编译为机器码,提高了执行效率。此外,引擎还对垃圾回收机制进行了优化,如分代垃圾收集,以更有效...

    javascript脚本应用大全

    了解V8引擎的工作原理,掌握优化技巧如减少全局变量、避免阻塞主线程、使用requestAnimationFrame等,能有效提升JavaScript的执行效率。 13. **模块化** ES6引入的模块系统(import和export)使得代码组织更加...

    JavaScript完全手册pdf

    11. **性能优化**:了解如何避免内存泄漏,减少DOM操作,优化代码结构,提高JavaScript执行效率。 12. **跨域通信**:理解CORS、JSONP等跨域解决方案的工作原理。 13. **框架和库**:了解React、Vue、Angular等...

    JavaScript高级_javascript_zip_

    7. **性能优化**:包括DOM操作优化、事件处理优化、内存管理、代码执行效率提升等,这些都是高级JavaScript开发者必须关注的话题。 8. **错误处理**:学会有效地捕获和处理错误,是保证程序稳定运行的关键。理解try...

    【合集】优化和提高javascript的运行速度

    随着Web应用程序复杂性的提升,提高JavaScript代码的运行速度变得尤为重要。为了达到优化和提高JavaScript运行速度的目的,有许多策略和技术可以应用,以下将详细阐述这些知识点。 首先,要确保JavaScript的源码尽...

    JavaScript多图模版

    在这个模板中,JQuery可能被用来优化代码结构,减少重复,同时提高代码执行效率。通过使用JQuery,开发者可以更快速地实现上述功能,而且JQuery丰富的插件生态系统也能提供更多扩展可能性。 总结起来,"JavaScript...

    [高性能JavaScript编程].(High.Performance.JavaScript).Nicholas.C.Zakas.文字版

    除此之外,书中还包含了许多关于提高JavaScript性能的技巧和最佳实践。例如,在编写代码时,应当尽量减少全局变量的使用,因为全局变量会降低代码的运行效率。同时,合理利用函数作用域和闭包(closures)能够减少...

    《高性能JavaScript》(尼古拉斯·泽卡斯).pdf

    良好的代码组织和命名约定不仅使代码更易读,还能在一定程度上提高代码执行效率。同时,有效的错误处理和调试方法可以快速定位并修复性能问题。 最后,书中的一个重点是关于JavaScript的最新特性,如ES6及后续版本...

    javascript

    随着技术的发展,Node.js将JavaScript引入了服务器端,使得同一门语言可以用于前后端开发,大大提高了开发效率。Express.js是Node.js的一个流行框架,用于快速构建web应用。 此外,ES6(ECMAScript 2015)引入了...

    JavaScript语言精粹pdf

    9. **性能优化**:讨论JavaScript执行效率的问题,如避免全局查找、减少DOM操作、合理使用缓存等,以提高页面加载速度和用户体验。 10. **浏览器兼容性**:由于JavaScript的实现不同,开发者需要了解如何编写跨...

    Photoshop-CS6-JavaScript.zip

    JavaScript在Photoshop中的应用是其自动化和扩展功能的关键部分,使得用户可以通过编写脚本来执行复杂的任务,提高工作效率。 在"Photoshop CS6 JavaScript 编程 参考手册"中,你可以找到关于如何使用JavaScript与...

Global site tag (gtag.js) - Google Analytics