1

我建立了一个在线新闻门户网站,之前它对我来说很好,但有人说主页有点慢。当我想到它时,我看到了一个原因。

网站首页显示

  1. 头条新闻
  2. 现场新闻(副标题
  3. 有图片的景点
  4. 阅读最多的新闻(作为标题)
  5. 评论最多的新闻(作为标题)
  6. 每个新闻类别 5 个新闻标题(总共 11 个,例如体育、经济、地方、健康等)

现在,每一个都是对数据库的单独查询。我有 tableadapter 数据集和数据表(标准数据访问场景),所以对于标题,我调用新闻类中的业务逻辑,它通过 tableadapter 返回数据表。从那里开始,我要么通过将数据表绑定到控件来使用数据表,要么(大多数情况下)对象将其转换为(新闻)列表,然后我从那里使用它。

为上述每一项执行此操作似乎都可以正常工作。至少它不会带来巨大的负担。但是让我想知道是否有更好的方法。

例如,我上面描述的项目是一个高度动态的网站,当新闻从机构 24 小时不间断地到达时插入。所以在这种情况下缓存可能听起来不太好。但另一方面,我知道当地报纸还有另一个类似的项目。该网站每天只会更新一次。在这种情况下:我是否可以只运行一个查询,它会返回一个包含今天插入的所有新闻项目的数据表,然后查询该数据表并将标题、热点和其他项目放在网站上各自的位置?或者周围有更好的选择吗?我只是想知道其他人如何以最有效的方式执行类似的任务。

4

3 回答 3

2

如果你的表现很差,你的第一步不是开始胡闹。分析您的代码。找出为什么它很慢。是传输页面、渲染页面还是动态生成页面的速度变慢了?单个查询是否耗时太长?

准确找出瓶颈在哪里,从根本上解决问题。

缓存也是一个非常好的主意,即使在内容更新得相当快的情况下也是如此。只要你的缓存机制是智能的,你仍然会节省大量的生成时间。对于新闻门户或博客而不是论坛,您可能会通过缓存系统大大提高性能。

于 2009-04-11T06:41:45.273 回答
2

我认为您应该使用 FireBug 找出哪些元素需要时间来加载。有时大图像会破坏节目(屏幕上图像的大小并不总是相对于其下载大小)。

其次,您可以下载 Yahoo Firefox 插件 YSlow 并检查您是否有任何变慢的脚本。

但 Firebug 应该给你最好的评价。加载 Firebug 后,单击“Net”选项卡以查看页面中每个元素的加载时间。

于 2009-04-11T07:35:19.810 回答
1

如果您发现延迟来自数据库,请检查您的表,确保根据表中的数据量对它们进行正确的索引、集群或其他任何您需要的操作。此外,如果您使用动态查询,请尝试使用存储过程。

如果您想在一个数据库请求中完成多个查询,您可以。由于最初在所有查询完成之前您不会显示任何数据,并且除非出现任何其他问题,因此您至少可以节省每次查询再次访问数据库的时间。DataSet 包含一组表,它们可以由同一个请求中的多个查询生成。

ASP.NET 已经为您提供了一个非常好的缓存机制 (HttpContext.Cache),您可以将其包裹起来并使其更易于使用。由于您可以为缓存对象设置生命周期,因此您不必担心文章和标题不是最新的。

如果您在该网站上使用 WebForms,请禁用那些并不真正需要它们的控件的 ViewState,以使页面加载速度更快一些。更不用说许多其他的调整和更改以使页面加载更快(gzipping、最小化脚本等)

尽管如此,在执行任何操作之前,请按照Anthony 的建议执行并分析您的代码。找出真正的问题是什么。

于 2009-04-11T07:12:02.037 回答