我正在构建一个应用程序,在部署它之后,我用互联网上的几个工具对它进行了测试,其中一个是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);
}
我想把它变成一个异步方法。这会让它更快吗?或者你有其他解决方案吗?
是的,async会加快速度,因为它们是可以并行执行的任务。但是,你必须让每个调用都异步,而不仅仅是一个同时调用两个调用的异步方法。不过,在这种情况下,我假设你从同一数据源(即数据库)访问News
和Paper
,因此,由于你在数据库服务器上加载了负载,所以不确定你能获得多大的收益。
我建议您从阅读MSDN上的异步编程开始。
然而,正如mattytomo所提到的,你一定要限制你的查询,否则你可能会被故意(和无意地被谷歌机器人等)的拒绝服务攻击
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处理,从而进一步提高速度。