Quanto AJAX é demais?

5

Meu projeto atual faz parte de uma arquitetura altamente vinculada, com sistemas individuais cada um possuindo certas partes de dados e expondo-os RESTfully. Nossos serviços da Web e nossa interface do usuário aproveitam essa ligação, armazenando links para os recursos em outros sistemas em vez de armazenar uma cópia dos dados e apresentando visualizações compostas buscando o estado atual desses recursos.

Por exemplo, meu sistema pode ser responsável por um anuário de pessoas (não estou usando nossos dados e relacionamentos reais aqui, é claro). As pessoas são de propriedade de outro sistema e talvez tenham informações de contato (endereços de e-mail, números de telefone, identificadores do Twitter, etc.). Essas informações de contato podem ser armazenadas em outro sistema que tenha detalhes sobre o número de telefone ou endereço de e-mail.

Para apresentar uma visão em minha interface de usuário, tenho que buscar meus próprios dados e seguir os links para apresentar os detalhes apropriados desses outros sistemas. Eu poderia armazenar em cache certas partes dessas informações, mas provavelmente quero recuperar os detalhes mais recentes.

Em algumas das minhas páginas, tenho um número razoavelmente pequeno de pesquisas para fazer esse tipo de enriquecimento de dados. Em outras páginas, estou apresentando muito mais informações e acabo com uma explosão de dados à medida que obtenho uma lista, expanda cada elemento, expanda cada um deles e assim por diante. Eu experimentei fornecer um serviço que faz essa agregação e retorna todos os dados necessários para a exibição em uma única resposta. No entanto, não tenho certeza se esta é a maneira mais limpa de fornecer isso.

Alguém pode sugerir algumas estratégias para determinar quando devo usar diretamente as solicitações do AJAX para buscar esses dados? Em que ponto devo mudar de solicitações individuais para fornecer serviços agregados para criar os dados? Ou existe alguma outra técnica que eu possa aplicar?

    
por CPhelps 08.12.2011 / 01:47
fonte

5 respostas

3

Eu penso quantos pedidos de Ajax você deve executar e quando eles devem ser feitos realmente depende da sua interface do usuário. O que eu pensaria primeiro é quais são as informações mais importantes relacionadas aos dados que estou carregando. Por exemplo, se é uma pessoa, eu diria que seu nome, sobrenome, data de aniversário é o que eu quero exibir (ou o tipo de informação que você pode encontrar no quadro do lado direito da Wikipedia para exibir informações pessoais . Acho que você precisa exibir informações críticas o mais rápido possível, mas depende de você (ou do seu cliente) determinar o que é crítico e o que não é.

Você pode então usar solicitações Ajax para carregar informações mais detalhadas (endereços? números de telefone? alças do twitter) que inicialmente não estão disponíveis e / ou ocultas para o usuário, por exemplo em um "tab " que não está selecionado. A guia selecionada por padrão é aquela com as principais informações. Você tem duas maneiras de fazer isso:

  • Carregue quando a página estiver pronta , ou seja, quando ela aparecer para o usuário. É carregado enquanto o usuário olha as informações principais.
  • Carregue quando o usuário clicar na guia. O usuário terá que esperar um pouco (pode ser muito rápido e quase desconhecido para o usuário).

De qualquer forma, adote consistência e sempre mostre o famoso "ícone de carregamento" quando os dados ainda não estiverem disponíveis. A segunda opção pode não ser ótima, mas pode ser útil para solicitações do Ajax que demoram um pouco, retornem muitos dados e, mais do que qualquer outra coisa, precise de um widget complexo para ser exibido. Você também evita chamadas desnecessárias do Ajax.

Quantos pedidos de Ajax você executa (a agregação de serviços como você escreveu significa que você agrega dados do lado do servidor) é menos importante na minha opinião do que o tempo total necessário para obter os dados de que você precisa. Se você exibir as informações mais rapidamente com um grande pedido, vá em frente, senão, fique com várias pequenas solicitações / respostas. Você deve definir um objetivo em termos de carregar a página o mais rápido possível e tentar alcançá-la.

De qualquer forma, você terá que experimentar e ver o que dá ao usuário a melhor experiência. Eu sei que não é um ótimo conselho, mas é o que eu tentaria fazer.

    
por 08.12.2011 / 09:13
fonte
2

Descobri que os desenvolvedores familiarizados com os formulários ASP .NET e code-behind simplesmente substituem seus code-behind por javasctipt e Ajax. Eles tendem a colocar um Ajax onclick atrás do menor dos controles de usuário, que é efetivamente um manipulador de eventos de controle de servidor.

Você tem que entender quais são as conseqüências de fazer uma chamada Ajax. Por exemplo, se a chamada for resultar em uma chamada para algum WCF / EJB e para um datastore, essa chamada ultrapassará 4 limites de processador (navegador, Web Svr, Camada de Aplicativo, DB). Essas chamadas são caras em termos de latência envolvida na preparação da chamada e no empacotamento de dados.

O Ajax promove um processamento remoto de granulação fina, que na verdade é um anti-padrão, de acordo com a Fachada de Serviço Martin Fowlers. Como qualquer coisa, o Ajax é bom com moderação e no lugar certo. Eu não acho que esse lugar esteja em software comercial.

    
por 16.03.2012 / 10:07
fonte
1

A resposta é "depende".

  • Seus pedidos ajax são processados simultaneamente ou são serializados? A serialização pode ocorrer no lado do cliente (lógica ou limites de conexão do navegador) ou no lado do servidor (por exemplo, solicitações serializadas do PHP, se você usar sessões, para evitar problemas de simultaneidade com dados da sessão).
  • Qual é o seu caso típico e o pior caso para o tempo de ida e volta ao servidor?

Conheço situações em que o tempo de ida e volta típico foi de um segundo. Nesse tipo de situação, você deve agregar solicitações se elas se tornassem serializadas, porque cada solicitação demora 1 segundo, mesmo que seu servidor responda em 1 milissegundo. Por outro lado, se as solicitações são altamente concorrentes, quem se importa?

    
por 08.12.2011 / 09:45
fonte
1

Atualmente estou trabalhando em um aplicativo que usa o framework ExtJS e há o AJAX em todos os lugares. Lançar um módulo do aplicativo e carregar um relatório gera até 30 solicitações AJAX.

Uma vez que você se acostume com a idéia de que o AJAX é uma parte normal do seu desenvolvimento de software, pare de contar. AJAX não é nada que tenha que ser limitado ou evitado.

Apenas certifique-se de não obter condições de corrida ao processar a saída de uma chamada AJAX, dependendo da saída do outro.

    
por 16.03.2012 / 11:07
fonte
-2

É demais quando se torna um obstáculo à usabilidade, desempenho, manutenção ou desenvolvimento.

    
por 08.12.2011 / 03:40
fonte