Json 如何提高ASP.NET MVC WEB API的性能?

Json 如何提高ASP.NET MVC WEB API的性能?,json,rest,Json,Rest,我正在Visual studio 2012中开发web api,并为每个api调用返回JSON结果 如何提高WEB API的性能?这个话题太大了。有什么具体细节吗 大多数ASP.NET性能提示可能适用于web api:这是一个太大的主题。有什么具体细节吗 大多数ASP.NET性能提示可能适用于web api:在设计web api时,您应该牢记以下几点: HTTP压缩—HTTP压缩可用于响应主体接受编码:gzip和请求主体内容编码:gzip,以提高HTTP API的网络性能 HTTP缓存-在API

我正在Visual studio 2012中开发web api,并为每个api调用返回JSON结果


如何提高WEB API的性能?

这个话题太大了。有什么具体细节吗


大多数ASP.NET性能提示可能适用于web api:

这是一个太大的主题。有什么具体细节吗


大多数ASP.NET性能提示可能适用于web api:

在设计web api时,您应该牢记以下几点:

HTTP压缩—HTTP压缩可用于响应主体接受编码:gzip和请求主体内容编码:gzip,以提高HTTP API的网络性能

HTTP缓存-在API响应上提供缓存控制头。如果它们不可缓存,“缓存控制:无缓存”将确保代理和浏览器理解这一点。如果它们是可缓存的,则有多种因素需要考虑,例如缓存是否可以由代理共享,或者资源“新鲜”多长时间。p> 缓存验证-如果有可缓存的API命中,则应在响应中提供上次修改或ETag头,然后支持If-Modified-Since或If-None匹配条件请求的请求头。这将允许客户端检查其缓存副本是否仍然有效,并在不需要时阻止完整的资源下载。如果实现得当,您可以使条件请求比通常的请求更高效,还可以节省一些服务器端负载

条件修改-ETag头还可用于启用资源的条件修改。通过在GET上提供ETag头,以后的POST、PATCH或DELETE请求可以提供If Match头,以检查它们是否正在更新或删除与上次看到资源时处于相同状态的资源

分块传输编码-如果您有大量的内容响应,那么传输编码:分块传输是将响应流式传输到客户机的一种很好的方式。它将减少内存使用需求,特别是在实现服务器和中间服务器的HTTP压缩时,并提供更快的第一个字节响应时间

无状态-始终保持应用程序服务器无状态,以便轻松轻松地进行扩展


批量操作—如果大多数客户端能够发出更少的请求来获取或修改更多数据,那么它们的性能会更好。将批量操作构建到API中以支持此类用例是一个好主意。

在设计web API时,您应该牢记以下几点:

HTTP压缩—HTTP压缩可用于响应主体接受编码:gzip和请求主体内容编码:gzip,以提高HTTP API的网络性能

HTTP缓存-在API响应上提供缓存控制头。如果它们不可缓存,“缓存控制:无缓存”将确保代理和浏览器理解这一点。如果它们是可缓存的,则有多种因素需要考虑,例如缓存是否可以由代理共享,或者资源“新鲜”多长时间。p> 缓存验证-如果有可缓存的API命中,则应在响应中提供上次修改或ETag头,然后支持If-Modified-Since或If-None匹配条件请求的请求头。这将允许客户端检查其缓存副本是否仍然有效,并在不需要时阻止完整的资源下载。如果实现得当,您可以使条件请求比通常的请求更高效,还可以节省一些服务器端负载

条件修改-ETag头还可用于启用资源的条件修改。通过在GET上提供ETag头,以后的POST、PATCH或DELETE请求可以提供If Match头,以检查它们是否正在更新或删除与上次看到资源时处于相同状态的资源

分块传输编码-如果您有大量的内容响应,那么传输编码:分块传输是将响应流式传输到客户机的一种很好的方式。它将减少内存使用需求,特别是在实现服务器和中间服务器的HTTP压缩时,并提供更快的第一个字节响应时间

无状态-始终保持应用程序服务器无状态,以便轻松轻松地进行扩展


批量操作—如果大多数客户端能够发出更少的请求来获取或修改更多数据,那么它们的性能会更好。将批量操作构建到API中以支持此类用例是一个好主意。

首先,您的体系结构很重要。 性能问题的80%根本原因是体系结构问题。我们不知道您的体系结构

在我看来,反向代理可以用来促进应用服务器集群上的负载平衡。在应用服务器层,您是否有Clu 战略?您是否有避免访问数据库的缓存策略


一般来说,您需要平衡体系结构的可伸缩性、可靠性、可扩展性、安全性、可用性和性能。

首先,您的体系结构很重要。 性能问题的80%根本原因是体系结构问题。我们不知道您的体系结构

在我看来,反向代理可以用来促进应用服务器集群上的负载平衡。在应用服务器层,您有集群策略吗?您是否有避免访问数据库的缓存策略


一般来说,您需要平衡体系结构的可伸缩性、可靠性、可扩展性、安全性、可用性和性能。

使用protobuf进行数据的在线序列化。

使用protobuf进行数据的在线序列化。

性能取决于您对Web API框架所做的操作。也许您应该看看MVC评测工具:

性能取决于您对Web API框架所做的操作。也许你应该看看MVC评测工具:

我刚刚做了一个测试,使用nuget软件包WebApiContrib.Formatting.ProtoBuf,25000个对象的文件大小从9,5 mb json减少到3,35 mb ProtoBuf

此外,对于大型查询结果,您可以使用SQL而不是EntityFramework

如果使用AutoMapper将POCO转换为DTO,则可以手动设置属性,使序列化速度更快


并尽量减少过滤器和HttpModules,它越轻,运行越快。。例如,身份验证过滤器

我刚刚做了一个测试,使用nuget包WebApiContrib.Formatting.ProtoBuf,25000个对象的文件大小从9,5 mb json减少到3,35 mb ProtoBuf

此外,对于大型查询结果,您可以使用SQL而不是EntityFramework

如果使用AutoMapper将POCO转换为DTO,则可以手动设置属性,使序列化速度更快


并尽量减少过滤器和HttpModules,它越轻,运行越快。。例如,身份验证过滤器

您需要发布一些代码以及为什么您认为性能需要改进?您需要发布一些代码以及为什么您认为性能需要改进?