Ajax + Session… Cuidado!

Fala galera! Tudo certo?

Hoje vou falar um pouco sobre o uso de Session state juntamente com AJAXVocê pode até não ter percebido, mas isso pode denegrir, e muito, a performance do seu site.

Antes de qualquer coisa, você já deve ter ouvido muito sobre os malefícios do uso de Session, certo? Mas se ainda não ouviu, pode dar uma olhada aqui se quiser, e vai ficar por dentro de tudo.

Mas nem sempre dá pra fugir da Session; concordo com isso, pois podemos não trabalhar com a ultima tecnologia, ou às vezes temos um sistema legado em nossas mãos, e nem sempre o cliente vai pagar o preço ou esperar o tempo de uma conversão pra remover a Session, ou até mesmo você pode gostar de usar e não querer abandonar.

Então, dá só uma olhada nisso, fiz uma página simples, com dois botões que fazem requisições AJAX:
00

Quando eu acesso o Controller que renderiza essa página, eu crio uma Session e dou um valor pra ela:
HomeController

Cada um desses botões fazem requisições AJAX, o botão “Ajax com Session”, faz requisições a um Controller que está com o estado de sessão padrão, e o outro, faz requisições a um Controller que está com o estado de sessão para apenas leitura. Nesse exemplo fiz 20 requisições para cada, veja:
Index

Note que ambas as Actions estão fazendo a mesma tarefa, a única divergência é o estado de sessão:

SessionlessController
Sessionless Controller
SessionController
Default Controller

Agora vamos ver o resultado das nossas requisições AJAX, começando pelas requisições em que o estado de sessão está padrão; podem ver que demora mais de 20 segundos pra carregar tudo,o resultado final pro usuário fica quase  como se fossem requisições síncronas:
request-session

Agora vamos ver as requisições em que o estado de sessão está somente leitura, o resultado final é de pouco mais de 4 segundos:
request-sessionless

Mas porque essa diferença?

Quase 16 segundos! Bastante né?
A explicação pra isso é simples: quando deixamos o estado de sessão padrão, toda requisição que for feita pode alterar qualquer Session, então o ASP.NET espera a requisição terminar pra “liberar” a próxima requisição. E com o estado de sessão setado pra somente leitura, o ASP.NET não deixa a Session ser modificada, e então libera todas as requisições.

E a única mudança foi essa linha de código:
[SessionState(System.Web.SessionState.SessionStateBehavior.ReadOnly)]

Então se você ainda trabalha com Session e usa AJAX, essa é uma solução que pode melhorar a performance do seu site, deixe os Controllers ou Actions que não alteram Sessions com o estado de sessão setado como somente leitura, com certeza a diferença vai ser grande.

Os exemplos de código estão disponíveis no GitHub: https://github.com/vmussak/SessionlessExample

Por hoje é só, qualquer dúvida ou sugestão, estou à disposição! Até mais 😀

Anúncios

2 thoughts on “Ajax + Session… Cuidado!

  1. Carlos 14/02/2016 / 20:01

    Valeu pela dica! Por incrível que pareça, conseguimos resolver um problema de performance lá na empresa usando Session! Abraço

    Gostar

Deixe uma Resposta

Preencha os seus detalhes abaixo ou clique num ícone para iniciar sessão:

Logótipo da WordPress.com

Está a comentar usando a sua conta WordPress.com Terminar Sessão / Alterar )

Imagem do Twitter

Está a comentar usando a sua conta Twitter Terminar Sessão / Alterar )

Facebook photo

Está a comentar usando a sua conta Facebook Terminar Sessão / Alterar )

Google+ photo

Está a comentar usando a sua conta Google+ Terminar Sessão / Alterar )

Connecting to %s