javascript循环过多造成浏览器假死状况,如何解决? 如果是代码问题,可以优化,否则就用setTimeout进行0延迟,但多数是代码问题了,贴代码出来吧。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 会出现这种情况应该是设计问题或者算法问题了,有个不是办法的办法,用setInterval函数,间隔一段时间运行一次循环体内的代码,这样就不会死了。不过这样会有同步问题。还是应该要重新思考下设计。 在循环过程中,尽量不要读写页面元素.例如for(i=0;i<input.value;i++){...}这样就不好,每次都要读一次 input 里的东西.改为v = input.value;for(i=0;i<v;i++){...}这样会快很多 请不要说设计问题,数据量非常大的时候,设计再好,也会有很大的运算量。代码很简单,因为一些原因不能将代码完全写在这里,还请大家见谅。代码大概情况:str = [];strLength = 0;for(var i = 0;i < NUM1;i++) for(var j = 0;j < NUM1;j++) str[strLength++] = DATA[i].data[j];tempStr = str.join("");NUM1很大10^4以上,NUM2不是很大100以内这样是否能优化算法?不能的话是否可以不让浏览器假死? 还有DATA[i].data[j]不能join因为要其前后加一些判断 "请不要说设计问题,数据量非常大的时候,设计再好,也会有很大的运算量。"-----数据量很大,不一定要一次下载或显示在客户端,可以分页显示另:七楼的代码还是有一到两成的改进空间的:<script>var DATA = new Array(1000);DATA[500]=[]DATA[500].data=new Array(100);DATA[500].data[50]="1";var NUM1=1000;var NUM2=100;function fun1(){str = []; strLength = 0; for(var i = 0;i < NUM1;i++) for(var j = 0;j < NUM2;j++) str[strLength++] = DATA[500].data[50]; return str.join(""); }function fun2(){str = []; strLength = 0; for(var i = 0;i < NUM1;i++) { var tempData=DATA[500].data; for(var j = 0;j < NUM2;j++) str[strLength++] = tempData[50]; }return str.join(""); }var d0=new Date();fun1();var d1=new Date();fun2();var d2=new Date();alert((d1-d0)+"\n"+(d2-d1));</script> 用setTimeout外带个延时计数器 系统崩溃前再大的数据量也卡不死 坏处是 慢了点var i=0,n=16;//n根据循环执行内容的效率n可以适当改大点。不过好像没必要低于16貌似js引擎的心跳速率是16。function aac(){ if(i++<1000000000){window.status=i;setTimeout(aac,n);}}aac(); Google Map Api使用Soap协议吗 求救,关于alert 难题:如何用script知道自己页面是否处于 激活 状态 js 如何在日期上加上一天,如“2006-07-04”加上1天 关于input控件文字提示问题 在IE中链接到可可执行文件 求屏蔽右键的代码和屏蔽状态栏显示连接的javascript代码 有没有更好的script调试器,试了一下microsoft script debugger,不太爽,查看变量还得通过command窗口 求大神帮忙,为啥360浏览器有时候加载不出script标签? 请教这样正则表达式如何写 location 与 document.title的冲突
例如
for(i=0;i<input.value;i++){
...
}
这样就不好,每次都要读一次 input 里的东西.
改为
v = input.value;
for(i=0;i<v;i++){
...
}
这样会快很多
代码很简单,因为一些原因不能将代码完全写在这里,还请大家见谅。
代码大概情况:
str = [];
strLength = 0;
for(var i = 0;i < NUM1;i++)
for(var j = 0;j < NUM1;j++)
str[strLength++] = DATA[i].data[j];
tempStr = str.join("");NUM1很大10^4以上,NUM2不是很大100以内这样是否能优化算法?不能的话是否可以不让浏览器假死?
-----数据量很大,不一定要一次下载或显示在客户端,可以分页显示另:七楼的代码还是有一到两成的改进空间的:
<script>
var DATA = new Array(1000);
DATA[500]=[]
DATA[500].data=new Array(100);
DATA[500].data[50]="1";var NUM1=1000;
var NUM2=100;
function fun1(){
str = [];
strLength = 0;
for(var i = 0;i < NUM1;i++)
for(var j = 0;j < NUM2;j++)
str[strLength++] = DATA[500].data[50];
return str.join("");
}function fun2(){
str = [];
strLength = 0;
for(var i = 0;i < NUM1;i++) {
var tempData=DATA[500].data;
for(var j = 0;j < NUM2;j++)
str[strLength++] = tempData[50];
}
return str.join("");
}
var d0=new Date();
fun1();
var d1=new Date();
fun2();
var d2=new Date();alert((d1-d0)+"\n"+(d2-d1));</script>
function aac()
{
if(i++<1000000000){window.status=i;setTimeout(aac,n);}
}
aac();