ajax html против ответов xml / json - производительность или другие причины - PullRequest
29 голосов
/ 18 июля 2009

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

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

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

Я заметил, что большинство крупных сайтов делают что-то вроде json / xml. Почта Google возвращает XML, а не форматированный HTML.

Это связано с производительностью? или есть другая причина использовать xml / json вместо простого получения 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 />"); 
        });
    }
});

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

Ответы [ 8 ]

16 голосов
/ 18 июля 2009

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

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

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

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

6 голосов
/ 18 июля 2009

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

4 голосов
/ 18 июля 2009

Вот несколько плюсов за отправку JSON / XML вместо HTML:

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

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

1 голос
/ 04 июня 2012

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

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

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

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

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

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

1 голос
/ 18 июля 2009

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

0 голосов
/ 12 февраля 2015

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

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

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

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

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

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

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