Подтвердить что ты не робот

Ajax html vs xml/json response - производительность или другие причины

У меня есть довольно тяжелый сайт ajax, и некоторые 3k html-форматированные страницы вставляются в DOM из ajax-запросов.

То, что я делал, это взять html-ответы и просто вставить все это с помощью jQuery.

Другой вариант - вывести в xml (или, возможно, json), а затем проанализировать документ и вставить его на страницу.

Я заметил, что кажется, что самый большой сайт делает что-то вроде json/xml. Google Mail возвращает xml, а не форматированный html.

Это из-за производительности? или есть еще одна причина использовать xml/json vs только для извлечения html?

С точки зрения javascript, казалось бы, инъекция прямого html прост. В jQuery я просто делаю это

jQuery.ajax({
    type: "POST",
    url: "getpage.php",
    data: requestData,
    success: function(response) {
        jQuery('div#putItHear').html(response);
    }

с ответом xml/json, я должен был бы сделать

jQuery.ajax({
    type: "POST",
    url: "getpage.php",
    data: requestData,
    success: function(xml) {
        $("message",xml).each(function(id) { 
            message = $("message",xml).get(id); 
            $("#messagewindow").prepend("<b>" + $("author",message).text() + 
            "</b>: " + $("text",message).text() + 
            "<br />"); 
        });
    }
});

явно не так эффективен с точки зрения кода, и я не могу ожидать, что это лучшая производительность браузера, поэтому зачем делать что-то по-другому?

4b9b3361

Ответ 1

Возвращение JSON/XML дает приложению больше свободы по сравнению с возвратом HTML и требует менее конкретных знаний в разных полях (данные против разметки).

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

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

Если другой клиент должен быть создан (который не использует HTML как язык разметки), все компоненты сервера могут быть повторно использованы. То же самое касается создания другой реализации сервера.

Ответ 2

Обычно он уменьшает количество переданных данных и, следовательно, улучшает скорость передачи. Поскольку все, что связано с проводом, как правило, является узким местом в процессе, уменьшающем время передачи, уменьшает общее время, затрачиваемое на выполнение процесса, улучшая работу пользователя.

Ответ 3

Вот несколько профи для отправки JSON/XML вместо HTML:

  • Если данные будут использоваться за пределами вашего приложения, HTML может быть сложнее разобрать и вписаться в другую структуру.
  • JSON может быть непосредственно встроен в теги script, что позволяет использовать сценарии AJAX с междоменным доменом
  • JSON/XML сохраняет разделение проблем между сценариями и представлениями на стороне сервера.
  • Уменьшает пропускную способность

Ответ 4

Пожалуйста, прочитайте это сообщение:
Ответ AJAX: XML, HTML или JSON?

quirksmode.org

В нем перечислены все параметры con и pro и все доступные параметры.

Ответ 5

Вы должны проверить Pure, шаблонный инструмент для генерации HTML из данных JSON.

Ответ 6

Как правило, JSON является более эффективным способом получения данных через ajax, поскольку одни и те же данные в XML намного больше. JSON также более легко потребляется Javascript на стороне клиента. Однако, если вы извлекаете чистый HTML-контент, я, скорее всего, сделаю то, что вы предлагаете. Хотя, если вам действительно нужно, вы можете встроить свой HTML-контент в строку JSON и получить лучшее из обоих миров

Ответ 7

В настоящее время я борюсь с этим решением, и он не совсем щелкнул, пока я не увидел, как Дарин сварил его:

"Если данные будут использоваться за пределами вашего приложения, HTML может быть сложнее разобрать и вписаться в другую структуру"

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

Лично, если есть сложный HTML-код, который будет обернут вокруг данных, я просто верну HTML-код и перетащите его. jQuery сладка и все, но создание HTML с Javascript часто является болью. Но это игра баланса.

Ответ 8

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

Ответ 9

Для меня это сводится к следующему:

Это для многих из нас, а тем более для работы на стороне сервера, зрелого, механизма шаблонов, к которому мы привыкли, генерировать html и отправлять его по каналу, чем использовать кучу javascript-кода для генерации HTML-клиента боковая сторона. Да, есть некоторые шаблоны для javascript, которые могут немного смягчить его.

Поскольку я уже разделяю модельную, логическую и визуальную серверную сторону, нет аргументов в том, что у нас есть еще одно разделение. JSON - это представление, HTML - другое представление.

И давайте посмотрим правде в глаза; как HTML/AJAX, так и JSON/AJAX во много раз лучше, чем полная страница по каналу.

Последнее, что вам, возможно, нужно подумать; если вы собираетесь работать с поисковой системой - вам может понадобиться генерировать сервер HTML-сервер любым способом (старый деградирует изящно мантрой).

Я обычно делаю комбинацию. Если есть логика на стороне клиента, я использую JSON, иначе я использую HTML. Уведомления и специальные поля автозаполнения отправляются через JSON.