什么时候生成静态页面或动态生成更好?

时间:2012-06-24 22:47:34

标签: performance

标题几乎总结了我的问题。

生成静态页面的效率何时更高,用户可以访问,因为使用动态生成的查询数据库的页面?在什么情况下,一个人会比另一个人好。

2 个答案:

答案 0 :(得分:2)

要提供静态页面,您的Web服务器只需要从磁盘读取页面并发送它。实际上不需要任何处理。如果频繁访问页面,它可能会缓存在内存中,因此即使不需要磁盘访问。

动态生成页面显然会产生更多开销。无论查询多么简单,每次访问数据库都需要付费。 (在我最近工作的项目中,我测量了每个查询的最小开销为0.7ms,即使对于SELECT 1;也是如此)因此,如果您只能生成静态页面并将其保存到磁盘,则页面访问速度会更快。多快了?它只取决于动态生成页面的工作量。我们不知道你在做什么,所以我们不能对此发表评论。

现在,如果您生成静态页面并将其保存到磁盘,这意味着每次生成该页面的数据发生更改时,您都需要重新生成。如果数据更改的频率高于实际访问的页面,那么您可能正在做更多工作而不是更少!但在大多数情况下,这是一种非常不可能的情况。

更有可能的是,您在生成静态页面并将其保存到磁盘时遇到的最大问题是编码(并维护)用于在必要时重新生成页面的逻辑。您需要跟踪完全哪些数据进入每个页面,并且在代码中的每个位置可以更改数据,您需要调用重新生成所有相关页面。如果您忘记了一个,那么您的用户可能会在某些时候查看陈旧数据。

如果将每个请求的动态生成和缓存生成的页面混合在磁盘上,那么由于混合了两种样式,您的代码将难以阅读和维护。

在某些情况下,您无法在磁盘上真正缓存生成的页面 - 例如响应来自表单提交的POST请求。或者想象一下,当您的用户调用某些操作时,您必须向第三方API发送请求,并且将在该页面中使用从该API返回的数据。每次从API返回的内容可能会有所不同,因此在这种情况下,您需要每次都动态生成页面。

答案 1 :(得分:1)

静态页面(或更好的资源)充满内容,不会改变或至少不经常,并且不允许进一步查询:关于页面,联系,......

在这种情况下,查询这些页面没有任何意义。另一方面,我们有数据(例如在数据库中)并且想要查询它/给用户提供查询它的机会。在这种情况下,您可以向用户提供一个页面,该页面可以指定查询并返回包含动态生成数据的呈现页面。

在我看来,这取决于您想要呈现给用户的结果。它只是一个信息,或者是查询数据源的可能性。第一个结果在您执行某些操作之前已知,第二个(查询数据)在您拥有查询参数后已知,这意味着您事先不知道结果(可能为空或无效)。

这取决于您的体系结构,但是当您认为GET请求应该是幂等的时,使用代理缓存动态页面也应该很容易,并且当缓存上显示的数据发生新的事情时,缓存无效路径。在这种情况下,可以节省大量时间,因为系统的行为类似于缓存页面是静态的,而是来自文件系统,它们来自你的内存,这非常快。

干杯 悠闲