var obj = document.getElementById("demo");
var start = new Date().getTime();
var arr = [];
for(var i = 0; i100; i){
arr[i] = stri;
}
obj.innerHTML = arr.join("");
var end = new Date().getTime();
alert("用时 "(end - start)" 毫秒");
}
在例子中,我只是用了100次的循环,因为如果用10000次循环的话,浏览器基本上就卡住不动了,但是即使是100次的循环,我们看看下面的执行结果 。
可以看到的是,这简直是一个惊人的结果,仅仅100次的循环,不管是在什么浏览器下,都出现了如此之大的差别,另外我们还发现,在这里,IE6的执行效率居然比起Firefox还要好很多,可见Firefox在页面重绘这方面并没有做一些的优化 。这里还要注意的是,一般影响页面重绘的不仅仅是innerHTML,如果改变元素的样式,位置等情况都会触发页面重绘,所以在平时一定要注意这点 。
4、减少作用域链上的查找次数
我们知道,js代码在执行的时候,如果需要访问一个变量或者一个函数的时候,它需要遍历当前执行环境的作用域链,而遍历是从这个作用域链的前端一级一级的向后遍历,直到全局执行环境,所以这里往往会出现一个情况,那就是如果我们需要经常访问全局环境的变量对象的时候,我们每次都必须在当前作用域链上一级一级的遍历,这显然是比较耗时的,我们看下面的例子:
复制代码 代码如下:
div id="demo"/div
input id="but1" type="button" onclick="func1()" value="https://www.rkxy.com.cn/dnjc/效率低"/
input id="but2" type="button" onclick="func2()" value="https://www.rkxy.com.cn/dnjc/效率高"/
function func1(){
var start = new Date().getTime();
for(var i = 0; i10000; i){
var but1 = document.getElementById("but1");
var but2 = document.getElementById("but2");
var inputs = document.getElementsByTagName("input");
var divs = document.getElementsByTagName("div");
var but1 = document.getElementById("but1");
var but2 = document.getElementById("but2");
var inputs = document.getElementsByTagName("input");
var divs = document.getElementsByTagName("div");
var but1 = document.getElementById("but1");
var but2 = document.getElementById("but2");
var inputs = document.getElementsByTagName("input");
var divs = document.getElementsByTagName("div");
var but1 = document.getElementById("but1");
var but2 = document.getElementById("but2");
var inputs = document.getElementsByTagName("input");
var divs = document.getElementsByTagName("div");
var but1 = document.getElementById("but1");
var but2 = document.getElementById("but2");
var inputs = document.getElementsByTagName("input");
var divs = document.getElementsByTagName("div");
var but1 = document.getElementById("but1");
var but2 = document.getElementById("but2");
var inputs = document.getElementsByTagName("input");
var divs = document.getElementsByTagName("div");
}
var end = new Date().getTime();
alert("用时 "(end - start)" 毫秒");
}
function func2(){
var start = new Date().getTime();
var doc = document;
for(var i = 0; i10000; i){
var but1 = doc.getElementById("but1");
var but2 = doc.getElementById("but2");
var inputs = doc.getElementsByTagName("input");
var divs = doc.getElementsByTagName("div");
var but1 = doc.getElementById("but1");
var but2 = doc.getElementById("but2");
var inputs = doc.getElementsByTagName("input");
var divs = doc.getElementsByTagName("div");
var but1 = doc.getElementById("but1");
var but2 = doc.getElementById("but2");
var inputs = doc.getElementsByTagName("input");
var divs = doc.getElementsByTagName("div");
var but1 = doc.getElementById("but1");
推荐阅读
- 旺旺聊天软件详细介绍
- opporenoace手机价格详细介绍
- opporenoace屏幕多大详细介绍
- 使用glary utilities pro整理优化磁盘碎片的方法步骤
- 爱奇艺弹幕怎么没了详细介绍
- 苹果x怎么截图详细教程
- nfc怎么用详细教程
- 手机内存不足怎么清理详细介绍
- 夜神模拟器怎么卸载详细教程
- 使用ashampoo uninstaller优化系统注册表的方法步骤