0

标题几乎概括了我的问题。

与使用查询数据库的动态生成页面相比,何时生成用户可以访问的静态页面更有效?至于在什么情况下会比另一种更好。

4

2 回答 2

2

要提供静态页面,您的 Web 服务器只需要从磁盘读取页面并将其发送。几乎不需要处理。如果页面被频繁访问,它很可能会被缓存在内存中,因此甚至不需要磁盘访问。

动态生成页面显然有更多的开销。无论查询多么简单,您进行的每一次数据库访问都会产生成本。(在我最近工作的一个项目中,我测量了每个查询的最小开销为 0.7 毫秒,即使对于SELECT 1;. 快多少?这仅取决于动态生成页面所做的工作量。我们不知道你在做什么,所以我们不能对此发表评论。

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

更有可能的是,您在生成静态页面并将它们保存到磁盘时遇到的最大问题是编码(和维护)在必要时重新生成页面的逻辑。您将需要准确跟踪进入每个页面的数据,并且在代码中可以更改数据的每个地方,您都需要调用所有相关页面的重新生成。如果您只忘记了一个,那么您的用户可能有时会查看过时的数据。

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

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

于 2012-06-24T23:05:16.610 回答
1

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

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

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

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

干杯悠闲

于 2012-06-24T23:03:18.003 回答