JS的速度特别慢,求解,谢谢!
功能描述:一个标题的显示要限制长度,比如150px,多余的用三个省略号替代。代码如下问题是,如果有100个标题,循环执行下面的代码,在IE10里面太慢了,而且很奇怪,第一次是2秒多,后面依次递减,一直到最后一个几毫秒。但是在chrome里面速度特别快每一个都是1毫秒。
后来,我大约发现,问题在于divTemp.innerText = nodeName;var length = divTemp.clientWidth;这里。可能不断填进去的文本,撑开隐藏的div,这个时候是同步的,所以得到新的宽度的时候需要时间,但该如何解决呢,在IE10?
function getShortName(d) {--------------------编程问答-------------------- 用IE10+ F12的JS Profiler功能看看是哪里执行的时间太长造成的。 --------------------编程问答-------------------- 发现一个新的线索,就是当前页面是在iframe里面的,如果单独拿出来,执行,速度很快的,都是1毫秒或者0毫秒,怎么办? --------------------编程问答-------------------- 就是这一句,divTemp.clientWidth,特别耗时,我把循环去掉,单写这一句都很耗时间,注意,我这个当前页面是在iframe里面的 --------------------编程问答-------------------- 为啥要循环?
var now_time = new Date();
var nodeName = d.name;
var divTemp = document.getElementById("divHidden");
divTemp.innerText = nodeName;
var length = divTemp.clientWidth;
if (length <= 150) {
return nodeName;
}
var len = nodeName.length;
var currentString = "";
var previousString = nodeName.substring(0,19);
for (index = 30; index < len; index++) {
currentString = previousString + nodeName.substring(index, index + 1);
divTemp.innerHTML = currentString + "...";
length = divTemp.clientWidth;
if (length > 150) {
previousString += "...";
break;
}
previousString = currentString;
}
var now_time2 = new Date();
var gap_time = now_time2.getTime() - now_time.getTime();
console.log(d.name + " " + gap_time);
return previousString;
}
难道是填进去一个字符,然后看看宽度,然后在填进去一个在看看?
你填一个进去,IE10就渲染一次,再填一个进去,又渲染一次。
IE10 比较不给力,哈。
补充:.NET技术 , ASP.NET