我建立了一个在线新闻门户,之前对我来说工作正常但有些人说主页很慢。当我想到它时,我看到了原因。
该网站的主页显示
现在,每个都是对db的单独查询。我有tableadapters数据集和数据表(标准数据访问方案)所以对于标题,我在我的新闻类中调用业务逻辑,它通过tableadapter返回数据表。从那里开始,我要么通过将数据绑定到控件来使用数据表,要么(大多数时候)将对象转换为(例如,新闻)列表,并从那里使用它。
为上述每一项做这件事似乎工作正常。至少它不会带来巨大的负担。但让我想知道是否有更好的方法。
例如,我上面描述的项目是一个高度动态的网站,当他们24小时不间断地从代理商处到达时插入新闻。所以在这种情况下缓存可能听起来不太好。但另一方面,我知道当地报纸还有另一个类似的项目。该网站每天只会更新一次。在这种情况下: 我是否只能运行一个查询,它将返回包含今天插入的所有新闻项的数据表,然后查询该数据表并将标题,地点和其他项目放置到网站上各自的位置?或者周围有更好的选择吗?我只是徘徊其他人如何以最有效的方式执行类似的任务。
答案 0 :(得分:2)
如果你的表现不佳,你的第一步就是不要开始捣蛋。 描述您的代码。找出它为什么慢的原因。传输页面,渲染页面或实际动态生成页面的速度是否减慢?单个查询花了太长时间吗?
找出瓶颈的确切位置并从内心解决问题。
即使在内容更新很快的情况下,缓存也是一个非常好的主意。只要您的缓存机制是智能的,您仍然可以节省大量的生成时间。对于新闻门户或博客而不是论坛,您可能会通过缓存系统大大提高性能。
答案 1 :(得分:2)
我认为你应该使用FireBug来找出需要时间加载的元素。有时大图像会破坏节目(屏幕上图像的大小并不总是与其下载大小相关)。
其次,您可以下载Yahoo Firefox插件YSlow,并调查您是否有任何放慢脚本。
但Firebug应该给你最好的评价。加载Firebug后,单击“Net”选项卡以查看页面中每个元素的加载时间。
答案 2 :(得分:1)
如果您发现延迟来自数据库,请检查您的表格,确保它们已正确编入索引,群集或其他任何您需要的内容,具体取决于表格中的数据量。此外,如果您使用的是动态查询,请尝试使用存储过程。
如果您想在一个数据库请求中完成多个查询,则可以。由于最初在完成所有查询之前不会显示任何数据,并且除了任何其他问题之外,您至少可以节省每次查询再次访问数据库的时间。 DataSet包含一组表,它们可以由同一请求中的多个查询生成。
ASP.NET为您提供了一个非常好的缓存机制(HttpContext.Cache),您可以将其包裹起来并使其更易于使用。由于您可以在缓存的对象上设置生命周期,因此您不必担心文章和标题不是最新的。
如果您正在为此网站使用WebForms,请为不需要它们的控件禁用ViewState,以便加载页面更快一点。更不用说大量的其他调整和更改,以加快页面加载(gzipping,最小化脚本等)。
在执行任何此操作之前,请执行Anthony suggested并分析您的代码。找出真正的问题是什么。