ASP.NET Web API é uma ótima tecnologia. Escrever APIs Web é tão fácil que muitos desenvolvedores não gastam tempo estruturando suas aplicações para obter um bom desempenho de execução. Neste artigo, abordarei 8 técnicas para melhorar o desempenho de APIs Web ASP.NET. 1) Usar a ferramenta de serialização JSON mais rápida A serialização do JSON tem um impacto crítico no desempenho de toda a API Web ASP.NET. Em um dos meus projetos, troquei o serializador JSON.NET para o ServiceStack.Text por um ano e meio. Medi que o desempenho da Web API melhorou cerca de 20%. Recomendo muito que você experimente esta ferramenta de serialização. Aqui estão alguns dados comparativos recentes sobre o desempenho de ferramentas populares de serialização.
SerializerPerformanceGraf Fonte: theburningmonk Atualização: Parece que parece que o StackOverflow usa Jil, a ferramenta de serialização JSON que eles alegam até hoje. Um dado de teste pode ser encontrado na página do GitHub Jil serializer. 2) Serializar manualmente JSON a partir do DataReader Usei essa abordagem nos meus projetos e recebi benefícios de desempenho. Você pode criar manualmente strings JSON a partir do DataReader e evitar a criação desnecessária de objetos, assim não precisa pegar valores do DataReader e escrever em objetos, depois pegar valores desses objetos e usar o JSON Serializer para gerar JSON. Use o StringBuilder para gerar JSON e retorne o StringContent no final como o conteúdo da resposta na WebAPI.
Você pode conferir mais maneiras de fazer isso no blog do Rick Strahl 3) Usar outros formatos de protocolo (buffer de protocolo, pacote de mensagens) tanto quanto possível Se você puder usar outros formatos de mensagem no seu projeto, como Protocol Buffers ou MessagePacks, em vez de usar JSON. Você terá uma enorme vantagem de desempenho, não só porque os Protocol Buffers são muito rápidos em serialização, mas também porque são formatados mais rápido que o JSON nos resultados retornados. 4) Implementar compressão Use GZIP ou Deflate na sua API Web ASP.NET. A compressão é uma forma simples e eficaz de reduzir o tamanho e a capacidade de resposta dos pacotes de resposta. Esse é um recurso muito necessário, você pode conferir mais artigos sobre compressão no meu blog ASP.NET Web API, compressão GZip, ActionFilter com 8 linhas de código. 5) Uso do cache Usar cache de saída no método Web API é profundo. Por exemplo, se um grande número de usuários acessa conteúdo de resposta que muda apenas uma vez ao dia. Se você quiser implementar cache manual, como armazenar senhas de usuário na memória, veja meu post no blog Maneira simples de implementar cache em ASP.NET Web API. 6) Usar ADO.NET típico sempre que possível Escrever ADO.NET manualmente ainda é a forma mais rápida de obter valores do banco de dados. Se o desempenho das suas APIs web é realmente importante para você, então não use ORMs. Você pode ver comparações de desempenho entre os ORMs mais populares. ORMMapper
Código de busca elegante e escrito à mão são rápidos e, de fato, todos os ORMs são mais lentos que os três. O LLBLGen com cache de resultados é rápido, mas precisa iterar novamente o conjunto de resultados e instanciar o objeto na memória novamente. 7) Implementar uma abordagem assíncrona na Web API O uso de um serviço assíncrono de API Web aumenta drasticamente o número de requisições HTTP processadas pelas APIs Web. A implementação é simples, basta usar a palavra-chave assíncrona e mudar o tipo de valor de retorno do seu método para Tarefa.
8) Retorna múltiplos conjuntos de resultados e combinações de conjuntos Reduzir o número de transferências não é benéfico apenas para múltiplos bancos de dados, mas também para APIs Web, que permitem usar o poder dos conjuntos de resultados. Isso significa que você pode extrair múltiplos conjuntos de resultados do DataReader, veja o seguinte código de demonstração:
Você pode retornar múltiplos objetos em uma única resposta de uma API Web, tente combinar os objetos retornados e retorne os seguintes objetos:
Isso reduzirá as requisições HTTP para sua API WEB. Obrigado por ler este artigo.
|