JavaScript 小函数积累及性能优化
2016-05-28 22:51
483 查看
获取值的类型:
var toString = Object.prototype.toString; function getType(o) { return toString.call(o).slice(8,-1); }
document.write(getType(null)); document.writeln("<br/>"); document.write(getType(undefined));
输出:
定义一个 log 方法,让它可以代理 console.log 方法,常见的解决方法是:
function log() { var args = Array.prototype.slice.call(arguments); args.unshift('(app)'); console.log.apply(console, args); }
重复定时器
setTimeout(function () { var div=document.getElementById("myDiv"); left=parent(div.style.left)+5; div.left=left+"px"; if(left<200){ setTimeout(arguments.callee,50); } });
js
访问全局变量总是比访问局部变量慢,因为需要遍历作用域链,只要减少花费在作用域链上的时间,就能增加脚本的整体性能。
1.可能优化脚本性能最重要的就是注意全局查找
2.避免使用with语句
例子:
function update() { var imgs=document.getElementBuTagName("img"); for(var i=0;len=imgs.length,i<len;i++) { imgs[i].title=document.title+" image "+i; } var msg=document.getElementById("msg"); msg.innerHTML="Update Complete" }
优化后:(现在函数只执行一次全局查找速度更快)
function update() { var doc=document; var imgs=doc.getElementBuTagName("img"); for(var i=0;len=imgs.length,i<len;i++) { imgs[i].title=doc.title+" image "+i; } var msg=doc.getElementById("msg"); msg.innerHTML="Update Complete" }
对循环的优化
for(var i=0;i<values.length;i++) { process(values[i]); }
优化1,后值循环
for(var i=values.length-1;i>=0;i--) { process(values[i]); }
优化2,后侧循环:
var i=values.length-1; if(i>-1) { do{ procrss(values[i]); }while(--i>=0); }
js优化要注意的其他事项:
原生方法较快switch语句较快
位运算符较快
多个变量声明:
var count=5; var color="blue"; var values=[1,2,3]; var now=new Date();
使用单个var声明比多个var声明快很多。
var count=5, color="blue", values=[1,2,3], now=new Date();
插入迭代值:
var name=values[i]; i++;
优化为:
var name=values[i++];
使用数组和对象字面量:
var values=new Array(); values[0]=123; values[1]=456; values[2]=789; var person=new Object(); person.age=29; person.name="zhang"; person.say=function(){ alert(this.name); }
优化:
var values=[123,456,789]; var person={ name:"zhang", age:29, say:function(){ alert(this.name); } };
相关文章推荐
- 《JavaScript学习笔记三》if else及function的使用
- javascript中function的call()函数的使用-----替换当前函数中的当前对象
- jsp和html的区别是什么
- JavaScript公有、私有以及受保护的属性和方法
- 解决fastjson内存对象重复/循环引用json错误
- 如何设计一个数据字典
- 面向对象的Javascript(5):继承
- 面向对象的Javascript(4):重载
- 面向对象的JavaScript(3):私有成员和公开成员
- html5本地存储localStorage 存储json对象存储格式问题
- 面向对象的JavaScript(2):类
- 面向对象的JavaScript(一)命名空间
- JS学习19(Ajax与Comet)
- js 选择器
- 《JavaScript学习笔记二》:网页换肤
- js小结:函数&变量
- js 检测flash 版本
- JavaScript OOP
- fastjson-alibaba
- 怎么取消Eclipse中对JavaScript文件的校