Wasteful Ajax Загрузка страницы - PullRequest
3 голосов
/ 15 мая 2010

Я начал новую работу, и часть проекта, над которым я работаю, имеет очень странную структуру. Каждая страница является страницей .Net aspx, и она загружается просто отлично, но на самом деле ничего не делается во время загрузки. Все действительно загружается из обработчика jquery document.onready.

Что еще более ... интересно ... это то, что обработчик onready вызывает некоторые вызовы ajax, которые сбрасывают целые страницы .aspx в div на странице, но сначала он удаляет несколько частей возвращаемой страницы. Это «волшебный» скрипт, который предыдущий программист выполнял на всех возвращенных html от своих вызовов ajax:

function CleanupResponseText(responseText, uniqueName) {
    responseText = responseText.replace("theForm.submit();", "SubmitSubForm(theForm, $(theForm).parent());");
    responseText = responseText.replace(new RegExp("theForm", "g"), uniqueName);
    responseText = responseText.replace(new RegExp("doPostBack", "g"), "doPostBack" + uniqueName);
    return responseText;
}

Затем он перехватывает любой вид обратной передачи формы и запускает свою собственную функцию отправки формы:

function SubmitSubForm(form, container) {
//ShowLoading(container);
$(form).ajaxSubmit( {
            url: $(form).attr("action"),
            success: function(responseText) {
                $(container).html(CleanupResponseText(responseText, form.id));
                $("form", container).css("margin-top", "0").css("padding-top", "0");
                //HideLoading(container);
            }
        }
    );
}

Неужели я не думаю, что это менее чем оптимально? Я имею в виду, как браузер извлекает html, head и другие теги, которые не имеют ничего общего с тем, что вы действительно пытаетесь вставить в этот div?

Кроме того, он возвращает такие вещи, как элементы управления asp: gridview и связанное с ним представление, которое может быть довольно большим, если его набор данных большой.

Кто-нибудь видел это раньше?

Ответы [ 3 ]

1 голос
/ 15 мая 2010

... и он отлично загружается ...

Нет проблем, не беспокойтесь :-) Не то чтобы я выбрал этот подход.

Однако, чтобы ответить на этот вопрос: современные веб-браузеры просто отбрасывают недопустимые теги HTML для данного контекста (HTML / HEAD / BODY не летают внутри DIV ;-), в то время как делает все возможное добавить все, что можно. Таким образом, несмотря на то, что браузер уродлив и полагается на детали реализации, все усилия браузера делают это возможным для широкого диапазона входных данных. YMMV.

1 голос
/ 15 мая 2010

Ранее, в 2006 году, когда я впервые изучил Ajax, я использовал его для получения основного содержимого моей страницы после загрузки страницы. (или, скорее, в нижней части HTML). Но вскоре я от нее отказался.

Это не правильно.

  • Если страница доступна в Интернете, это плохо для маркетинга / SEO. Поскольку то, что увидят поисковые системы, это пустая страница. Я думаю, что большинство сканеров не хотят запускать JavaScript.
  • Производительность не сильно помогает. Со временем мы узнали, что Ajax лучше всего использовать для обновления небольших сегментов HTML. Если содержимое, возвращаемое через ajax, больше, чем «размер загрузки», вы не получаете никакой выгоды. А с кэшированием время загрузки вполне минимально.
  • Совместимость. Несмотря на то, что все основные браузеры поддерживают Ajax достаточно хорошо, не стоит делать страницу полностью зависимой от js только потому, что она не ломается. Кроме того, запрос Ajax не потребует больше ресурсов процессора и, следовательно, больше батареи на мобильных устройствах.
  • Реализация истории, вероятно, сложнее. Если вы вернетесь назад и вперёд в истории, скорее всего, страница будет пустой или вам придется позвонить на сервер, чтобы получить содержимое снова.

Несмотря на то, что он работает, он все равно кажется, что это скорее взлом, чем сплошной код.

1 голос
/ 15 мая 2010

ASP.NET не поддерживает наличие нескольких форм на одной странице. Похоже, это обходит это.

Ваш сайт работает медленно? (вам нужно беспокоиться об этом спектакле?)

Есть ли на ваших страницах несколько <html> <body> <head> тегов? Или это удаляется до того, как элементы управления возвращаются для рендеринга на странице? Если они остаются, браузеры просто обрабатывают это, как им угодно, и поведение (насколько я знаю) не определено и не может быть определено как согласованное.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...