当前位置:编程学习 > C#/ASP.NET >>

JS的速度特别慢,求解,谢谢!

功能描述:一个标题的显示要限制长度,比如150px,多余的用三个省略号替代。代码如下
问题是,如果有100个标题,循环执行下面的代码,在IE10里面太慢了,而且很奇怪,第一次是2秒多,后面依次递减,一直到最后一个几毫秒。但是在chrome里面速度特别快每一个都是1毫秒。
后来,我大约发现,问题在于divTemp.innerText = nodeName;var length = divTemp.clientWidth;这里。可能不断填进去的文本,撑开隐藏的div,这个时候是同步的,所以得到新的宽度的时候需要时间,但该如何解决呢,在IE10?
function getShortName(d) {
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+ F12的JS Profiler功能看看是哪里执行的时间太长造成的。 --------------------编程问答-------------------- 发现一个新的线索,就是当前页面是在iframe里面的,如果单独拿出来,执行,速度很快的,都是1毫秒或者0毫秒,怎么办? --------------------编程问答-------------------- 就是这一句,divTemp.clientWidth,特别耗时,我把循环去掉,单写这一句都很耗时间,注意,我这个当前页面是在iframe里面的 --------------------编程问答-------------------- 为啥要循环?

难道是填进去一个字符,然后看看宽度,然后在填进去一个在看看?

你填一个进去,IE10就渲染一次,再填一个进去,又渲染一次。

IE10 比较不给力,哈。
补充:.NET技术 ,  ASP.NET
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,