在 ASP.MVC (1.0) 项目中,我设法从 RSS 提要获取天气信息并将其显示出来。我遇到的问题是性能:
我已经在 Site.Master 文件中放置了一个 RenderAction() 方法(效果很好),但是我担心如果用户在菜单点 1 上单击菜单点 1,在菜单点 2 上几秒钟后,在几秒钟后,它将如何表现菜单点 3, .... 从而使 RSS 提要一次又一次地请求新信息!
这可以以某种方式避免吗?(以某种方式仅加载此信息一次?)
提前致谢!
在 ASP.MVC (1.0) 项目中,我设法从 RSS 提要获取天气信息并将其显示出来。我遇到的问题是性能:
我已经在 Site.Master 文件中放置了一个 RenderAction() 方法(效果很好),但是我担心如果用户在菜单点 1 上单击菜单点 1,在菜单点 2 上几秒钟后,在几秒钟后,它将如何表现菜单点 3, .... 从而使 RSS 提要一次又一次地请求新信息!
这可以以某种方式避免吗?(以某种方式仅加载此信息一次?)
提前致谢!
您可以使用服务器缓存:
public ActionResult Index()
{
// try getting the weather from the cache
object weather = HttpContext.Cache.Get("weather");
if (weather == null)
{
// weather not cached => fetch it from RSS
weather = Repository.FetchWeather();
// store in cache for the 5 next hours
HttpContext.Cache.Add(
"weather",
weather,
null,
DateTime.Now.AddHours(5),
Cache.NoSlidingExpiration,
CacheItemPriority.Normal,
null
);
}
return View(weather);
}
我想如果我正在编写这个应用程序,我会下载天气详细信息并将它们存储在本地的 db 或 xml 文件中并从中读取。
除非您是天气频道或其他什么,否则天气不会发生太大变化,您需要每分钟更新一次。
或者,您可以将其编写为一个线程,并在加载完成后让它报告。顺便说一句,VS 2010 使这成为小菜一碟。
因此,解决这个问题可能是让您的代码能够取消请求,并且您不能将其作为单线程应用程序运行。您将需要能够在一个线程上启动一个请求并在另一个请求上取消该请求。
面对这种情况,我会在本地托管它并每隔一段时间运行一个进程来更新来自 RSS 提要的数据。