Будет ли использование AJAX значительно улучшить производительность сервера?

10

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

кодировщик
источник

Ответы:

14

Это зависит от того, что вы делаете и как вы это делаете.

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

  • С другой стороны, если вы добавляете тип автообновления AJAX, который опрашивает сервер каждые несколько секунд, это может увеличить нагрузку в зависимости от пользователя (это может не увеличить нагрузку на сервер, если пользователь все равно нажимает клавишу F5, чтобы обновить вручную, но большинство людей обычно не делают этого часами)

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

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

Davy8
источник
Реальный вопрос здесь в том, что меняется, когда вы переходите на AJAX-способ ведения дел? Можете ли вы избавиться от работы, которая раньше была потрачена впустую, переместившись в AJAX или просто разбив ее на более мелкие части? (и добавление накладных расходов в процессе)
SplinterReality
3

Конечно, это помогает снизить нагрузку на сервер. Посмотрите на эту презентацию @ jsconf'09 - о том, как Facebook использовал ajax для этого.

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

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

treecoder
источник
3

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

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

Вот пример того, как ajax может быстро стать ужасным на сервере. Давайте возьмем типичную «исполнительную панель», которая имеет 4 слота для виджетов. Допустим, генеральному директору нравится полный отчет о продажах в правой части, список 10 лучших получателей в середине и отчет о цене акций компании справа. И скажем, мы собираемся сделать это с помощью простых удаленных запросов ajax. Без учета таблиц стилей, изображений и других ресурсов ваша страница теперь требует 4 обходных циклов HTTP (главная страница, каждый из отчетов сводной панели) на сервере. Для выполнения каждого из них требуется полный веб-стек - вы собираетесь работать с базами данных и визуализировать HTML с помощью веб-инфраструктуры, верно? Теперь умножьте одного генерального директора на 2000 удаленных пользователей, некоторые из которых имеют разнородные соединения.

И наоборот, у вас может быть одна серверная страница, которая выполняет и возвращает HTML-скелет, а также данные (включенные в JSON на странице) для отображения отчетов. Одиночное, более крупное соединение, но в целом меньшее количество биений на веб-сервере, потому что вы не обрабатываете 4 запроса и не запускаете 4 конвейера и т. Д.

Уайетт Барнетт
источник
1
Можете ли вы привести пример небольшого запроса, который вам понадобится в AJAX, который вам не понадобился бы в противном случае?
Джоккинг
1
Конечно, когда-нибудь замечали, как на этом сайте он может сказать вам, если кто-то уже ответил на вопрос? Это достигается с помощью небольшого AJAX-запроса. , ,
Уайетт Барнетт
@WyattBarnett AJAX не обязательно означает опрос. Вы можете просто заменить полную загрузку страницы частичной загрузкой страницы. Во многих случаях это может увеличить нагрузку на сервер, но я не думаю, что это правда в «большинстве случаев».
Davy8
Хм, хорошо, этот пример мне кажется больше похожим на то, что вы можете сделать в AJAX, что вы не можете сделать иначе, чем на то, что требует больше запросов к серверу, чем в противном случае. Я полагаю, что ОП неясно, имел ли он в виду «большую производительность, когда делал то же самое», или он имел в виду «большую производительность, когда использовал все преимущества AJAX»
jhocking
1
Обратите внимание, что опрос / длинный опрос - это просто подмножество AJAX (как отмечено здесь), также называемое «кометой» . WebSockets, которые дают возможность «истинное» опрос свободной толчок или на сторону сервера (сервер инициируемых) АЯКС позволит значительно сократить отходы ресурсов , необходимые для такого рода функции.
Алан Х.
2

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

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

jhocking
источник
0

Если рендеринг HTML является важной частью профиля производительности вашего сервера приложений, то перемещение рендеринга HTML на клиент может стать выигрышем в производительности на сервере приложений.

Однако если рендеринг HTML является небольшой частью профиля производительности вашего сервера приложений, то большее количество запросов обычно будет означать больше обращений через стек, больше запросов, больше всего на сервере приложений, потерю производительности.

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

yfeldblum
источник
1
Мне трудно думать о каких-либо примерах, когда использование AJAX вызовет больше запросов, чем выполнение одной и той же вещи без AJAX. Можете привести пример?
Джоккинг
1
HTML всегда отображается на стороне клиента.
Джонас
1
Предположительно он ошибся и имел в виду «манипулирование», а не «рендеринг»
jhocking
Начиная с представления / шаблона, комбинируя его с переменными и выводя из него необработанный HTML.
yfeldblum
AJAX будет вызывать больше запросов, чем делать то же самое без AJAX в таких случаях: ваш основной макет имеет «дыры», но доставляется с этими дырами в браузер, и эти дыры «заполняются» с помощью AJAX. Смотрите, например, Facebook.
yfeldblum
0

Вы должны рассмотреть лучший способ реализации вашего решения. Простая нединамическая форма не нуждается в ajax, и добавление ее может фактически повредить производительности. Если ваша проблема в плохих запросах, вся оптимизация ajax в мире не даст вам приемлемого повышения производительности.

Если ваш сервер перегружен, вам нужно выяснить, почему.

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

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

И иногда Ajax поможет. Когда у вас есть сложные формы с динамическими данными, ajax выигрывает день. Но если ваши запросы сложны и требуют много времени для выполнения, то ajax все равно не решит вашу проблему.

SoylentGray
источник