- 由于JS是一种解释型语言,执行速度要比编译型语言慢得多
- 注作用域
访问全局变量总是比访问局部变量要慢,因为需要遍历作用域链。只要能减少花费在作用域链上的时间,就能增加脚本的整体性能
在ES6 按理来说 变量申明最好是:
const > let > var
- 注作用域
- 避免全局查找
var imgs = document.getElementByTagName("img");
for(var i = 0, len = imgs.length; i < len; i++) {
imgs[i].title = document.title + " image " + i;
}
var doc = document;
var imgs = doc.getElementByTagName("img");
for(var i = 0, len = imgs.length; i < len; i++) {
imgs[i].title = doc.title + " image " + i;
}
- 避免with语句(with会创建自已的作用域,因此会增加其中执行代码的作用域的长度)
- 优化循环
循环是编程中最常见的结构,优化循环是性能优化过程中很重要的一部分。一个循环的基本优化步骤如下:
1) 减值迭代——大多数循环使用一个从0开始,增加到某个特定值的迭代器。在很多情况下,从最大值开始,在循环中不断减值的迭代器更加有效
2) 简化终止条件——由于每次循环过程都会计算终止条件,故必须保证它尽可能快,即避免属性查找或其它O(n)的操作。
3) 简化循环体——循环体是执行最多的,故要确保其被最大限度地优化。确保没有某些可以被很容易移出循环的密集计算。
4) 使用后测试循环——最常用的for和while循环都是前测试循环,而如do-while循环可以避免最初终止条件的计算,因些计算更快。
如: - 在循环中 正确使用 break 和 continue 能够有效地提高代码效率
for(var i = 0; i < values.length; i++) {
process(values[i]);
}
优化1:简化终止条件
for(var i = 0, len = values.length; i < len; i++) {
process(values[i]);
}
优化2:使用后测试循环(注意:使用后测试循环需要确保要处理的值至少有一个)
var i = values.length - 1;
if(i > -1) {
do {
process(values[i]);
}while(--i >= 0);
}
- 在ES6中 使用 for…of 更加方便, 可以结合Object.keys()和Object.values()遍历对象
- 多个变量声明
var i = 1;
var j = "hello";
var arr = [1,2,3];
var now = new Date();
优化
var i = 1,
j = "hello",
arr = [1,2,3],
now = new Date();
var name = values[i];
i++;
优化
var name = values[i++];
尽量使用字面量的形式来创建我们的数组和对象
var a = [1, "hello", 45];
var o = {
name : "bill",
age : 13
};