想做的页面是读取扫描器扫描的图片,通过setInterva方法去反复调用读取图片的function(这个函数已实现)函数,然后动态添加节点放图片,可是setInterva反复调用函数会非常消耗内存,所以导致out of memory问题,希望大神们给点意见,新手……想要实现的效果是:扫描器扫一张,页面加一张图片,但是这个不可能,只希望做到扫描器扫3张,页面加三张。只限jsp中操作,无任何后台。函数
调试欢乐多
--------------------------------------------
停止计时器
向后台发异步请求
--------------------------------------------
请求成功回调,新建DOM,加载节点
全部完成后再次启用定时器你是这么做的吗?
--------------------------------------------
停止计时器
向后台发异步请求
--------------------------------------------
请求成功回调,新建DOM,加载节点
全部完成后再次启用定时器你是这么做的吗? 什么叫像后台发异步请求,没有任何后台代码,只是单纯的jsp页面,就是独立与项目的单独访问的jsp页面。 而且所读取的图片是本地图片,不是项目中的,一天一个人可以扫描一万多张不为过吧。
--------------------------------------------
停止计时器
向后台发异步请求
--------------------------------------------
请求成功回调,新建DOM,加载节点
全部完成后再次启用定时器你是这么做的吗? 什么叫像后台发异步请求,没有任何后台代码,只是单纯的jsp页面,就是独立与项目的单独访问的jsp页面。 而且所读取的图片是本地图片,不是项目中的,一天一个人可以扫描一万多张不为过吧。
相对于javascript称为前端
你jsp不算是后台吗。。你不是AJAX请求获取图片地址然后新建<img src="imgaddress" /> 这样的DOM节点吗
http://www.cnblogs.com/rainman/archive/2008/12/26/1363321.html
--------------------------------------------
停止计时器
向后台发异步请求
--------------------------------------------
请求成功回调,新建DOM,加载节点
全部完成后再次启用定时器你是这么做的吗? 什么叫像后台发异步请求,没有任何后台代码,只是单纯的jsp页面,就是独立与项目的单独访问的jsp页面。 而且所读取的图片是本地图片,不是项目中的,一天一个人可以扫描一万多张不为过吧。
相对于javascript称为前端
你jsp不算是后台吗。。你不是AJAX请求获取图片地址然后新建<img src="imgaddress" /> 这样的DOM节点吗只有javascript和jsp,得到图片的方法是一个控件,这个没关系,我的理解是:读取图片,显示图片方法的时间应该是大于1秒的,setInterva的间隔时间是1秒,他不管方法有没有执行完,他只是再次调用,所以读取图片,显示图片方法会一直排队等待执行,刚开始只是速度变慢,再过一会就会出现内存溢出问题了。
--------------------------------------------
停止计时器
向后台发异步请求
--------------------------------------------
请求成功回调,新建DOM,加载节点
全部完成后再次启用定时器你是这么做的吗? 什么叫像后台发异步请求,没有任何后台代码,只是单纯的jsp页面,就是独立与项目的单独访问的jsp页面。 而且所读取的图片是本地图片,不是项目中的,一天一个人可以扫描一万多张不为过吧。
相对于javascript称为前端
你jsp不算是后台吗。。你不是AJAX请求获取图片地址然后新建<img src="imgaddress" /> 这样的DOM节点吗只有javascript和jsp,得到图片的方法是一个控件,这个没关系,我的理解是:读取图片,显示图片方法的时间应该是大于1秒的,setInterva的间隔时间是1秒,他不管方法有没有执行完,他只是再次调用,所以读取图片,显示图片方法会一直排队等待执行,刚开始只是速度变慢,再过一会就会出现内存溢出问题了。
呵呵,原来你都明白原因了,那就直接换成setTimeout再试试吧
setInterval是不论上次函数有无执行完,中断1秒后执行下次函数,是不能保证线程执行顺序的。
//setTimeout
var st = setTimeout(function(){
console.log("do something big");//函数主体
st = setTimeout(arguments.callee,1000)//下次执行
},1000)
//setInterval
var st = setInterval(function(){
console.log("do something big")
},1000)
或者写下伪码说明你要做的是什么操作,会不会有大量dom节点添加?让有心人帮你猜猜原因,你上面的扫描一万张什么的,没人知道你要做什么的。
溢出不会和 settimeout 或者 setInterva 本身有关系直接上代码
溢出不会和 settimeout 或者 setInterva 本身有关系直接上代码不好意思 企业项目 代码得有所保密 不能公开
function createXmlHttpRequest(){
if(window.ActiveXObject){ //如果是IE
return new ActiveXObject("Microsoft.XMLHTTP");
}else if(window.XMLHttpRequest){ //非IE浏览器
return new XMLHttpRequest();
}
}
function onSaomiao(){
var url = "读取扫描图片的url地址";
//1.创建XMLHttpRequest组建
xmlHttpRequest = createXmlHttpRequest();
//2.设置回调函数
xmlHttpRequest.onreadystatechange = huidiaofun;
//3.初始化XMLHttpRequest组建
xmlHttpRequest.open("post",url,true);
//4.发送请求
xmlHttpRequest.send(null);
}
//回调函数
function huidiaofun(){
if(xmlHttpRequest.readyState == 4 && xmlHttpRequest.status == 200){
var b = xmlHttpRequest.responseText;
st = setTimeout("onSaomiao()",1000)
}
} var st = setTimeout("onSaomiao()",1000)只是大概写的,你自己调试调试看
"通过setInterva方法去反复调用读取图片",你页面那不是有很多 图片了,你是IE6?我以前在IE6下碰过太频繁加过载生成DOM产生这样提示
你可以所当前的 显示打印的内容拼好HTML,一下 innerHTML进去,把原来的内容冲掉
"通过setInterva方法去反复调用读取图片",你页面那不是有很多 图片了,你是IE6?我以前在IE6下碰过太频繁加过载生成DOM产生这样提示
你可以所当前的 显示打印的内容拼好HTML,一下 innerHTML进去,把原来的内容冲掉我用的ie7 恩 我用的是 var thumImg=document.createElement("img"); //放缩略图
var thumnaDiv=document.createElement("div"); //放缩略图名字
thum.setAttribute("id","thumdiv");
thumImg.setAttribute("id","thumImg");
thumnaDiv.setAttribute("id","thumnaDiv");
$("#thumImgs").find("img").css("border","0"); //把img标签的红框清空
thumnaDiv.innerText=getpicName(srcpath,"1"); //缩略图的名字
thumImg.src=srcpath; 这样的方法添加节点的 再次添加时会清空跟节点下的东西
你调用 setInterval(CollectGarbage, 10000); 这命令 清一下内存
"通过setInterva方法去反复调用读取图片",你页面那不是有很多 图片了,你是IE6?我以前在IE6下碰过太频繁加过载生成DOM产生这样提示
你可以所当前的 显示打印的内容拼好HTML,一下 innerHTML进去,把原来的内容冲掉我用的ie7 恩 我用的是 var thumImg=document.createElement("img"); //放缩略图
var thumnaDiv=document.createElement("div"); //放缩略图名字
thum.setAttribute("id","thumdiv");
thumImg.setAttribute("id","thumImg");
thumnaDiv.setAttribute("id","thumnaDiv");
$("#thumImgs").find("img").css("border","0"); //把img标签的红框清空
thumnaDiv.innerText=getpicName(srcpath,"1"); //缩略图的名字
thumImg.src=srcpath; 这样的方法添加节点的 再次添加时会清空跟节点下的东西
这部分简单点,直接拼接图片的<img src="" border=0>这样的用innerHTML插入
"通过setInterva方法去反复调用读取图片",你页面那不是有很多 图片了,你是IE6?我以前在IE6下碰过太频繁加过载生成DOM产生这样提示
你可以所当前的 显示打印的内容拼好HTML,一下 innerHTML进去,把原来的内容冲掉我用的ie7 恩 我用的是 var thumImg=document.createElement("img"); //放缩略图
var thumnaDiv=document.createElement("div"); //放缩略图名字
thum.setAttribute("id","thumdiv");
thumImg.setAttribute("id","thumImg");
thumnaDiv.setAttribute("id","thumnaDiv");
$("#thumImgs").find("img").css("border","0"); //把img标签的红框清空
thumnaDiv.innerText=getpicName(srcpath,"1"); //缩略图的名字
thumImg.src=srcpath; 这样的方法添加节点的 再次添加时会清空跟节点下的东西
这部分简单点,直接拼接图片的<img src="" border=0>这样的用innerHTML插入总体来说我觉得是图片资源过大引起的,在牛的浏览器也不能加载400多张甚至一万张图片吧