Fala galera! Tudo certo?
Hoje vou falar um pouco sobre o uso de Session state juntamente com AJAX. Você 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:
Quando eu acesso o Controller que renderiza essa página, eu crio uma Session e dou um valor pra ela:
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:
Note que ambas as Actions estão fazendo a mesma tarefa, a única divergência é o estado de sessão:


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:
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:
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 😀
Valeu pela dica! Por incrível que pareça, conseguimos resolver um problema de performance lá na empresa usando Session! Abraço
GostarGostar
Show de bola Carlos, muito legal saber disso! Abraço 😀
GostarGostar