Почему производительность на веб-странице так отличается между IE и WebClient? (В ВИДЕ ДЕРЕВА!!!) - PullRequest
2 голосов
/ 02 марта 2010

Я видел несколько похожих постов, но ничего похожего на это ...

У меня есть сайт (Sharepoint). Когда я получаю доступ к определенной странице, на которой есть много пользовательских веб-частей, загрузка страницы занимает ~ 30 секунд. Я использовал Firebug и подтвердил, что сервер долго работает (во вкладке «Сеть» временная шкала веб-страницы показывает ~ 30 секунд «ожидания»). Я также уверен, что JavaScript не будет работать вечно, так как отключение JavaScript не влияет на время загрузки.

Однако, если я использую только стандартный .net WebClient и захожу на страницу, загрузка занимает всего ~ 2 секунды.

Еще более странно то, что некоторые клиенты работают быстрее (не то, что я ожидал бы, если бы это была проблема на стороне сервера). Но некоторые клиенты (например, IE 8 на XP) просто зависают, пока не произойдет ошибка на стороне сервера.

Я также пытался отключить файлы cookie, полагая, что что-то при создании файла cookie вызывало проблему, но по-прежнему не получалось быстро открыть страницу.

Я решил стать экспериментальным и использовал скрипач. Если я удалил строку User Agent из заголовка, результаты вернулись довольно быстро, однако тело ответа было значительно меньше. Я слишком новичок в веб-разработке, чтобы понять, что это значит.

На данный момент я относительно уверен, что это действительно проблема на стороне сервера.

Если кто-то может помочь или пролить немного света, это очень ценится.

Обновление: Хорошо, после сравнения содержимого двух результатов, одного с пользовательским агентом IE (или чего-либо в этом отношении) и одного без пользовательского агента в заголовке, есть очень большая разница (примерно в 3 раза больше контента в заголовочный файл user-agent).

Веб-части содержат большое количество объектов System.Web.UI.WebControls.Treeview. При щелчке «дескриптора» древовидного списка отображается таблица с данными. В результатах, где был предоставлен пользовательский агент, эти таблицы заполняются данными (и их совсем немного, эта веб-часть крайне неэффективна).

На странице, где не указан пользовательский агент, все теги в таблицах заменяются якорями с вызовами javascript.

Итак, я думаю, теперь ясно, что элемент управления TreeView в ASP.NET обрабатывает вывод по-разному, в зависимости от агента пользователя в заголовке.

При этом, кажется (без дальнейшего изучения), что javascript, который я вижу, внедренный вместо данных, является AJAX-вызовом, чтобы получить данные и отобразить их больше "когда это необходимо", и это здорово. Предполагая, что это так, теперь мне просто нужно знать, как сказать элементу управления TreeView делать это все время (у меня есть доступ к исходному коду).

Окончательное обновление: После более интенсивной отладки и профилирования профориентации я пришел к выводу, что между довольно большими объемами данных и невероятно плохой производительностью объекта ASP.NET TreeView я Я потрошу это в пользу контроля Telerik Grid. Я надеялся, что смогу просто подправить несколько вещей, но чем больше я изучал это, тем больше обнаруживал, что TreeView просто не очень эффективен.

Спасибо всем за помощь.

Ответы [ 3 ]

3 голосов
/ 02 марта 2010

Страница Sharepoint, вероятно, прослушивает браузер User-Agent и выполняет дорогостоящие операции для поддерживаемых браузеров.

2 голосов
/ 02 марта 2010

Я думаю, что SP смотрит на строку user-agent и выполняет дополнительную загрузку, если присутствуют определенные части. Другая вещь, которую нужно проверить, - это проверить, отправляется ли JS (для версии веб-клиента), и есть ли в IE больше обратных вызовов, чем с другими клиентами.

Если я правильно помню (некоторое время), что для IE идентифицирующие агенты SP отправит дополнительный клиентский JavaScript-код для обработки взаимодействий с формами и доступа к таким вещам, как офис и выполнение контроля версий. Я не уверен, правда ли это или нет.

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

0 голосов
/ 02 марта 2010

Это плохой вопрос, но вы уверены, что измеряете только время загрузки тела HTML? Браузер загружает HTML-страницу И все ее ресурсы: CSS, JavaScript и изображения. WebClient загружает только HTML-страницу, так как он не анализирует и не может ее проанализировать.

-Oisin

...