预生成资源表示

时间:2010-09-08 02:38:47

标签: architecture rest

我所拥有的假设是 -

  • 表示具有最后修改日期的定义。例如,生成资源的JSON表示的脚本具有上次修改脚本的时间。
  • 资源的持久存储没有任何存储限制

现在情况是我有资源,他们的表示可以是动态预先生成生成;其中预生成是指在修改资源时生成的 text / html application / atom + xml (可以异步完成)和即时生成是指例如在请求时生成表示的JSP / PHP脚本。

我感到困惑的是,预生成生成动态+缓存相比,性能增量有多大?您有什么经验/意见?

2 个答案:

答案 0 :(得分:1)

您询问性能,但不指出应执行的操作,因此我假设该指标是“响应时间”。

这两种方法只是彼此的变种。预生成只是一种不同的缓存方式。所以实际上,唯一的区别是一个是“懒惰”而另一个不是。

当所有资源都已缓存(并且不更改)时,延迟差异将为零。但性能差异根据几个参数而变化:

  • 生成项目所需的时间
  • 每个项目更改的次数
  • 每个项目的访问频率

一个临界点是指项目修改的频率低于访问

但还有很多其他因素需要考虑:

  • 预生成方案可以更好地扩展,因为如果请求数量增加,不需要额外的CPU
  • 预生成方案更具容错能力,因为应用程序关键路径中没有数据库
  • 如果资源X中的一个变化(例如,它被删除)导致1000个其他资源发生变化(例如,如果它们都链接到X),则很难做到预生成方案。它会比访问更频繁地增加资源修改的可能性。

答案 1 :(得分:0)

性能增益与生成所需的努力成比例;因此,如果需要大量资源(并且可能是时间)来构建表示,那么缓存是一个好主意。

因此,您需要做的第一件事是衡量构建表示的过程,并确定性能发生的位置。