我正在阅读有关HTTP缓存的Google性能文档,文档号为https://developers.google.com/web/fundamentals/performance/optimizing-content-efficiency/http-caching,本文档指出我们应尽可能使用ETags。我正在使用ASP.NET Web Api 2.2。我现在正试图在我所有的公共API中实现ETag。我正在考虑使用MD5来实现ETag。我的意思是,我将使用MD5对每个请求散列json响应。对每个请求使用MD5.calculateHash是否有任何性能问题?我的json响应大小不太大(在1到20KB的范围内)。在ASP.NET Web API中使用MD5实现HTTP缓存Etag功能
0
A
回答
3
是的,会有性能问题。计算哈希需要时间。但是,您可能会发现,计算该散列的成本与通过将不变的字节传输到客户端所节省的性能相比并不显着。
但是,我们不能保证您能够通过Etags获得性能改善。这取决于很多事情。您是否要在每次请求时重新生成服务器上的Etag,以将其与传入请求进行比较?或者你打算创建一个etag值的缓存,并在资源更改时使它们失效?
如果您要在每个请求中重新生成etag,那么从数据库中提取数据并格式化表示的时间可能会大大超过在线路上发送几个字节所花费的时间。特别是如果整个表示可以适合单个网络数据包。
这里的关键在于询问您是否真的需要Etags的性能增益,并且这是否值得执行。通过设置缓存控制头来启用客户端专用缓存,可以为您提供所需的所有优势,而无需实施etags。
我有很多帖子说进入这个主题的详细信息:
相关问题
- 1. HTTP缓存和ETag头
- 2. ASP.NET Web API缓存
- 3. HTTP ETag的再现
- 4. ASP.NET Web API中的缓存选项
- 5. 在ASP.NET中使用缓存
- 6. 在asp.net中实现“预览”功能mvc
- 7. 在WCF中实现缓存功能所需的建议
- 8. 在ASP.NET缓存中缓存EF实体
- 9. 在HTTP协议中ETag和Content-MD5有什么区别?
- 10. 用Asp.Net Web Api实现Angular 2
- 11. '缓存控制和ETag在Angular2中
- 12. ASP.NET Core 2.0 Web API响应缓存
- 13. 如何在mvc 4 web api中使用HttpResponseMessage对象设置etag?
- 14. 在ASP.NET Web API中映射HTTP路由
- 15. 改造ETAG和缓存
- 16. ASP.NET核心Web API响应与过期缓存头缓存
- 17. 如何在Web应用程序中实现缓存?
- 18. 在Asp.net Web应用程序中实现Google Sheet API
- 19. 如何在asp.net mvc 2 web应用程序中实现交通灯功能?
- 20. 实现ASP.NET Web API可选参数
- 21. 如何使用linq2sql存储库在我的Asp.net Mvc中实现缓存策略?
- 22. 缓存实现
- 23. 用于实现文档编辑和查看Web应用程序功能的API?
- 24. 在Web API中实现实体框架
- 25. 如何在ASP.NET中实现通读文件缓存?
- 26. Memcache中的Md5缓存键
- 27. 更新HTTP ETag
- 28. 在WEB API中强制通过HTTPS实现HTTP DotNet
- 29. 为新的Vimeo PHP API实现缓存
- 30. 如何在Android中实现ListView缓存
没有数据库交互。我只是在每个请求上使用MD5散列响应json,并将它与IfNoneMatch头进行比较?做这个的最好方式是什么?顺便说一句,Google建议使用ETags – user960567 2014-10-28 19:55:02
@ user960567好吧,如果生成json响应的代价是零,那么生成哈希的代价可能低于通过线路发送字节的代价,所以返回Etag可能会使得感。 – 2014-10-28 20:04:00
Darrel,坦率地说,我在所有公共API中使用Azure Redis Cache X分钟。因此,我首先要做的是检查redis缓存的响应,如果存在(或不存在从数据库中获取它),然后将其采用缓存控制max-age = X分钟和ETag头返回响应。在发送带IfNoneMatch的响应检查ETag之前。如果相同,则为200,否则为200.您如何看待这种方法? – user960567 2014-10-28 20:14:37