编写高性能Javascript代码的N条建议


Posted in Javascript onOctober 12, 2015

多年来,Javascript一直在web应用开发中占据重要的地位,但是很多开发者往往忽视一些性能方面的知识,特别是随着计算机硬件的不断升级,开发者越发觉得Javascript性能优化的好不好对网页的执行效率影响不明显。但在某些情况下,不优化的Javascript代码必然会影响用户的体验。因此,即使在当前硬件性能已经大大提升的时代,在编写Javascript代码时,若能遵循Javascript规范和注意一些性能方面的知识,对于提升代码的可维护性和优化性能将大有好处。

  下面给出编写高性能的Javascript代码的若干建议:

  1、尽量不要用for-in 循环去访问数组,建议用 for 循环进行循环:       

function foo() {
   var i, b, c=[,,];
   for (i in c) {
    b = c[i];
    if(b === "")
     return b;
   }
  }
  //性能更好
  function foo() {
   var i, b, c=[,,];
   for (i=;i<c.length;i++) {
    b = c[i];
    if(b === "")
     return b;
   }
  }

  2、建议将对象进行缓存处理,特别是DOM访问是比较消耗资源的:

//c.length没有缓存,每次迭代都要计算一下数组的长度
  function foo() {
   var i, b, c=[,,];
   for (i=;i<c.length;i++) {
    b = c[i];
    if(b === "")
     return b;
   }
  }
  //性能更好,第一次将数组的长度缓存到变量l中,第二次及后续的循环无需计算数组长度
  function foo() {
   var i, b, c=[,,],l;
   for (i=,l=c.length;i<l;i++) {
    b = c[i];
    if(b === "")
     return b;
   }
  }

  //document.getElementById('info')没有缓存,每次都要遍历DOM
  function foo() {
   var e;
   document.getElementById('info').innerHTML="call ";
   document.getElementById('info').innerHTML="call ";
   
  }
  //性能更好,第二次无需访问DOM
  function foo() {
  var e=document.getElementById('info');
  e.innerHTML="call ";
   e.innerHTML="call ";
  }

3、建议不要在函数内进行过深的嵌套判断: 

//函数内嵌套判断语句过多
  function foo1() {
   var r={};
   r.data={};
   r.data.myProp=2;
   if (r) {
   if (r.data) {
    if (r.data.myProp) {
     //逻辑处理
    } 
    else {
     //逻辑处理
    }
   }
 }
 }
  //性能更好
 function foo2() {
   var r={};
   r.data={};
   r.data.myProp=2;
  if (!r) return;
  if (!r.data) return;  
  if (r.data.myProp) {
   //逻辑处理
  } else {
    //逻辑处理
  }
 }

  4、避免循环引用,防止内存泄漏:

//需要jQuery
 function foo(e,d) {
  $(e).on("click", function() {
    //对d进行逻辑处理
    cbk(d);
      } 
  });
 }
 //打破循环!
 function foo(e, d) {
  $(e).on("click", cbk(d));
 }
 function cbk (d) {
 //逻辑处理
 }

5、建议避免在函数内返回一个未声明的变量,会污染外部变量:

function foo(a, b) {
  r = a + b;
  return r; //r未声明,则创建了一个全局变量
 }

6、var声明变量,建议写在多行

//自己测试结果是foo快,但也有一种观点是foo快
 function foo() {
  var c = ;
  var sum=;
  var d = ;
  var e;
 }
 function foo() {
  var c = ,sum=, d = , e;
 }

说明:其实单个函数时间上差别较小,这里采用循环多次用累计时间进行性能对比,不同PC配置或者浏览器测试结果可能存在差异。

以上内容是编写高性能Javascript代码的N条建议,希望对大家有所帮助。

Javascript 相关文章推荐
JS BASE64编码 window.atob(), window.btoa()
Mar 09 Javascript
jquery.validate使用攻略 第五步 正则验证
Jul 01 Javascript
Javascript 键盘事件的组合使用实现代码
May 04 Javascript
再谈javascript原型继承
Nov 10 Javascript
用JavaScript显示浏览器客户端信息的超相近教程
Jun 18 Javascript
JS根据key值获取URL中的参数值及把URL的参数转换成json对象
Aug 26 Javascript
简单实现JS对dom操作封装
Dec 02 Javascript
Javascript仿京东放大镜的效果
Mar 01 Javascript
vue.js中过滤器的使用教程
Jun 08 Javascript
解决Linux无法正常安装与卸载Node.js的方法
Jan 19 Javascript
React 组件间的通信示例
Jun 14 Javascript
详解微信小程序工程化探索之webpack实战
Apr 20 Javascript
JavaScript 性能优化小结
Oct 12 #Javascript
一个php+js实时显示时间问题
Oct 12 #Javascript
JS实现新浪微博效果带遮罩层的弹出框代码
Oct 12 #Javascript
jquery实现仿新浪微博带动画效果弹出层代码(可关闭、可拖动)
Oct 12 #Javascript
关于事件mouseover ,mouseout ,mouseenter,mouseleave的区别
Oct 12 #Javascript
jquery实现可自动判断位置的弹出层效果代码
Oct 12 #Javascript
jQuery实现鼠标经过时出现隐藏层文字链接的方法
Oct 12 #Javascript
You might like
终于听上了直流胆调频
2021/03/02 无线电
php5.3中连接sqlserver2000的两种方法(com与ODBC)
2012/12/29 PHP
Laravel利用gulp如何构建前端资源详解
2018/06/03 PHP
ThinkPHP5+UEditor图片上传到阿里云对象存储OSS功能示例
2019/08/05 PHP
laravel-admin自动生成模块,及相关基础配置方法
2019/10/08 PHP
判断及设置浏览器全屏模式
2014/04/20 Javascript
Node.js安装教程和NPM包管理器使用详解
2014/08/16 Javascript
Javascript基础知识盲点总结之函数
2016/05/15 Javascript
BootStrap的Datepicker控件使用心得分享
2016/05/25 Javascript
最简单纯JavaScript实现Tab标签页切换的方式(推荐)
2016/07/25 Javascript
jQuery图片切换动画特效
2016/11/02 Javascript
js时间控件只显示年月
2017/01/08 Javascript
Vue+axios 实现http拦截及路由拦截实例
2017/04/25 Javascript
JavaScript实现全选取消效果
2017/12/14 Javascript
VUEJS 2.0 子组件访问/调用父组件的实例
2018/02/10 Javascript
[00:31]2016完美“圣”典风云人物:国士无双宣传片
2016/12/04 DOTA
python比较2个xml内容的方法
2015/05/11 Python
Python中的迭代器与生成器高级用法解析
2016/06/28 Python
Django中的文件的上传的几种方式
2018/07/23 Python
python爬虫之urllib,伪装,超时设置,异常处理的方法
2018/12/19 Python
解决python使用list()时总是报错的问题
2020/05/05 Python
PyTorch 中的傅里叶卷积实现示例
2020/12/11 Python
美国一家专业的太阳镜网上零售商:Solstice太阳镜
2016/07/25 全球购物
简历中的自我评价怎么写
2014/01/29 职场文书
会计员岗位职责
2014/03/15 职场文书
购房协议书
2014/04/11 职场文书
探亲假请假条
2014/04/11 职场文书
小学教师个人先进事迹材料
2014/05/17 职场文书
领导干部作风整顿个人剖析材料
2014/10/11 职场文书
群众路线自查报告及整改措施
2014/11/04 职场文书
贷款担保书
2015/01/20 职场文书
采购员岗位职责
2015/02/03 职场文书
幼儿园教师安全责任书
2015/05/08 职场文书
债务纠纷起诉书
2015/05/20 职场文书
mysql 如何获取两个集合的交集/差集/并集
2021/06/08 MySQL
VMware虚拟机安装 Windows Server 2022的详细图文教程
2022/09/23 Servers