我正在阅读有关https://developers.google.com/web/fundamentals/performance/optimizing-content-efficiency/http-caching的HTTP缓存的Google性能文档,该文档说我们应尽可能使用ETag。我正在使用ASP.NET Web Api 2.2。我现在正试图在我的所有公共api中实现ETag。我想用MD5实现ETag。我的意思是,我将使用MD5在每个请求上散列json响应。在每个请求上使用MD5.calculateHash是否有任何性能损失?我的json响应大小不是太大(在1到20KB的范围内)。
答案 0 :(得分:3)
是的,会有性能受到打击。计算哈希需要时间。但是,您可能会发现,与通过线路将未更改的字节传输到客户端所节省的性能相比,计算该哈希的成本并不重要。
但是,无法保证您将使用Etags获得性能提升。这取决于很多事情。您是否要在每次请求时重新生成服务器上的Etag以将其与传入请求进行比较?或者您是否要创建etag值的缓存并在资源更改时使其无效?
如果要在每个请求上重新生成etag,那么从数据库中提取数据和格式化表示所花费的时间可能会远远高于通过网络发送几个字节所花费的时间。特别是如果整个表示可以适合单个网络数据包。
这里的关键是询问你是否真的需要Etags的性能提升,是否值得付出实施的代价。设置缓存控制标头以启用客户端私有缓存可以为您提供所需的所有好处,而无需实现etags。
我有很多帖子更详细地介绍了这个主题: