主页的异步方法加载速度更快

时间:2013-08-27 09:28:23

标签: asp.net-mvc asynchronous

我正在构建一个应用程序,在部署之后,我使用互联网上提供的几种工具对其进行了测试,其中一种是http://developers.google.com/speed/pagespeed/insights/

测试结束后,它告诉我服务器响应非常慢。我注意到,当我打开主页时,打开页面需要一段时间。

这是我的索引方法:

public ActionResult Index()
    {
        IndexModel indexModel = new IndexModel();

        indexModel.news = db.News.ToList().OrderByDescending(News => News.Date);
        indexModel.paper = db.Papers.ToList().OrderByDescending(Paper => Paper.Date);

        return View(indexModel);
    }

我想把它变成异步方法。这会让它更快吗?或者您有其他解决方案吗?

2 个答案:

答案 0 :(得分:0)

是的,async会加速这个,因为它们是可以并行执行的任务。但是你必须进行每次调用才能使你的记录异步,而不是只有一个异步方法同时调用它。在这种情况下,我假设你从同一个数据源(即数据库)访问NewsPaper,因此你不确定你获得了多大的收益将负载放在数据库服务器上。

我建议您先阅读asynchronous programming on MSDN

然而,正如mattytommo所提到的,你绝对应该限制你的查询,否则你可能会被故意攻击(而且无意中被谷歌机器人等攻击)

答案 1 :(得分:0)

indexModel对我来说似乎非常静态。我的意思是它没有任何依赖任何参数。您正在为所有请求提供所有记录。

为什么不将这些记录保存在ApplicationContext&只有在ApplicationContext

中缺少数据库时才转到数据库

我打赌这会让你的速度测试提高50%。

修改

将所有css文件和javascript文件捆绑到单个文件中并缩小它们。 这有助于您加快第一次加载速度。这将减少请求浏览器发送的数量,使其加载更快。

修改

修改您的代码如下

indexModel.news = db.News.OrderByDescending(News => News.Date).ToList();
indexModel.paper = db.Papers.OrderByDescending(Paper => Paper.Date).ToList();

这将在数据库中对其进行排序,从而减少c#处理,从而进一步加快速度。