巧用局部变量提升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 相关文章推荐
jquery监听div内容的变化具体实现思路
Nov 04 Javascript
SeaJS入门教程系列之使用SeaJS(二)
Mar 03 Javascript
jquery图片轮播插件仿支付宝2013版全屏图片幻灯片
Apr 03 Javascript
JS 终止执行的实现方法
Nov 24 Javascript
AngularJS中$http使用的简单介绍
Mar 17 Javascript
jQuery插件FusionWidgets实现的Bulb图效果示例【附demo源码下载】
Mar 23 jQuery
JS实现简单拖拽效果
Jun 21 Javascript
详解Vue 2.0封装axios笔记
Jun 22 Javascript
vue Render中slots的使用的实例代码
Jul 19 Javascript
详解Vue 中 extend 、component 、mixins 、extends 的区别
Dec 20 Javascript
用 js 写一个 js 解释器过程详解
Aug 02 Javascript
vue实现扫码功能
Jan 17 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
smarty内部日期函数html_select_date()用法实例分析
2015/07/08 PHP
PHP Try-catch 语句使用技巧
2016/02/28 PHP
phpcms配置列表页以及获得文章发布时间
2017/07/04 PHP
Laravel 关联模型-关联新增和关联更新的方法
2019/10/10 PHP
js模拟C#中List的简单实例
2014/03/06 Javascript
js库Modernizr的介绍和使用
2015/05/07 Javascript
JavaSciprt中处理字符串之sup()方法的使用教程
2015/06/08 Javascript
快速学习AngularJs HTTP响应拦截器
2015/12/31 Javascript
jQuery实现的简单拖拽功能示例
2016/09/13 Javascript
JS 事件绑定、事件监听、事件委托详细介绍
2016/09/28 Javascript
Vue弹出菜单功能的实现代码
2018/09/12 Javascript
jQuery实现手风琴效果(蒙版)
2020/01/11 jQuery
Python字符串详细介绍
2015/05/09 Python
Python中表达式x += y和x = x+y 的区别详解
2017/06/20 Python
详解Django+Uwsgi+Nginx的生产环境部署
2018/06/25 Python
Django Sitemap 站点地图的实现方法
2019/04/29 Python
Django多层嵌套ManyToMany字段ORM操作详解
2020/05/19 Python
Python虚拟环境venv用法详解
2020/05/25 Python
Merchant 1948澳大利亚:新西兰领先的鞋类和靴子供应商
2018/03/24 全球购物
英国手机壳购买网站:Case Hut
2019/04/11 全球购物
有关打架的检讨书
2014/01/25 职场文书
网络技术专业推荐信
2014/02/20 职场文书
《美丽的黄昏》教学反思
2014/02/28 职场文书
《狮子和兔子》教学反思
2014/03/02 职场文书
幼儿园安全责任书
2014/04/14 职场文书
活动总结怎么写
2014/04/28 职场文书
文明演讲稿范文
2014/05/12 职场文书
比赛口号大全
2014/06/10 职场文书
大学生考试作弊检讨书
2014/09/21 职场文书
作风转变年心得体会
2014/10/22 职场文书
上课说话检讨书500字
2014/11/01 职场文书
公司清洁工岗位职责
2015/04/15 职场文书
2015年安置帮教工作总结
2015/05/22 职场文书
个人自我鉴定怎么写?
2019/07/01 职场文书
总结Pyinstaller打包的高级用法
2021/06/28 Python
redis requires ruby version2.2.2的解决方案
2021/07/15 Redis