С точки зрения производительности: запрашивать JSON и визуализировать в JS или запрашивать весь HTML? [дубликат]


Возможный Дубликат:
Почему это плохая практика - возвращать сгенерированный HTML вместо JSON? Или это?

ЕСЛИ я отправлю запрос AJAX в PHP-файл, что приведет к более быстрому отображению HTML:

  1. Отправка полностью отформатированного HTML прямо с PHP, или:
  2. Просто отправить данные JSON и позволить Javascript выполнять рендеринг HTML?

У меня довольно сложная структура HTML, и это увеличивает время загрузки большой кусок HTML против время, когда Javascript (jQuery) должен отображать одну и ту же структуру.

Есть ли вообще окончательный ответ?

Author: Community, 2010-07-04

10 answers

JSON - это путь. Сеть может быть огромным узким местом, в то время как javascript быстро справляется с задачами. Наибольшая разница будет при медленных соединениях . И это определенно стоит того, чтобы разобрать. Новые браузеры предлагают собственный JSON, поэтому он должен быть безумно быстрым.

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

JSON, однако, позволяет вам решить, хотите ли вы использовать методы innerHTML или DOM в соответствии с содержимым. Это еще одна огромная победа.

 1
Author: galambalazs, 2010-07-05 10:19:40

Вам нужно будет измерить время для вашей ситуации, потому что ответ будет зависеть от:

Отображаемый сервером HTML:

  1. Количество времени, необходимое на сервере для форматирования данных в формате HTML при низких и высоких нагрузках.
  2. Количество времени, необходимое для перемещения форматированного HTML на клиент при низких и высоких нагрузках.
  3. Количество времени, необходимое для перерисовки вашей страницы с отформатированным HTML на клиенте, для медленных и быстрых клиентов и браузеры.

HTML, отображаемый клиентом:

  1. Количество времени, необходимое на сервере для форматирования данных в формате JSON при низких и высоких нагрузках.
  2. Время, необходимое для передачи данных JSON клиенту при низких и высоких нагрузках.
  3. Количество времени, необходимое клиенту для отображения HTML из данных JSON, для медленных и быстрых клиентов и браузеров.

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

[ Добавлено]

Для каждого набора измерений (1, 2, 3) потребуется другой набор инструментов для сбора данных. Я бы выбрал 3 набора репрезентативных данных (наименьший, средний, наибольший), а затем для каждого набора данных выполнил бы каждое из перечисленных выше измерений. Обратите внимание, что вам не нужно (и на самом деле не следует) использовать свое полное приложение - вам действительно просто нужен самый маленький фрагмент кода, который будет делать то, что вы хотите. Тогда я бы найдите различия между отображением на сервере и отображением на клиенте и решите, что (если таковые имеются) было более важным в моем приложении.

Вы НЕ сможете измерить все возможные комбинации, но если вы выберете самый медленный браузер на самом медленном компьютере, который вы можете достать (например, дешевый нетбук), и используете самое медленное подключение к Интернету (у вас все еще есть учетная запись удаленного доступа AOL для тестирования, верно?) это, как правило, покажет вам наихудший случай, и это то, что вас действительно волнует о.

 2
Author: Craig Trader, 2010-07-04 16:21:22

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

 0
Author: xil3, 2010-07-04 15:50:02

Вам нужно измерить, на быстрых и медленных компьютерах. Визуализация JavaScript может занять больше времени, чем время передачи PHP +, но это зависит от скорости клиента (и скорости соединения, и скорости, которую PHP использует для создания HTML).

 0
Author: Skilldrick, 2010-07-04 15:50:25

Вероятно, окончательного ответа нет. Но учтите, что, хотя с точки зрения запроса AJAX возвращает JSON легче, чем запрашивать всю страницу с помощью PHP. Обработка запроса JSON и обновление компонентов страницы сопряжены с более высокой нагрузкой на управление.

Рассматривали ли вы гибрид? AJAX-запросы, в которых PHP возвращает небольшие фрагменты HTML.

 0
Author: Jason McCreary, 2010-07-04 15:51:56

Сначала вам нужно сравнить размер в байтах JSON и HTML.

Если JSON не намного меньше, просто отправьте HTML. Использование JavaScript innerHTML для размещения фрагмента HTML на странице происходит очень быстро. Построение дерева DOM из некоторого JSON будет медленнее.

В конечном счете разница во времени для пользователя, вероятно, будет незначительной, если только объем JSON/HTML не будет действительно огромным.

 0
Author: Rafael, 2010-07-04 15:58:26

Зависит от типа сайта больше, чем от чего-либо другого imo.

  • Нужно ли вам это, чтобы изящно деградировать?
  • Какими браузерами, скорее всего, будет пользоваться ваша целевая аудитория?
  • Какие у них могут быть связи?
  • Сколько просмотров будет у сайта?

Например, было бы справедливо предположить, что "технический" сайт будут посещать люди с более быстрыми компьютерами, использующие приличные браузеры с быстрыми подключениями.

Если вам нужно поддерживать IE6 тогда я бы опасался слишком большого количества javascript, но это то, что действительно нужно протестировать.

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

 0
Author: Paul Creasey, 2010-07-04 16:11:10

Это действительно будет зависеть от того, какие данные вы передаете.. Если у вас есть несколько статических HTML-элементов на интерфейсе, которые вам нужно только заполнить значениями, JSON - это самое быстрое и простое решение. Для этого существует множество, множество, множество клиентских библиотек JS. Если это ваше требование, знайте, что при таком подходе ваш HTML-код уже существует либо на странице, либо в памяти клиента в качестве шаблона (в зависимости от того, как вы его написали)

Что касается другой вариант, я бы посоветовал вам делать это только в том случае, если у вас есть какой-то очень... "сложный" или действительно зависящий от сервера HTML, который может генерировать только сервер... или если вы внедряете HTML из другого места, которое доставляет HTML.

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

Я думаю, вам следует посмотреть в некоторые из более ориентированных на пользовательский интерфейс JS-фреймворков

 0
Author: arunjitsingh, 2010-07-04 17:02:59

Об этом упомянул Николас Закас из Yahoo в своей статье/выступлении на Velocity 2010,

Похоже, вам нравится производительность javascript, поэтому стоит ознакомиться со слайдами/PDF-файлами.

Включает в себя материалы Стива Саундерса и множество людей, о которых я никогда не слышал:

Http://en.oreilly.com/velocity2010

Редактировать: если я правильно помню, вывод был html, как правило, лучше из-за медленного синтаксического анализа json (я думаю!)

 0
Author: Haroldo, 2010-07-04 20:52:41

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

  • Ситуация A) Пользователь нажимает кнопку, в течение 2 секунд ничего не происходит, затем загружаются данные.
  • Ситуация Б) Пользователь нажимает кнопку, на ней написано "пожалуйста, подождите" или что-то в этом роде, затем данные загружаются через 3 секунды.

Большинству пользователей ситуация А на самом деле покажется медленнее.

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

 0
Author: James, 2010-07-04 22:37:36