日期:2014-05-16  浏览次数:20341 次

JS代码执行效率和资源占用检查和改进!!!
urldata数据很多的时候,浏览器执行速度比较慢,有时会卡死。麻烦大家看看,有什么比较好的改进办法?

IE卡死的时候这样提示:IEXPLORE.EXE [4068]中发生未处理的 WIN32 异常。对此异常的实时调试失败,错误为:安装的调试器都没有启用实时调试。在 VISUAL STUDIO 中,可以从 “工具“/“选项”/“调试”/“实时”启用实时调试。

<script type="text/javascript">
var urldata = 
[
{"url":"http://www.xxx.com/"}
,{"url":"http://www.xxx.com/"}
,{"url":"http://www.xxx.com/"}
,{"url":"http://www.xxx.com/"}
,{"url":"http://www.xxx.com/"}
……………………
]
var count = 0;
var timeID = null;
function Output() {
$("ifm").src = urldata[count].url;
count++;
timeID = setTimeout("Output();",15000);
if (count == 10000) {
clearTimeout(timeID);
alert("ok");
}
}
Output();
</script>

------解决方案--------------------
你的数据量太大了。
1、把数据分割,每次只加载部分数据,处理过的就清空.
2、或者执行部分数据后(1000条),然后地址栏传参(传递当前的count),打开新的ie关闭原来的ie,在页面里获取参数count,然后在新的ie里由count的下标再开始执行代码.
你是要实现什么?在一个ifm里不停的打开网站?
------解决方案--------------------
关键在于你的数据量太大了。
------解决方案--------------------
HTML code
<div id=mytest></div>
<script type="text/javascript"> 
var urldata =  
[ 
{"url":"http://www.xxx.com/"} 
,{"url":"http://www.xxx.com/"} 
,{"url":"http://www.xxx.com/"} 
,{"url":"http://www.xxx.com/"} 
,{"url":"http://www.xxx.com/"} 
…………………… 
] 
var count = 0; 
var timeID = null; 
function Output() {[color=#FF0000] 
clearTimeout(timeID); 
$("mytest").innerHTML = "<iframe src='"+urldata[count].url+"'></iframe>"[/color]
//这样试试看行不行,并且看看有没有其他原因引起ie缓慢。
//$("ifm").src = urldata[count].url; 
count++; 
timeID = setTimeout("Output();",15000); 
if (count == 10000) { 
alert("ok"); 
} 
} 
Output(); 
</script>

------解决方案--------------------
if (count == 10000) { 
clearTimeout(timeID); 
alert("ok"); 


由于你是10000次以后才释放内存,也就是说在你达到10000次以前,你之前的所有动作一直都在执行,都在占用内存,占用满了自然会导致卡死现象
------解决方案--------------------
探讨
if (count == 10000) {
clearTimeout(timeID);
alert("ok");
}

意思就是运行到最后一个,清除seTtimeout计时器,再alert提示一下。

------解决方案--------------------
你可以试一下。
------解决方案--------------------
如果仅有url元素,建议用数组吧 ,没必要使用 json 序列
------解决方案--------------------
数组就直接

var UrlArr = []; 这样的啊
------解决方案--------------------
innerHTML的iframe得用document.createElement("iframe")创建然后用appendChild加上去才可以。