我有一个asp.net网页,它使用Jquery自动完成功能,通过在每个字段上使用class =“cur”来显示许多文本框(超过> 75个文本框)上的选项列表。
我注意到,随着IE 9-11中每次刷新页面,内存每次增加3-5Mb(甚至更多)。一旦达到250,000K或更高,性能会受到影响,一切都会慢慢减慢(输入文本框,刷新等需要几秒钟)
如果我从页面中取出自动完成功能,那么它工作正常(几乎没有增加IE的内存)。
所以我假设由于jquery自动完成功能而发生内存泄漏。
在下面找到我正在使用的jquery代码(我缩短了货币期权的数量)。
所以问题是,如何在使用jquery自动完成时避免内存泄漏?
更新:请注意,我在Sys.Application.add_load(function()中有jquery脚本,因为它只运行第一个回发,之后所有自动完成功能都将停止工作。
Sys.Application.add_load(function () {
$('.cur').each(function () {
var currencies = [
{ value: 'USA dollar', data: 'USD' },
{ value: 'European euro', data: 'EUR' },
{ value: 'South African rand', data: 'ZAR' },
{ value: 'Mexican peso', data: 'MXN' },
{ value: 'Japanese yen', data: 'JPY' },
{ value: 'Indian rupee', data: 'INR' },
{ value: 'Indonesian rupiah', data: 'IDR' },
{ value: 'Chinese renminbi', data: 'CNY' },
{ value: 'Canadian dollar', data: 'CAD' },
{ value: 'Brazilian real', data: 'BRL' },
{ value: 'Australian dollar', data: 'AUD' },
{ value: 'New Zealand dollar', data: 'NZD' },
{ value: 'Afghan afghani', data: 'AFN' },
{ value: 'Albanian lek', data: 'ALL' },
{ value: 'Vietnamese dong', data: 'VND' },
...many more currencies
{ value: 'Yemeni rial', data: 'YER' },
{ value: 'Zambian kwacha', data: 'ZMK' },
{ value: 'Zimbabwean dollar', data: 'ZWD' },
];
var txt = $(this);
txt.autocomplete({
source: currencies,
delay: 0,
minLength: 0,
select: function (event, ui) { $(this).val(ui.item.data); return false },
change: function (event, ui) { $(this).trigger("change") }
}).bind('focus', function () {
$(this).autocomplete("search");
})
});
}
答案 0 :(得分:0)
您使用ASP.net
我相信你的问题更多地与ASP.net缓存有关,而不是与javascript有关。
ASP.net页面缓存。
一段时间以来,我一直看着这个,所以不记得具体细节。
但它的某些方面;表单帖子值缓存到页面中。
请确认是这个还是不是?
当您使用ASP.net比我更多时,如果您是一位资深的ASP.net用户,那么您将确切地知道我在谈论什么,如果没有,我们将不得不谷歌和挖掘这个起来...(在我身边一个快速的谷歌没有找到我想要的东西)。
<强>更新强>
在asp.net中的 Google ViewState ,对我而言,这很可能是您遇到的问题。 发现它: http://www.freshegg.co.uk/blog/web-design/responsive-design/creating-lean-fast-web-pages-view-state<强>更新强>
currencies = [
{ value: 'USA dollar', data: 'USD' },
{ value: 'European euro', data: 'EUR' },
...many more currencies
];
Sys.Application.add_load(function () {
$('.cur').each(function () {
var txt = $(this);
txt.autocomplete({
source: currencies,
delay: 0,
minLength: 0,
select: function (event, ui) { txt.val(ui.item.data); return false },
change: function (event, ui) { txt.trigger("change") }
}).bind('focus', function () {
txt.autocomplete("search");
})
});
}
}