在ASP.MVC(1.0)項目中,我設法從RSS提要中獲取天氣信息並顯示出來。我有的問題是性能:如何將天氣信息添加到只評估一次?
我已經把Site.Master文件中的RenderAction()方法(它完美地工作),但我擔心如果用戶點擊菜單點1後,它將如何行爲,之後在菜單點2之後幾秒鐘,在菜單點3之後幾秒鐘,....因此使得RSS饋送一次又一次地請求新的信息!
這可以以某種方式避免? (以某種方式加載此信息只有一次?)
在此先感謝!
在ASP.MVC(1.0)項目中,我設法從RSS提要中獲取天氣信息並顯示出來。我有的問題是性能:如何將天氣信息添加到只評估一次?
我已經把Site.Master文件中的RenderAction()方法(它完美地工作),但我擔心如果用戶點擊菜單點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源中的數據。
感謝您的答覆!說實話,我沒有考慮在本地存儲數據......但它非常有意義!我會試試這個! – 2010-05-19 06:16:57
非常感謝Darin!老實說(再次)......從來沒有想過這個。我不得不承認,這是非常快速和非常明確的實施。不知道它如何在生產中表現出來,但我認爲它比XML文件混亂更好(儘管這也是一個很好的解決方案)。 非常感謝! – 2010-05-19 18:36:36