Я захватываюсь в прерывании UpdatePanel

Уточнение ответа JSmyth:

console.logCopy = console.log.bind(console);

console.log = function()
{
    if (arguments.length)
    {
        var timestamp = new Date().toJSON(); // The easiest way I found to get milliseconds in the timestamp
        var args = arguments;
        args[0] = timestamp + ' > ' + arguments[0];
        this.logCopy.apply(this, args);
    }
};

Это:

  • показывает метки времени с миллисекундами
  • предполагает строку формата в качестве первого параметра для .log
6
задан Greg 30 June 2009 в 21:03
поделиться

5 ответов

Невозможно обойтись без публикации всей страницы с помощью UpdatePanels. Вместо редизайна приложения вот несколько вещей, которые я бы попробовал:

  1. Отключить состояние просмотра для любых элементов управления, которые в нем не нуждаются.
  2. Установите UpdateMode = "Conditional" для ваших пользовательских элементов управления. Это не обойдется без публикации всей страницы, но немного сократит время отрисовки. В браузере будет обновляться только содержимое определенной UpdatePanel.
  3. Убедитесь, что ваши пользовательские элементы управления имеют короткие идентификаторы. То, как веб-формы ASP.NET именуют элементы управления в HTML, эти идентификаторы довольно часто повторяются, если у вас много серверных элементов управления. То же самое касается именования заполнителей главной страницы. Однажды я сократил большую страницу до половины, переименовав пользовательские элементы управления и заполнители.
8
ответ дан 10 December 2019 в 00:42
поделиться

Поскольку вы являетесь пользователем DevExpress, вы можете подумать о том, чтобы потратить немного времени на изучение их CallbackPanel , которая позволит вам выполнять асинхронную обработку без накладных расходов на UpdatePanel.

В качестве альтернативы (кто-нибудь, пожалуйста, поправьте меня, если я ошибаюсь), но если все обратных передач являются асинхронными (т.е. в UpdatePanel), теоретически невозможно отключить ViewState для всей страницы (в директиве Page) без негативных последствий? Придется совершенно сбиться с курса, но попробовать стоит.

2
ответ дан 10 December 2019 в 00:42
поделиться

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

(Вы заметите, что я использую термины «действие» и «представление» - да, я Я фанат MVC. Ситуация, в которой вы находитесь, типична для беспорядка, в который легко попасть, используя WebForms и элементы управления ASP.NET AJAX.)

0
ответ дан 10 December 2019 в 00:42
поделиться
  • Должно быть, я что-то упускаю. Почему ваша панель обновлений перезагружает всю страницу. Смысл панели обновлений - обновлять только то, что находится на этой панели, не так ли? Спасибо за объяснение. Думаю, мы говорим о репосте страницы, а не о перерисовке панели, как я думал.

  • Попробуйте отключить ViewState, особенно для сеток.

  • Какие элементы управления чаще всего используются на вашей странице? Попробуйте заменить их своим собственным облегченным UserControl или Server Control, который не использует ViewState или ControlState
0
ответ дан 10 December 2019 в 00:42
поделиться

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

Пусть все ваши страницы являются производными от BasePage.cs выглядит так

public class BasePage : System.Web.UI.Page
{
    protected override void SavePageStateToPersistenceMedium(object viewState)
    {
        string vsKey = String.Format("VIEWSTATE_{0}_{1}_{2}", base.Session.SessionID, Request.RawUrl, DateTime.Now);
        Session.Add(vsKey, viewState);
        ClientScript.RegisterHiddenField("__VIEWSTATE_KEY", vsKey);
    }

    protected override object LoadPageStateFromPersistenceMedium()
    {
        string vsKey = Request.Form["__VIEWSTATE_KEY"];
        return Session[vsKey];
    }
}

Теперь у вас есть ключ к сеансу данных состояния просмотра вместо состояния просмотра в вашем коде ...

Для меня работает как шарм на веб-сайте с 1000-1200 посетителей в день.

0
ответ дан 10 December 2019 в 00:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: