首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >对于将被缓存的资源来说,忽略糟糕的性能可以吗?

对于将被缓存的资源来说,忽略糟糕的性能可以吗?
EN

Software Engineering用户
提问于 2012-12-12 17:28:07
回答 3查看 337关注 0票数 3

假设我的web服务写得不好,效率很低,但是它的输出是缓存的,所以没有瓶颈。你就这么丢下它吗?如果你知道性能问题会被掩盖,你会走上深思熟虑的捷径吗?

EN

回答 3

Software Engineering用户

发布于 2012-12-12 17:40:07

在短期内,是的,没关系。

从长远来看,你会被烧死的。所以不,这真的不好。

是的,不,实际上取决于您的商店;存在的积压量;以及这个特定功能有多重要。

缓存以掩盖性能问题是一种拐杖,也是一种技术债务。真正的问题是当您必须开始在该区域内进行更改或更新时。缓存是解决此问题的第一层创可贴.未来的变化将导致越来越多的创可贴,直到你解决了问题的根源。

如果可以在环境的约束范围内合理地轻松地修复它,那么就应该修复它。尤其是如果它是一个不稳定的区域。

如果您正在考虑选择快捷方式,知道您可以使用缓存的拐杖,那么您已经走错了路。

票数 3
EN

Software Engineering用户

发布于 2012-12-12 20:10:12

就像往常一样,这取决于。缓存可以在“极大”和“完全不”之间提高性能,甚至可以降低性能。

如果您的资源经常读取,但很少更改,缓存通常是一个好主意,特别是当生成它是非平凡的时候。但是,如果它每改变几个请求,就没有必要缓存它。

另外,使用几层缓存可能是有益的--例如,HTTP级别的响应缓存为相同请求提供相同的响应,内存缓存保存容易处理的数据集,另一个缓存保存用于进一步处理的原始数据块,当然还有数据库和文件系统附带的缓存。您想要在几个级别缓存的原因是,在不同的点上,您可以匹配相同的条件和相同的结果,并且只要有意义,您就想在每一种情况下缓存。

您需要记住的另一个因素是,大多数数据不必是实时可用的。提供数据通常是可以接受的,例如,一个小时左右的数据,即使存在较新的数据。如果是这样的话,您可以在一个单独的进程中生成您的资源,在完成新版本之前为以前的版本提供服务,然后执行快速原子替换(例如重命名文件或通过原子数据库操作)。这样,您总是可以在任何时候都获得最大的性能,而您仍然可以花费一些时间来生成资源。而且,更好的是,如果需要的话,生成器可以在另一台机器上运行,这样就不会使web服务器本身陷入困境。当然,在此基础上添加一层缓存并不有害;毕竟,从RAM中服务仍然比从磁盘上提供服务快一个数量级。

票数 2
EN

Software Engineering用户

发布于 2012-12-12 17:42:44

告诉您它是或不合适是非常不准确的,因为它最终是在实现时间和您希望您的程序执行得有多好之间进行权衡。我认为不公平地说,程序性能总是优先于性能,因为最终软件行业和任何其他行业一样是一个企业,一些权衡是可以接受的。

但是,我认为唯一可以忽略将被缓存的资源性能较差的情况是,如果您计划在程序启动时预加载大量资源,而您的缓存也不弱(您不会丢弃旧数据以支持新数据)。用户往往对等待时间没有耐心,但如果他们期望等待,比如打开程序或创建报告的时候,他们也更容易容忍。您可以利用这一点,加载一次,并将此资源放置在缓存中。只是不要将糟糕的性能与延迟加载结合在一起,因为这会在用户不期望的情况下造成意外的延迟。

当然,最后一定要解决这个性能问题。

票数 1
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/179194

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档