我正在构建一个应用程序,在部署之后,我使用互联网上提供的几种工具对其进行了测试,其中一种是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);
}
我想把它变成异步方法。这会让它更快吗?或者您有其他解决方案吗?
答案 0 :(得分:0)
是的,async会加速这个,因为它们是可以并行执行的任务。但是你必须进行每次调用才能使你的记录异步,而不是只有一个异步方法同时调用它。在这种情况下,我假设你从同一个数据源(即数据库)访问News
和Paper
,因此你不确定你获得了多大的收益将负载放在数据库服务器上。
我建议您先阅读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#处理,从而进一步加快速度。