ASP.NET Web API is een geweldige technologie. Het schrijven van web-API's is zo eenvoudig dat veel ontwikkelaars geen tijd besteden aan het structureren van hun applicaties om goede uitvoeringsprestaties te bereiken. In dit artikel bespreek ik 8 technieken om de prestaties van ASP.NET web-API's te verbeteren. 1) Gebruik de snelste JSON-serialisatietool De serialisatie van JSON heeft een cruciale impact op de prestaties van de gehele ASP.NET Web API. In een van mijn projecten ben ik anderhalf jaar overgestapt van de JSON.NET serializer naar ServiceStack.Text. Ik heb gemeten dat de prestaties van de Web API met ongeveer 20% zijn verbeterd. Ik raad je sterk aan om deze serialisatietool te proberen. Hier is wat recente vergelijkingsgegevens over de prestaties van populaire serialisatietools.
SerializerPerformanceGraf Bron: theburningmonk Update: Het lijkt erop dat StackOverflow Jil gebruikt, hun tot nu toe beweerde JSON-serialisatietool. Testgegevens zijn te vinden op hun GitHub-pagina Jil serializer. 2) JSON handmatig serialiseren vanuit DataReader Ik heb deze aanpak in mijn projecten gebruikt en heb prestatievoordelen ontvangen. Je kunt handmatig JSON-strings maken vanuit de DataReader en onnodige objectcreatie vermijden, zodat je geen waarden uit de DataReader hoeft te nemen en naar objecten hoeft te schrijven, vervolgens waarden uit die objecten hoeft te nemen en de JSON Serializer te gebruiken om JSON te genereren. Gebruik StringBuilder om JSON te genereren en geef StringContent aan het einde terug als de inhoud van het antwoord in de WebAPI.
Je kunt meer manieren vinden om dit te doen op de blog van Rick Strahl 3) Gebruik zoveel mogelijk andere protocolformaten (protocolbuffer, message pack) Als je andere berichtformaten in je project kunt gebruiken, zoals Protocol Buffers of MessagePacks, in plaats van JSON te gebruiken. Je krijgt een enorm prestatievoordeel, niet alleen omdat Protocol Buffers erg snel serialiseren, maar ook omdat ze sneller zijn geformatteerd dan JSON in de teruggegeven resultaten. 4) Implementatie van compressie Gebruik GZIP of Deflate in je ASP.NET Web API. Compressie is een eenvoudige en effectieve manier om de grootte en responsiviteit van responspakketten te verkleinen. Dit is een zeer noodzakelijke functie; je kunt meer artikelen over compressie lezen op mijn blog ASP.NET Web API GZip compression ActionFilter met 8 regels code. 5) Gebruik caching Het gebruik van output caching in de Web API-methode is ingrijpend. Bijvoorbeeld, als een groot aantal gebruikers toegang heeft tot responsinhoud die slechts één keer per dag verandert. Als je handmatig caching wilt implementeren, zoals het cachen van gebruikerswachtwoorden naar het geheugen, zie dan mijn blogpost Eenvoudige manier om caching te implementeren in ASP.NET Web API. 6) Gebruik waar mogelijk typische ADO.NET Handmatig geschreven ADO.NET is nog steeds de snelste manier om waarden uit de database te halen. Als de prestaties van je web-API's echt belangrijk voor je zijn, gebruik dan geen ORM's. Je kunt prestatievergelijkingen zien tussen de populairste ORM's. ORMMapper
Dapper en handgeschreven fetch-code zijn snel, en inderdaad, alle ORM's zijn langzamer dan de drie. LLBLGen met een resultset-cache is snel, maar het moet de resultset opnieuw itereren en het object opnieuw in het geheugen instantiëren. 7) Een asynchrone benadering implementeren in de Web API Het gebruik van een asynchrone Web API-service verhoogt het aantal HTTP-verzoeken dat web-API's verwerken drastisch. De implementatie is eenvoudig, gebruik gewoon het asynchrone trefwoord en verander het retourwaardetype van je methode naar Taak.
8) Geeft meerdere resultaatsets en combinaties van sets terug Het verminderen van het aantal overdrachten is niet alleen voordelig voor meerdere databases, maar ook voor web-API's, waardoor je de kracht van resultaatsets kunt benutten. Dit betekent dat je meerdere resultaatsets uit DataReader kunt halen, zie de volgende democode:
Je kunt meerdere objecten teruggeven in één enkele reactie vanuit een Web-API; probeer je teruggegeven objecten te combineren en geef de volgende objecten terug:
Dit zal HTTP-verzoeken naar je WEB API verminderen. Dank u voor het lezen van dit artikel.
|