O uso do AJAX melhoraria amplamente o desempenho do servidor?

10

Claramente, o AJAX melhora a interface do usuário, mas isso também diminui a carga do servidor? Você pensaria que sim, porque a página inteira não precisará ser exibida a cada vez, mas talvez haja outras variáveis ​​que não estou considerando.

codificador
fonte

Respostas:

14

Depende do que você está fazendo e como está fazendo.

  • Se você estiver substituindo carregamentos de página inteira por solicitações AJAX (ou seja, apenas fazendo chamadas AJAX quando um usuário clicar no que seria um carregamento de página completo), o AJAX diminuirá a carga do servidor porque você (presumivelmente) está executando menos processamento e retornando menos dados.

  • Por outro lado, se você estiver adicionando o tipo de atualização automática AJAX que controla o servidor a cada poucos segundos, isso pode aumentar a carga dependendo do usuário (pode não aumentar a carga do servidor se o usuário continuar pressionando F5 para atualizar manualmente de qualquer maneira, mas a maioria das pessoas geralmente não faz isso por horas)

  • Outra otimização do AJAX é carregar apenas mais dados à medida que você rola. Nesse caso, se o usuário não rolar até o fim, isso será um desperdício de processamento.

Obviamente, a implementação pode distorcer os resultados de qualquer maneira, estes são resultados típicos, assumindo implementações razoavelmente boas.

Davy8
fonte
A verdadeira questão aqui é o que muda quando você muda para uma maneira AJAX de fazer as coisas? Você é capaz de eliminar o trabalho que estava sendo desperdiçado anteriormente ao mudar para o AJAX ou simplesmente dividi-lo em pedaços menores? (e adicionando sobrecarga no processo)
SplinterReality
3

Obviamente, serve para diminuir a carga do servidor. Veja esta apresentação em jsconf'09 - sobre como o Facebook usou o ajax para fazer isso.

O Ajax é assíncrono. comunicação com o servidor - e você pode usá-lo de inúmeras maneiras. As pessoas o usam para carregar JSON simples na Web em tempo real e tudo mais.

Lembre-se - o verdadeiro desafio é o equilíbrio entre cliente e servidor. Esforce-se para fazer com que cada parte faça seu trabalho de forma que o sistema seja otimizado e você obtenha benefícios óbvios de capacidade de resposta percebida e velocidade real.

codificador de árvore
fonte
3

Existem outros fatores que você não está considerando - na maioria dos casos, o AJAX aumentará a carga do servidor. Em um cenário típico não-ajax, um usuário carrega uma página grande a cada poucos segundos ou minutos. Sim, essa página única é um pouco mais trabalhosa para o servidor, mas tem bastante tempo entre solicitações para recuperar e atender a outras solicitações. Em um cenário AJAXified, esse carregamento de página única agora é dezenas de pequenas ocorrências, constantemente martelando o servidor e aguardando respostas.

É um pouco como a morte de 1000 cortes - nenhum dos pedidos é tão grande por si só, mas o peso total é um assassino. Especialmente quando você começa a considerar que essas pequenas solicitações são tão caras quanto uma solicitação de página inteira. Nos dois casos, você provavelmente está executando um pipeline de aplicativo da Web inteiro, acessando um banco de dados e aguardando uma resposta enquanto está sentado em uma preciosa conexão HTTP.

Aqui está um exemplo de como o ajax pode ficar feio no servidor rapidamente. Vamos dar um "painel executivo" típico que possui 4 slots para widgets. Digamos que o CEO goste de um relatório de vendas completo no lado direito, de uma lista dos 10 principais ganhadores no meio e de um relatório de preços de ações da empresa à direita. E digamos que faremos isso por meio de solicitações remotas ajax simples. Sem levar em conta folhas de estilo, imagens e outros ativos, sua página agora requer 4 viagens de ida e volta HTTP (página principal, cada um dos relatórios do painel) no servidor. Cada uma delas requer uma pilha da Web completa para executar - você estará acessando bancos de dados e renderizando HTML usando sua estrutura da Web, certo? Agora multiplique o CEO único por 2000 usuários remotos, alguns dos quais com conexões irregulares.

Por outro lado, você pode ter uma única página do lado do servidor que executa e retorna um esqueleto HTML, bem como os dados (incluídos no JSON na página) para renderizar os relatórios. Conexão única e maior, mas menos agressiva no servidor da Web no total, porque você não está lidando com 4 solicitações e ativando 4 pipelines, etc.

Wyatt Barnett
fonte
11
Você pode dar um exemplo de uma pequena solicitação que você precisaria no AJAX que você não precisaria de outra maneira?
Jhocking
11
Claro - já percebeu como, neste site, ele pode dizer se alguém já respondeu uma pergunta? Isso é realizado através de uma pequena solicitação ajax. . .
Wyatt Barnett
@WyattBarnett AJAX não significa necessariamente pesquisa. Você pode simplesmente substituir os carregamentos de página inteira por parcial. Em muitos casos, pode aumentar a carga do servidor, mas não acho que seja verdade na "maioria dos casos".
precisa saber é o seguinte
Bem, esse exemplo me parece mais algo que você pode fazer no AJAX que você não pode de outra maneira, em vez de algo que requer mais solicitações de servidor do que de outra forma. Suponho que o OP não estava claro se ele significava "mais desempenho ao fazer exatamente a mesma coisa" ou se ele quis dizer "mais desempenho quando aproveitando ao máximo AJAX"
jhocking
11
Observe que a pesquisa / pesquisa longa é um mero subconjunto do AJAX (como observado aqui), também conhecido como "cometa" . Os Websockets, que ativam o envio "verdadeiro" sem envio de polling ou o AJAX do lado do servidor (iniciado pelo servidor) reduzirão bastante o desperdício de recursos necessário para esse tipo de recurso.
Alan H.
2

Se você estiver usando o AJAX para substituir o trabalho que o servidor estaria executando, sim, isso melhorará o desempenho do servidor. No entanto, você pode ter projetado as coisas para que o servidor ainda esteja fazendo o mesmo e agora o que está acontecendo com o AJAX está além do que o servidor já estava fazendo.

Principalmente, trata-se de coisas da interface do usuário, pois você não deve fazer mais nada no lado do cliente. Basicamente, tudo o que o servidor estava fazendo para oferecer suporte à interface do usuário (por exemplo, recarregar a página com um layout diferente em resposta à entrada do usuário) faz com JavaScript.

jhocking
fonte
0

Se a renderização HTML for uma grande parte do perfil de desempenho do servidor de aplicativos, mover a renderização HTML para o cliente poderá ser uma conquista de desempenho no servidor de aplicativos.

No entanto, se a renderização HTML for uma pequena parte do perfil de desempenho do servidor de aplicativos, mais solicitações normalmente significarão mais viagens pela pilha, mais consultas, mais de tudo no servidor de aplicativos, uma perda de desempenho.

Obviamente, a única maneira de saber em seu caso específico é experimentá-lo.

yfeldblum
fonte
11
Estou tendo problemas para pensar em alguns exemplos em que o uso do AJAX causaria mais solicitações do que a mesma coisa sem o AJAX. Você pode dar um exemplo?
jhocking 27/09/11
11
O HTML é sempre renderizado no lado do cliente.
Jonas
11
Presumivelmente, ele misspoke e significava "manipulação" e não "rendering"
jhocking
Começando pela visualização / modelo, combinando-o com variáveis ​​e renderizando HTML bruto a partir dele.
yfeldblum 27/09/11
O AJAX causaria mais solicitações do que a mesma coisa sem o AJAX em casos como: seu layout principal tem "buracos", mas é entregue com esses buracos no navegador, e esses buracos são "preenchidos" usando o AJAX. Veja, por exemplo, o Facebook.
yfeldblum 27/09/11
0

Você deve considerar a melhor maneira de implementar sua solução. Uma forma simples e não dinâmica não precisa do ajax, e adicioná-lo pode realmente prejudicar o desempenho. Se o seu problema for péssimo, toda a otimização do ajax no mundo não proporcionará um aumento de desempenho aceitável.

Se seu servidor estiver sobrecarregado, você precisará descobrir o porquê.

Se você estiver recebendo muitos hits, o ajax não resolverá esse problema, você precisará de mais capacidade. Adicionar ajax apenas aumentará o número de solicitações que seu servidor precisa atender.

Se você tiver uma página complicada, verifique se há algo que possa fazer no lado do cliente para reduzir a carga no servidor. Se sua página é dinâmica, mas realmente possui um cache de pacote de dados limitado que, para o ajuste do lado do cliente, pode render melhor.

E algumas vezes o Ajax vai ajudar. Quando você tem formulários complexos com dados dinâmicos, o ajax vence o dia. Mas se suas consultas são complicadas e demoram muito para serem executadas, o ajax ainda não resolverá o seu problema.

SoylentGray
fonte