Загрузка на стороне сервера и на стороне клиента (AJAX)

Мне было интересно, что считается лучшей практикой. Допустим, у меня есть выпадающий виджет выбора. Должен ли он быть предварительно загружен содержимым, когда страница обслуживается с сервера, или после ее загрузки должен ли быть сделан запрос AJAX для извлечения содержимого и последующего его заполнения?

Мне нравится идея загрузить его пустым и выполнить вызов AJAX для извлечения содержимого. Но приведет ли это к замедлению загрузки страниц? Особенно, если на странице есть несколько виджетов, которые нужно подгружать контентом с сервера?

Имеет ли значение количество загружаемого контента?

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

Но затем я думаю о сетке данных, скажем, из 200 строк сотрудников и некоторых данных о сотрудниках, которые хранятся в базе данных. Загружаю ли я страницу, и когда страница загружается, есть контроллер, функция инициализации которого извлекает набор данных о сотрудниках, а также заполняет и отображает сетку данных?

Или, когда страница обслуживается с сервера, она извлекает набор данных на стороне сервера, где она также создает сетку данных и затем загружается. Это мир программирования, к которому я привык, в основном делая вещи PHP, JSP и ASP в прошлом. Использование только JavaScript для некоторых крутых эффектов страницы и т. д.

Но мне, кажется, нравится идея о том, что после загрузки страницы (или ее загрузки) делать запросы AJAX для получения данных, необходимых для заполнения виджетов/контента на текущем экране. Я просто обеспокоен тем, что загрузка страницы может показаться неуклюжей или медленной, поскольку теперь я делаю больше запросов к серверу для рисования страницы. Первоначальный запрос страницы, а затем запрос каждого набора данных, необходимого для заполнения виджета.


person thecountofzero    schedule 28.01.2011    source источник


Ответы (3)


Я думаю, что лучший ответ - "это зависит от вашей структуры". Я видел веб-фреймворки, которые решают эту проблему в обоих направлениях. Я действительно думаю, что, особенно когда в DOM загружается много данных, с точки зрения производительности предпочтительнее загружать как можно большую часть страницы в начальном ответе HTTP и обновлять только по мере необходимости через AJAX. Обратите внимание, что для больших наборов данных накладные расходы дополнительного HTTP-запроса на производительность относительно невелики по сравнению с последствиями выполнения существенных манипуляций с DOM через JavaScript — манипуляции с DOM могут быть чрезвычайно медленными в некоторых браузерах.

Вы можете получить более подробные ответы, если добавите используемые вами фреймворки.

person Nick    schedule 28.01.2011

Как вы сами заметили, загрузка всего с помощью AJAX замедлит работу страницы. На самом деле, одним из лучших способов ускорения веб-страниц является уменьшение количества HTTP-запросов.

При этом в некоторых случаях AJAX ускоряет загрузку страницы. Одним из примеров является автоматическое заполнение текстового поля. Если реализовать такую ​​функцию без использования AJAX, веб-странице потребуется загружать каждый возможный запрос при первой загрузке. Странице потребовалась бы целая вечность, чтобы загрузить все эти данные. Но автозаполнение, вероятно, покажется более быстрым, чем обычно, после загрузки страницы.

Мой совет — начать с самого простого решения, которое только можно придумать, а затем добавить AJAX, кеш и другие функции оптимизации, где это необходимо, после слов.

person Jan Aagaard    schedule 28.01.2011

Это зависит от данных, которые вы отображаете, если вам нужны быстрые обновления из базы данных, подход ajax прекрасен. Но если ваши данные фиксированы (или вы не заботитесь об их обновлении после загрузки страницы), тогда я не должен использовать подход ajax, это больше работы (запрос json, его анализ, заполнение выбора или что-то еще) и вы не получите много пользы.

person Mauricio    schedule 28.01.2011