使用Jquery自动完成时,IE11内存泄漏(asp.net)

时间:2015-10-17 10:46:11

标签: jquery asp.net performance internet-explorer autocomplete

我有一个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");
        })
    });

}

1 个答案:

答案 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");
            })
        });
    }
}