场景描述:
一个用于交易的web客户端,浏览器需要每一秒都需要postback,获取最新的行情。
用window.setInterval("function",1000);
function 用jquery的ajax方法。
$.ajax(
{
type: "GET",
url: "url"
cache: false,
dataType: "json",
error: function (jqXHR, textStatus, errorThrown) {
//发生错误
clearInterval(refreshHq);
// alert(jqXHR);
},
complete: function (jqXHR, TS) {
jqXHR= null
},
success: function (data, textStatus) {
}});
注意:
一定要在complete方法中将jqXHR(xmlHttpRequset)对象设置null,否则内存会越来越大。
由于每一次数据回来之后,都需要删除原来的数据,然后重新复制。
代码如下:
parent.empty(); var newtemp = template.replace("{0}", jsonob[i].Commodity.CommodityName).replace("{1}", jsonob[i].SellPrice.toFixed(2).N()).replace("{2}", jsonob[i].BuyPrice.toFixed(2).N()).replace("{3}", jsonob[i].High.toFixed(2).N()).replace("{4}", jsonob[i].Low.toFixed(2).N()) if (i % 2 == 0) { parent.append("<li class="youBJ" id="" + jsonob[i].CommodityID + ""> " + newtemp + "</li>"); } else { parent.append("<li id="" + jsonob[i].CommodityID + "">" + newtemp + "</li>"); }
但是在IE8下,内存依然在增长。从几十M增加到几百M
修改代码如下:
var newtemp = template.replace("{0}", jsonob[i].Commodity.CommodityName).replace("{1}", jsonob[i].SellPrice.toFixed(2).N()).replace("{2}", jsonob[i].BuyPrice.toFixed(2).N()).replace("{3}", jsonob[i].High.toFixed(2).N()).replace("{4}", jsonob[i].Low.toFixed(2).N()); var element = document.createElement("li"); element.id = jsonob[i].CommodityID; element.innerHTML = newtemp; if (i % 2 == 0) { element.className = "youBJ"; } parent[0].appendChild(element);
这样修改后,所有浏览器都没有在发生内存泄露问题。
这是今天所解决的项目问题,记录一下。