巧用局部变量提升javascript性能


Posted in Javascript onFebruary 24, 2014

javascript中一个标识符所在的位置越深,它的读写速度也越慢。因此,函数中读写局部变量总是最快的,而读写全局变量通常是最慢的。一个好的经验法则是:如果某个跨作用域的值在函数中被引用一次以上,那么就把它存储到局部变量里。

例如:

<!-- 优化前 --> 
<script type="text/javascript"> 
function initUI () { 
var bd = document.body, 
links = document.getElementByTagName("a"), 
i=0, 
len=links.length; 
while(i < len){ 
update(links[i++]); 
} document.getElementById("go-btn").onclick = function(){ 
start(); 
} 
bd.className = "active"; 
} 
</script>

该函数引用了三次document,而document是个全局对象。搜索该变量的过程必须遍历整个作用域链接,直到最后在全局变量对象中找到。你可以通过以下方法减少对性能的影响:先将全局变量的引用存储在一个局部变量中,然后使用这个局部变量代替全局变量。

例如:

<!-- 优化后 --> 
<script type="text/javascript"> 
function initUI () { 
var doc=document, 
bd = doc.body, 
links = doc.getElementByTagName("a"), 
i=0, 
len=links.length; 
while(i < len){ 
update(links[i++]); 
} doc.getElementById("go-btn").onclick = function(){ 
start(); 
} 
bd.className = "active"; 
} 
</script>
Javascript 相关文章推荐
extjs 为某个事件设置拦截器
Jan 15 Javascript
Jquery网页出现的乱码问题的三种解决方法
Jun 30 Javascript
JavaScript截断字符串的方法
Jul 15 Javascript
jquery实现点击查看更多内容控制段落文字展开折叠效果
Aug 06 Javascript
轻松学习jQuery插件EasyUI EasyUI创建RSS Feed阅读器
Nov 30 Javascript
利用CSS3在Angular中实现动画
Jan 15 Javascript
jQuery获取cookie值及删除cookie用法实例
Apr 15 Javascript
第二篇Bootstrap起步
Jun 21 Javascript
JavaScript程序中实现继承特性的方式总结
Jun 24 Javascript
详解Angular.js中$http拦截器的介绍及使用
Jul 04 Javascript
node.js实现微信开发之获取用户授权
Mar 18 Javascript
Vue.js组件实现选项卡以及切换特效
Jul 24 Javascript
javascript中的原型链深入理解
Feb 24 #Javascript
JSONP获取Twitter和Facebook文章数的具体步骤
Feb 24 #Javascript
动态加载js、css等文件跨iframe实现
Feb 24 #Javascript
js操纵dom生成下拉列表框的方法
Feb 24 #Javascript
js设置function参数默认值(适合没有传参情况)
Feb 24 #Javascript
JS取request值以及自动执行使用示例
Feb 24 #Javascript
减少访问DOM的次数提升javascript性能
Feb 24 #Javascript
You might like
APMServ使用说明
2006/10/23 PHP
一个对于js this关键字的问题
2007/01/09 Javascript
jQuery Study Notes学习笔记 (二)
2010/08/04 Javascript
Easy.Ajax 部分源代码 支持文件上传功能, 兼容所有主流浏览器
2011/02/24 Javascript
javascript日期转换 时间戳转日期格式
2011/11/05 Javascript
js unicode 编码解析关于数据转换为中文的两种方法
2014/04/21 Javascript
js生成的验证码的实现与技术分析
2014/09/17 Javascript
JS实现动态表格的添加,修改,删除功能(推荐)
2016/06/15 Javascript
基于BootStrap的Metronic框架实现页面链接收藏夹功能按钮移动收藏记录(使用Sortable进行拖动排序)
2016/08/29 Javascript
AngularJS通过$sce输出html的方法
2016/09/22 Javascript
js操作浏览器的参数方法
2017/01/21 Javascript
angularjs $http实现form表单提交示例
2017/06/09 Javascript
详解Node.js access_token的获取、存储及更新
2017/06/20 Javascript
JS库 Highlightjs 添加代码行号的实现代码
2017/09/13 Javascript
360提示[高危]使用存在漏洞的JQuery版本的解决方法
2017/10/27 jQuery
easyui下拉框动态级联加载的示例代码
2017/11/29 Javascript
jQuery实现通过方向键控制div块上下左右移动的方法【测试可用】
2018/04/26 jQuery
简述vue路由打开一个新的窗口的方法
2018/11/29 Javascript
JavaScript禁用右键单击优缺点分析
2019/01/20 Javascript
layui树形菜单动态遍历的例子
2019/09/23 Javascript
mpvue 项目初始化及实现授权登录的实现方法
2020/07/20 Javascript
vscode 调试 node.js的方法步骤
2020/09/15 Javascript
[03:27]《辉夜杯》线下训练营 导师CU和海涛指点迷津
2015/10/23 DOTA
django从请求到响应的过程深入讲解
2018/08/01 Python
在pytorch中为Module和Tensor指定GPU的例子
2019/08/19 Python
Python绘制二维曲线的日常应用详解
2019/12/04 Python
python中68个内置函数的总结与介绍
2020/02/24 Python
基于Python制作一副扑克牌过程详解
2020/10/19 Python
求职自荐书范文
2013/12/04 职场文书
高二英语教学反思
2014/01/19 职场文书
2015年社区关工委工作总结
2015/04/03 职场文书
会议通知范文
2015/04/15 职场文书
2015年保洁工作总结范文
2015/04/28 职场文书
《世界多美呀》教学反思
2016/02/22 职场文书
MySQL索引失效的典型案例
2021/06/05 MySQL
CSS 实现Chrome标签栏的技巧
2021/08/04 HTML / CSS