浏览器内存泄露问题

场景描述:

  一个用于交易的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);

这样修改后,所有浏览器都没有在发生内存泄露问题。

这是今天所解决的项目问题,记录一下。

posted @ 2013-11-30 23:26  有梦想不放弃  阅读(242)  评论(1编辑  收藏  举报