javascript性能优化总结

了解JS性能优化是学习前端必备的一项技能。下面我们来总结js性能优化方法:

1.注意作用域,避免全局查找。

访问全局变量比访问局部变量慢,是因为需要遍历作用域链,查找作用域链需要额外的时间。所以在一个函数中,将访问多次的全局对象或者域外变量存储为局部变量来使用。如某个方法需引用全局变量的值,则在该方法所在的对象的作用域中定义一个局部变量等于全局变量的值。

避免不必要的属性查找,将属性设置为局部变量。

function(){

  var title = document.title;

  for(var i=0;i<3;i++){

    console.log(title);

  }

}

 

2.优化循环

简化循环体。当循环的数量不多时,展开循环。当if-else较多时,建议使用switch语句。

 

3.最小化语句数

声明多个变量时,可以使用一个var关键字来声明,变量之间用逗号表示。

使用数组或对象字面量来新建数组或对象。var arr= [1,2,3,4];var map={a:1,b:2}

 

4.JS的执行尽量脱离DOM树,限制DOM操作的次数,优化DOM交互,尽量减少浏览器对DOM的渲染和重绘操作

最小化现场更新,现场更新就是立即对页面的显示进行更新。尽量少更新。这时候可使用文档碎片来构建DOM结构。document.createDocumentFragment()

使用innerHTML来构建大的DOM结构。但是也避免重复大量的使用。

 

5.使用事件代理

页面上的事件处理程序的数量和页面响应用户交互的速度之间有个负相关。所以为了减少事件处理程序,尽量使用事件委托技术。

 

6.JS的执行顺序

JS放HTML页面最后面时,不一定提升JS性能,但是在网速较慢的时候会快速的渲染页面。

 

7.JS定义行为,html定义内容,CSS定义外观,不混淆

 

8.减少HTTP请求数,JS压缩,HTTP压缩

 

9.数据尽量存储在数组里

 

10、代码的优化不是减少代码量,而是增加代码提高代码的可阅读性。

包括正确标记变量,封装某个重复的行为,合理的注释等。

11.避免过多的重排与重绘操作。

尽量将DOM中的多个读操作放一起,中间不要插入写的操作,因为写操作会导致浏览器迅速的重排,从而影响性能。将DOM中的多个写操作放一起,不要插入读的操作,如果插入读操作会导致浏览器多次重排。也就是DOM中读写操作分开。

 

12.缓存重排获取的值

避免下次用到该值的时候,浏览器又需要重排。

 

13.通过设置样式名来修改元素样式

通过改变元素的class,或者csstext属性来改变元素的样式。

 

14.尽量使用离线DOM来操作节点

例如操作Document Fragment对象,完成后把这个对象插入到实际的DOM中。或者cloneNode()方法,在克隆的节点上操作,再用克隆的节点替换原节点。

 

15.对操作频繁的元素使用display:none,然后对其操作,操作完后恢复显示display:block

这样处理的话,浏览器相当于渲染页面只有两次(隐藏或显示)。不可见的元素不影响重排或重绘。

 

16.将元素设为position:fixed或absolute,重排的开销会很小

因为被定位的元素不会影响其他元素的布局。

 

17.使用虚拟DOM的脚本库

比如React等。

 

18.使用window.requestAnimationFrame(),window.requestIdleCallback()

这两个方法调节重新渲染。

requestAnimationFrame(func),传一个函数进去当作参数,这个函数是一个屏幕重绘前被调用的函数,等下次浏览器渲染时执行函数里的操作。其实这个跟setTimeout()类似,只是间隔时间是由浏览器自己(下次渲染)来决定。这个方法解决了浏览器不知道Javascript动画正在执行和不知道多少才是合适的间隔的问题。

兼容写法:mozRequestAnimationFrame() || msRequestAnimationFrame() || weibkitRequestAnimationFrame() || oRequestAnimationFrame()

使用场景比如:重复执行的函数,JS动画(滑动),页面滚动,页面放大缩小等。

案例:

<script>
function scroll(elem){
    var hei = elem.clientHeight;
    window.requestAnimationFrame(function(){
        elem.style.height = (hei*2) + 'px';
    })
}
function scroll2(elem){
    var hei = elem.clientHeight;
    elem.style.height = (hei*2) + 'px';
}

elem = document.getElementById('elem');
console.time('a');
for(var i=0;i<100000;i++){
    scroll(elem);
}
console.timeEnd('a');

console.time('b');
for(var i=0;i<100000;i++){
    scroll2(elem);
}
console.timeEnd('b');
</script>

log里输出:

a: 389.112ms
b: 3922.486ms

很明显,使用requestAnimationFrame()方法后执行更有效率。不过该方法也有兼容性问题,是否使用还得看项目而定。

时间: 2024-09-25 09:11:27

javascript性能优化总结的相关文章

JavaScript性能优化之函数节流(throttle)与函数去抖(debounce)_javascript技巧

函数节流,简单地讲,就是让一个函数无法在很短的时间间隔内连续调用,只有当上一次函数执行后过了你规定的时间间隔,才能进行下一次该函数的调用. 函数节流的原理挺简单的,估计大家都想到了,那就是定时器.当我触发一个时间时,先setTimout让这个事件延迟一会再执行,如果在这个时间间隔内又触发了事件,那我们就clear掉原来的定时器,再setTimeout一个新的定时器延迟一会执行,就这样. 以下场景往往由于事件频繁被触发,因而频繁执行DOM操作.资源加载等重行为,导致UI停顿甚至浏览器崩溃. 1.

javascript性能优化之事件委托实例详解_javascript技巧

本文实例分析了javascript性能优化之事件委托.分享给大家供大家参考,具体如下: 为下面每个LI绑定一个click事件 <ul id="myLinks"> <li id="goSomewhere" >Go somewhere</li> <li id="doSomething" >Do something</li> <li id="sayHi" >Sa

JavaScript性能优化之小知识总结_javascript技巧

随着网络的发展,网速和机器速度的提高,越来越多的网站用到了丰富客户端技术.而现在Ajax则是最为流行的一种方式.JavaScript是一种解释型语言,所以能无法达到和C/Java之类的水平,限制了它能在客户端所做的事情,为了能改进他的性能,我想基于我以前给JavaScript做过的很多测试来谈谈自己的经验,希望能帮助大家改进自己的JavaScript脚本性能. 前言 一直在学习javascript,也有看过<犀利开发Jquery内核详解与实践>,对这本书的评价只有两个字犀利,可能是对javas

javascript性能优化之DOM交互操作实例分析_javascript技巧

本文实例讲述了javascript性能优化之DOM交互操作技巧.分享给大家供大家参考,具体如下: 在javascript各个方面,DOM毫无疑问是最慢的一部分.DOM操作与交互要耗费大量时间,因为它们往往需要重新渲染整个页面或者某一部分.理解如何优化与DOM的交互可以极大提高脚本完成的速度. 1.最小化DOM更新 看下面例子: var list = document.getElementById("ul"); for (var i=0; i < 10; i++){ var ite

JavaScript 性能优化小结_javascript技巧

随着 Web2.0 技术的不断推广,越来越多的应用使用 JavaScript 技术在客户端进行处理,从而使 JavaScript 在浏览器中的性能成为开发者所面临的最重要的可用性问题.而这个问题又因 JavaScript 的阻塞特性变的复杂,也就是说当浏览器在执行 JavaScript 代码时,不能同时做其他任何事情.本文详细介绍了如何正确的加载和执行 JavaScript 代码,从而提高其在浏览器中的性能. 在J2EE编程中,我们接触最多的脚本语言还是JavaScript.在使用JavaScr

JavaScript 性能优化技巧分享

JavaScript 作为当前最为常见的直译式脚本语言,已经广泛应用于 Web 应用开发中.为了提高Web应用的性能,从 JavaScript 的性能优化方向入手,会是一个很好的选择. 本文从加载.上下文.解析.编译.执行和捆绑等多个方面来讲解 JavaScript 的性能优化技巧,以便让更多的前端开发人员掌握这方面知识.   什么是高性能的 JavaScript 代码? 尽管目前没有高性能代码的绝对定义,但却存在一个以用户为中心的性能模型,可以用作参考:RAIL模型. 响应 如果你的应用程序能

JavaScript性能优化 创建文档碎片(document.createDocumentFragment)_javascript技巧

在浏览器中,我们一旦把节点添加到document.body(或者其他节点)中,页面就会更新并反映出这个变化,对于少量的更新,一条条循环插入也会运行很好,也是我们常用的方法.代码如下: 复制代码 代码如下: for(var i=0;i<5;i++){ var op = document.createElement("span"); var oText = document.createTextNode(i); op.appendChild(oText); document.body

JavaScript性能优化篇js优化

我在本文中将指出一些重要的规则,介绍如何使用你的JavaScript.使用哪些工具以及你将从中得到什么好处. 确保代码尽量简洁 不要什么都依赖JavaScript.不要编写重复性的脚本.要把JavaScript当作糖果工具,只是起到美化作用.别给你的网站添加大量的JavaScript代码.只有必要的时候用一下.只有确实能改善用户体验的时候用一下. 尽量减少DOM访问 使用JavaScript访问DOM元素很容易,代码更容易阅读,但是速度很慢.下面介绍几个要点:限制使用JavaScript来修饰网

javascript日期处理函数,性能优化批处理_基础知识

其实网上写javascript日期格式化的博文很多,大体都看了看,都还不错.唯一遗憾的是只顾着实现了功能,没对函数进行性能优化. 俗话说:不要重复造轮子.google上找了一个比较不错的日期格式化函数,来开始我的优化之旅吧! google上找的这个日期函数化函数,估计大家都很眼熟,以前我也一直在用.先看看优化后和优化前的效率对比吧! 1.优化之前的toDate函数(字符串转换成Date对象),重复执行1万次,耗时660毫秒 2.优化之前的dateFormat函数(Date对象格式化成字符串),重