0

嗯,这是一个如何设计一个比普通网站使用更少资源的网站的问题。移动端也进行了优化。

就是这样:我正要展示例如 5 个帖子(来自例如博客)的具体概述。然后,如果我点击例如第一篇文章,我会在新窗口中加载这篇文章。但是,与其再次连接到数据库并获取具有特定 ID 的特定帖子,我只需在我之前创建的 5 个帖子的数组中查找该帖子(在 PHP 中),当我获取网站时第一次。

它会保存要下载的数据吗?因为 PHP 也可以在服务器端工作,所以这就是我不确定的原因。

好的,我再解释一下:

方法一:

  1. 用户连接到我的网站
  2. 5 个帖子被显示并保存到一个数组中(连同它的所有数据)
  3. 用户点击第一个帖子并期望获得有关此帖子的更多信息。
  4. 我的程序在我的数组中查找帖子并显示它。

方法二:

  1. 用户连接到我的网站
  2. 5 个帖子被显示
  3. 用户点击第一个帖子并期望获得有关此帖子的更多信息。
  4. 我的程序再次连接到 MySQL 并从服务器获取帖子。
4

5 回答 5

2

首先,这听起来像是过早优化的情况。在测量证明这是明智之举之前,我不会开始缓存数据库之外的任何内容。缓存将您的注意力从手头的核心任务上移开,并引入了复杂性。

如果您确实想将 DB 结果保存在内存中,仅使用在 PHP 处理的 HTTP 请求中分配的数组是不够的。处理完页面后,在该范围内分配的内存不再可用。

您当然可以将结果放在 SESSION 范围内。在 SESSION 中保存一些 DB 结果的好处是可以避免 DB 往返。缺点包括对解决方案进行编程的复杂性增加,在 Web 服务器中使用内存来存储可能永远不会被访问的数据,以及增加数据库中的初始负载以检索用户可能会或可能不会每次都请求的额外页面。

如果 DB 性能在测量后确实导致您错过了性能目标,您可以使用成熟的缓存系统(例如memcached)将经常访问的数据保存在 Web 服务器(或专用缓存服务器)的内存中。

最后说明:你说

PHP 也可以在服务器端工作

那不准确。PHP仅在服务器端工作。

于 2013-01-28T18:23:09.227 回答
1

对我来说,这比第二次调用数据库效率低一点,这就是原因。

第一个查询应该只提取您想要的字段:标题、作者、日期。帖子的内容可能是一个繁重的查询,所以我会排除它(如果你愿意,你可以拉一个预告片)。

然后,如果用户想要帖子的详细信息,我将使用索引键列查询内容。

这样,您就不会为 5 个可能从未见过的帖子提取内容。

于 2013-01-28T18:28:37.833 回答
1

如果您的 PHP 代码不断地重新连接到数据库,则说明您配置错误并且没有正确使用连接池。如果您已正确调整堆栈,则查询的执行时间最多应为几毫秒。除非绝对必要,否则不要缓存。

你在这里提倡的是回避一个严重的问题。如果您的数据库配置正确,数据库查询应该毫不费力。解决这个问题,你就不需要走缓存之路了。

将数据从一个请求保存到另一个请求是一种失败的设计,如果做得不完美,可能会导致令人尴尬的数据泄露情况,即一个用户看到的是针对另一个用户的内容。这就是为什么在所有其他途径都用尽之后,通常会采用缓存的原因。

于 2013-01-28T18:31:12.210 回答
1

您是否考虑过将帖子保存在 div 中,并且仅在用户单击某处时才使其可见?在这里如何做到这一点。

于 2013-01-28T18:22:56.713 回答
1

在代码和数据库之间放置某种缓存。

所以你的代码看起来像

if(isPostInCache()) {
    loadPostFromCache();
} else {
    loadPostFromDatabase();
}

去找一些缓存系统,网络上到处都是。您可以使用 memcached 或您可以自己制作的静态缓存(即将帖子保存在服务器上的 txt 文件中)

于 2013-01-28T18:25:18.820 回答