我正在开发Visual Studio 2012中的web api,并为每次api调用返回JSON结果。
如何提高WEB API的性能?
答案 0 :(得分:5)
在设计Web API时,您应该记住以下事项:
HTTP压缩 - HTTP压缩既可用于响应主体(Accept-Encoding:gzip),也可用于请求主体(Content-Encoding:gzip)以提高HTTP API的网络性能< / p>
HTTP缓存 - 在API响应中提供Cache-Control标头。如果它们不可缓存,“Cache-Control:no-cache”将确保代理和浏览器理解这一点。如果它们是可缓存的,则需要考虑多种因素,例如缓存是否可以由代理共享,或者资源是“新鲜”多长时间。
缓存验证 - 如果您有可缓存的API匹配,则应在响应中提供Last-Modified或ETag标头,然后支持If-Modified-Since或If-None-Match请求标头条件请求。这将允许客户端检查其缓存副本是否仍然有效,并在不需要时阻止完整的资源下载。如果实施得当,您可以使条件请求比通常的请求更有效,并且还可以节省一些服务器端负载。
条件修改 - ETag标头也可用于启用资源的条件修改。通过在GET上提供ETag标头,稍后的POST,PATCH或DELETE请求可以提供If-Match标头,以检查它们是否正在更新或删除它们上次看到的相同状态的资源。
分块传输编码 - 如果您有大量内容响应,则Transfer-Encoding:Chunked是向客户端传输响应的好方法。它将减少服务器和中间服务器的内存使用要求(尤其是实现HTTP压缩),并提供更快的首字节响应时间。
无状态 - 始终保持应用程序服务器无状态,以便轻松,轻松地扩展它们。
批量操作 - 如果大多数客户可以发出更少的请求来获取或修改更多数据,那么它们的效果会更好。将批量操作构建到API中以支持这种用例是个好主意。
答案 1 :(得分:0)
这个话题太大了。任何具体细节?
大多数ASP.NET性能提示可能适用于web api:http://msdn.microsoft.com/en-us/library/cc668225.aspx
答案 2 :(得分:0)
首先,您的架构至关重要。 性能问题的80%根本原因是架构。我们不了解您的架构。
从我的角度来看,反向代理可用于促进应用程序服务器上的负载平衡。在应用程序服务器层,您是否有群集策略?您是否有缓存策略以避免访问数据库?
.....
通常,您需要平衡架构可伸缩性,可靠性,可扩展性,安全性,可用性和性能。
答案 3 :(得分:0)
使用protobuf通过网络序列化数据。
答案 4 :(得分:0)
性能取决于您使用Web API框架所做的事情。也许你应该看一下MVC分析工具:http://msdn.microsoft.com/fr-fr/library/2s0xxa1d.aspx
答案 5 :(得分:0)
我刚刚做了一个测试,使用nuget包WebApiContrib.Formatting.ProtoBuf,文件大小从9,5 mb(json)减少到3,35 mb(protobuf),用于25000个对象。
此外,您可以使用SQL而不是EntityFramework来进行大型查询结果。
如果您使用AutoMapper将POCO转换为DTO,您可以手动设置属性(更快的序列化)
最小化你的过滤器和HttpModules,它越轻,它就越快......(例如,身份验证过滤器......)