Асинхронная обратная связь UpdatePanel выполняется медленно в Интернете Обозреватель

Предупреждение

Устаревшее и не поддерживаемое классическое приложение Internet Explorer 11 было окончательно отключено путем обновления Microsoft Edge в некоторых версиях Windows 10. Дополнительные сведения см. в разделе Часто задаваемые вопросы о прекращении поддержки программы для настольных компьютеров Internet Explorer 11.

В этой статье описывается обходной путь для решения проблемы, из-за чего возникает задержка при посещении страницы и выборе элемента страницы.

Исходная версия продукта: Интернет-Обозреватель
Исходный номер базы знаний: 2000262

Симптомы

При использовании интернет-Обозреватель для просмотра страницы, содержащей UpdatePanel, после щелчка элемента страницы, инициирующего асинхронную обратную передачу, возникает задержка (часто от 10 до 45 секунд или более). Задержка не возникает при использовании браузеров, отличных от Интернета Обозреватель.

Причина

Метод PageRequestManager's _destroyTree выполняет итерацию по элементам DOM внутри UpdatePanel перед инициализацией асинхронной обратной передачи, чтобы удалить элементы DOM. Конкретная _destroyTree реализация метода в Интернете Обозреватель выполняется медленно при работе с большим деревом DOM в некоторых условиях из-за того, что средство просмотра HTML (mshtml.dll) Интернета Обозреватель сохраняет элементы DOM в памяти.

Обходной путь

Вы можете добавить Приведенный ниже Код JavaScript непосредственно перед закрывающим </body> элементом страницы с задержкой.

<script language="javascript" type="text/javascript">

    function disposeTree(sender, args)
    {
        var elements = args.get_panelsUpdating();
        for (var i = elements.length - 1; i >= 0; i--)
        {
            var element = elements[i];
            var allnodes = element.getElementsByTagName('*'),
                length = allnodes.length;
            var nodes = new Array(length)
            for (var k = 0; k < length;
                {
                    nodes[k] = allnodes[k];
                }
            for (var j = 0, l = nodes.length; j < l;
            {
                var node = nodes[j];
                if (node.nodeType === 1)
                {
                    if (node.dispose && typeof (node.dispose) === "function")
                    {
                        node.dispose();
                    }
                    else if (node.control && typeof (node.control.dispose) === "function")
                    {
                        node.control.dispose();
                    }
                    var behaviors = node._behaviors;
                    if (behaviors)
                    {
                        behaviors = Array.apply(null, behaviors);
                        for (var k = behaviors.length - 1; k >= 0; k--)
                        {
                            behaviors[k].dispose();
                        }
                    }
                }
            }
            element.innerHTML = "";
        }
    }
Sys.WebForms.PageRequestManager.getInstance().add_pageLoading(disposeTree);
</script>

Дополнительная информация

В этом скрипте getElementsByTagName используется метод , который выполняется гораздо быстрее в Обозреватель Интернета, чем исходная реализация.

Эта статья относится только к более ранним версиям asp.net и Internet Обозреватель 8 или более ранних версий.