一般缓存和MVC中的缓存

时间:2015-01-01 13:38:36

标签: jquery ajax asp.net-mvc caching browser-cache

我需要澄清一下缓存的工作方式。

我有一个具体的问题:

我在该页面中有一个主页面(索引)我有很多静态元素(标题,文本等等),我在该页面中还有一个下拉列表是在DOM完全加载时进行初始化,让我放大一点,这样你就能抓住我的漂移:

加载我的索引页面,在加载页面后,我在AJAX(带有Jquery)中发送请求,获取"选项"对于DB(SQL Azure)的下拉列表,我这样做是为了首先向用户显示页面然后从数据库中获取数据(因此用户不会等待额外的第二个页面加载)。 / p>

现在当我缓存该页面时,是否还要缓存下拉列表的请求?

你想看一些代码吗?肯定的。

我正在使用MVC架构设计,因此我的代码如下所示:

家庭控制器:

 // The Action that display the Index page
 public class HomeController : Controller
{
    [OutputCache(Duration=60*60)]
    public ActionResult Index()
    {

        return View();
    }

 // The Action that get the data from the DB.
    [OutputCache(Duration=15)]
    public JsonResult GetProfiles()
    {
         Dictionary<string, string> ProfileDictionary  = DataQueries.GetUserProfiles();

         return Json(ProfileDictionary);
    }

索引页面的一部分:

 <div class="gap-bottom" >
    <h2><span class="font-Droid">Step 2: </span><span class="font-Crete">Select Profile</span></h2>
    <p>Pick a profile....</p>
    @Html.DropDownList("filterSelect", new MultiSelectList(new[] { "Choose Profile" }), new { @style = "width: 50%", @class = "form-control" })

</div>

索引页面的脚本

 $.ajax({
            type: 'POST',
            url: '/Home/GetProfiles',

            success: function (data) {
                $.each(data, function (key, value) {

                    $('#filterSelect').append($("<option></option>").attr("value", value).text(key));

                });

            },
            error: function (ts) {
                if (ts.readyState == 0 || ts.status == 0) return;
                alert(ts.responseText)
            }

        });

所以我的问题是:

如果我缓存页面,下拉列表是否也被缓存?或者我需要像我一样在spsfic中缓存Action?

底线,我希望将页面长时间(如小时)和下拉列表缓存10秒钟。

我自己做了一些测试(使用Google Chrome浏览器的网页检查器中的网络标签)和索引页面,我看到某些时候&#34; 200 OK&#34;有时&#34; 304未修改&#34;,当我刷新页面时,它的比例为1:1一次200 ok,有时304未修改。

关于下拉列表,我总是从/ Home / GetProfiles获得200 OK,正如我所看到的,这个动作根本不是缓存。

当我查看标题时(在Google Chrome中的网络标签中),我看到了两个请求(localhost - get index page,Home / GetProfiles - POST get profiles)

  

缓存控制:最大年龄= 0

在回复标题中看到:

本地主机:

  

Cache-Control:public,max-age = 3427

GetProfiles:

  

缓存控制:public,max-age = 20

这就是我想要在那里(在请求的标题中并回复)?如果它可以只缓存X秒的页面和使用AJAX的Y秒请求?

感谢。

1 个答案:

答案 0 :(得分:0)

您的ajax请求将始终命中服务器,因为您正在使用POST请求。将其更改为GET以查看差异。

[RFC 2616第9.1节(POST)] http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.1