js代码优化注意事项

	读《JavaScript权威指南》(张亚飞)这本书后对提高JavaScript性能的一些整理笔记

文档瘦身

将js程序部署到服务器之前应先进行优化,其中可以减少js程序文档,从而减少网络流量,所以可以对文档的一些无用内容是进行删除。

  1. 删除注释 ,但法律和版权部分需要保留(运行代码不需要注释)
  2. 替换长的变量名为短的变量名
  3. 使用0,1代替false和true
  4. 使用[]代替new Array(),使用{}代替new Object()
  5. 如果一次性定义多个变量,尽量在一行内定义

控制内存

JavaScript没有析构方法来显式的清理内存,用于执行js程序的解释引擎是自动管理内存的。自动管理意味着定期回收内存垃圾。所以当一个变量不再使用时将它赋值为null ,告诉解释引擎这个变量符合垃圾回收的条件。可以节省内存。

  1. 对象不用时赋值为null
  2. 对象属性不用可以用delete删除对象属性。
  3. 数组元素或者复合数不用可以赋值null

优化代码的一些常识

  1. 如果函数中语句较多,不宜在循环语句中多次调用,尽量分割成具有部分功能的小函数。
  2. 尽可能使用内建函数,内建函数是经过多次优化的,一般比用户自定义的函数运行速度更快。
  3. 在开始循环前,先将Array.length赋予变量,将变量作为条件使用。而不是使用Array.length本身.也可以使用反转循环使用,可以节省一个变量
For(var i = myArray.length;i>=0;i--){
//do something
}
  1. 注重优化循环的所有循环动作
    避免在循环体内部声明变量(for循环初始化会创建一个函数级变量而不是循环级,所以在for循环中定义变量和在循环体外定义变量是一样的)
    For in 循环可以枚举任何对象的属性名,但速度比for循环和while循环慢,在属性和数量未知的情况下才用。

  2. 使用try catch语句时 要在finally语句中释放占用的资源,否则在catch到错误时所占用的资源不会释放

  3. 避免使用递归和嵌套循环,不得已才用,他们会严重影响性能
    继承会增加方法调用的数量,而且会使用更多的内存,因此用户需要再类的扩展性和代码有效性中作出取舍

  4. 在局部变量够用时不使用全局变量,局部变量会比全局变量更快找到。

  5. 避免使用with语句,with 语句可以改变作用域链,他会使函数的所有局部变量出现在第二个作用域链对象中。

  6. SetTimeout()和setInterval()函数不推荐用字符串作为首个参数,如果传递一个字符串,解释引擎会使用函数构造器创建一个新函数,在一些浏览器中会比较慢。

Window.setInterval(“someFunction()”,1000);

推荐

Window.setInterval(someFunction,1000);
//或者
Window.setInterval(function(){/**do something/},1000);
  1. 函数缓存 将函数方法赋给一个变量是一个很好的编程习惯,jquery经常使用$(id)来获取元素引用也是利用了函数缓存

页面重构

一. 优化DOM reflow

  1. 能直接使用innerHTML就不要使用DOM,DOM要比直接生产代码慢,但是新版的WebKit内核的浏览器DOM方法更快

  2. 将元素从document 中删除,完成修改再把元素放回原来的位置

  3. 将元素的display设置为none完成修改后再把display修改为原来的值

  4. 在使用DOM时,可以使用文档片段(DocumentFragment)来缓存过程中的元素

二. 优化Repaint

  1. Repaint其实就是css导致的,所以要注意
    尽可能少的修改元素style上的属性,尽量通过className来修改样式

  2. 通过cssText属性一次性将样式设置到对象

  3. 避免设置过多的行内样式

  4. 避免使用表格布局

附上一篇写的很好关于前端优化的帖子【前端性能优化】

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值