【问题标题】:How does StackOverflow optimise the performance for the display of the questions?StackOverflow 如何优化问题显示的性能?
【发布时间】:2009-03-24 06:24:15
【问题描述】:

我正在尝试学习 C#.net 来编写 Web 应用程序。

得知 stackoverflow 使用 C#.net,我很高兴发现它。

每当我刷新页面时,我都会在主页或问题部分注意到这一点。该页面始终以可接受的速度向我返回最新信息。

我不知道你是怎么做到的。对不起,一连串的问题。我正在尝试了解数据检索、分页、性能等方面的最佳实践

我知道主页只返回有限数量的问题及其统计信息,但问题部分实际上返回了所有内容。

你如何优化它?

  1. 对于主页,您是否总是获取最近问题的所有统计信息?所以您的查询类似于“select * from questions order by datetime_created limit 20”?

    所以 * 包含所有信息,包括问题标题、ID、视图等?

    您是否使用 HttpContext.Current.Server.cache 来帮助解决这个问题?

  2. 对于这些问题,这更有趣。

    你是如何进行分页的?

    您是否总是只从数据库中获取特定页面的结果?

    或者您是否获取所有结果并将其存储到数据集中?然后你使用某种数据网格控件来帮助分页?

如果是后者,如何维护要更新的数据?

【问题讨论】:

  • 请向 Jeff 发送一些具体的问题,这里没有人知道他是如何实现他的东西的
  • 嗨,您是指通过电子邮件发送到 team@stackoverflow.com 吗?如果那是正确的发送地点,我会的。我只希望我没有滥用它,仅此而已。

标签: c# asp.net database-design paging


【解决方案1】:

在 Stack Overflow 上,我们尝试在多个级别上使用主动缓存:

  • 页面完全由 IIS 的输出缓存缓存,无论用户身份验证如何
  • 仅为匿名用户缓存的页面;注册用户查看最新内容
  • 为所有人缓存的部分页面 html; HttpRuntime.Cache 用于此

主页由三个缓存的 html 片段组成 - 最近的问题、最近的标签、最近的徽章 - 每个都有不同的持续时间。

问题列表页面将缓存特定排序/标签过滤器的所有问题的 ID (Int32[]),从而使分页变得微不足道。对统计数据(例如问题计数、相关标签计数)的进一步缓存也已完成。

问题详情页面将完全缓存给匿名用户,而注册用户则可以看到最新商品。此外,侧面的相关问题会在更长的时间内缓存到磁盘。

虽然我们尝试尽可能缓存整个页面,但我们确实会在页面顶部显示用户信息 - 某些部分无法缓存。

因此,像拼图一样看待缓存 - 哪些部分可以在我的所有请求之间安全共享?根据费用,我的所有请求必须共享哪些部分?

【讨论】:

  • 直奔马口。
【解决方案2】:

我不知道他们是怎么做到的——我没有写 SO。

对于这样的事情,我会为整个 Question 类及其所有 Answers 使用某种缓存机制。缓存将是短暂的,但由于经常查看新/热门问题,它们将保持活跃。较早的问题必须向 DB 提出。当一个人回答问题而另一个线程查看问题时,这也可以防止线程问题。

您可以在这里注意到的另一件事是他们大量使用 AJAX。但是由于 AJAX.Net 非常浪费带宽,他们实现了 AJAX 调用,因此他们将返回简单的 JSON 对象,例如当只对具有新票数的成功对象进行投票或返回错误消息时,例如:(这是一个虚构的示例,并不代表发生的情况,因为我懒得检查正确现在)

{"status": "ok", "votes": 3}

AJAX.Net 将返回整个UpdatePanel 的内容,无论其大小如何,无论多么小,仍然会很大。

【讨论】:

    【解决方案3】:

    SO 使用 MVC 和 LINQ2SQL。我会听一些podcasts 来了解更多细节。我知道他们使用了很多缓存,但不确定这是否包括主页上的问题列表。

    【讨论】:

      【解决方案4】:

      您可能还想看看这个Stack Overflow Inspired Knowledge Exchange

      这是一组试图模仿 Stack Overflow 的文章。您应该可以在 CodePlex 找到代码库 here

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-03-29
        • 1970-01-01
        • 2011-10-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多