asp.net-mvc – 神秘的ASP.NET MVC Action高延迟问题?
使用Firebug和Chrome开发人员工具,我可以看到通过一个动作加载一些 javascript和css文件可以在我的开发机器上花费额外的500ms.这发生在不同的调用上的不同文件,并且不管我把它们放在什么样的顺序上.如果我直接链接到这个文件,这个500ms的延迟是不会发生的.我可以一遍又一遍地刷新页面,并获得不同的值,但是它们总是在请求时间内添加500ms.如果我保持刷新页面,额外的500ms显示在不同的单个文件或有时两个文件,其中一个是1000ms延迟,如下图所示. 编辑 将Monitor.Enter放入我的HttpModule的BeginRequest和EndRequest中的Monitor.Exit导致延迟消失,所以我猜测它与线程多个请求有关. 我使用Evan Nagel here描述的方法进行缓存,但是当我使用刚刚传递原始文件的操作将链接替换为我自己的控制器时,会发生同样的情况: public FileResult RawFile(string path,string contentType) { var server = HttpContext.Server; string decodedPath = server.UrlDecode(path); string mappedPath = server.MapPath(decodedPath); return File(mappedPath,contentType); } 这是我的html头部的代码: <link rel="stylesheet" href="@Url.Action("RawFile",new { controller = "Content",path = "~/Content/Site.css",contentType = "text/css" })" type="text/css" /> <script src="@Url.Action("RawFile",path = "~/Scripts/debug/FBINFO.js",contentType = "application/x-javascript" })" type="text/javascript"></script> <script src="@Url.Action("RawFile",path = "~/Scripts/jquery-1.4.1.min.js",contentType = "application/x-javascript" })" type="text/javascript"></script> 这似乎不会在我的生产服务器上发生,至少不是很频繁,但是更难说,因为延迟更高.这是不是不要担心?会造成什么?它发生在Cassini和我的本地IIS服务器在Windows 7 Home Ultimate 64位. 我添加了一个自定义属性来调用调用,OnAction / OnResult Executing和Executed之间的时间通常是毫秒级.我在操作方法周围使用了一个秒表(ZipController写入响应流并且不返回结果),并且时间同样总是很小,平均为1.5ms,总是在10ms以下. 在Fiddler头文件中我唯一真正的区别是X-AspNetMvc-Version头,所以我设置它不被追加,甚至删除X-AspNet-Version头无效.我尝试启用和禁用压缩,以及我能想到的其他一切.这是在我添加了自己的Cache-Control和ETag头后没有效果.有趣的是,即使在不发送身体的304未修改响应的情况下,也会发生500ms的延迟.有时两个文件会有延迟,一个500ms,另外1000ms. 直接文件: HTTP/1.1 200 OK Content-Type: application/x-javascript Last-Modified: Sun,29 May 2011 22:42:27 GMT Accept-Ranges: bytes ETag: "b57a84af511ecc1:0" Server: Microsoft-IIS/7.5 Date: Mon,30 May 2011 04:38:20 GMT Content-Length: 1336 RawFile动作: HTTP/1.1 200 OK Cache-Control: public Content-Type: application/x-javascript ETag: "CD9F383D0537373C6D2DC8F60D6519A6" Server: Microsoft-IIS/7.5 Date: Mon,30 May 2011 04:34:37 GMT Content-Length: 1336 根据IanT8的评论,我添加了一个HttpModule来跟踪开始/结束请求,以及添加日志调用作为我的动作方法的第一个和最后一个语句.长篇小说,两个请求同时进入,在执行第二个调用的动作方法之前,在第一个EndRequest之后发生500ms的延迟.这个延迟通常是499ms,一次是497ms,一次498ms,一次492ms. 2011-05-31 00:55:19.1874|INFO|20110531 00:55:19.196 BeginRequest: http://localhost:51042/Zip/Style?Path=~/Content/Site.css 2011-05-31 00:55:19.1874|INFO|20110531 00:55:19.197 BeginRequest: http://localhost:51042/Zip/Script?Path=~/Scripts/jquery-1.4.1.min.js|~/Scripts/debug/FBINFO.js 2011-05-31 00:55:19.2034|INFO|20110531 00:55:19.203 Style() Start 2011-05-31 00:55:19.2034|INFO|20110531 00:55:19.208 Style() End 2011-05-31 00:55:19.2034|INFO|20110531 00:55:19.212 EndRequest: http://localhost:51042/Zip/Style?Path=~/Content/Site.css 2011-05-31 00:55:19.7044|INFO|20110531 00:55:19.704 Script() Start 2011-05-31 00:55:19.7044|INFO|20110531 00:55:19.712 Script() End 2011-05-31 00:55:19.7044|INFO|20110531 00:55:19.713 EndRequest: http://localhost:51042/Zip/Script?Path=~/Scripts/jquery-1.4.1.min.js|~/Scripts/debug/FBINFO.js 现在真的很有趣的部分.我在HttpModule上创建了一个静态对象,并在EndRequest中的BeginRequest和Monitor.Exit中调用Monitor.Enter.延迟消失了. Chrome显示一个通话约15-20ms,另外一个通话需要30-40ms,因为它必须等待第一个通话结束,但是500ms的延迟已经消失.这个解决方案显然不是最佳的. 解决方法尝试禁用会话(SessionStateAttribute).(编辑:鄂州站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-identity – UseOAuthBearerTokens vs UseOAuthBea
- asp.net-mvc – 在MVC Controller中访问GET参数
- asp.net-mvc – MVC应用程序调试错误:viewstate MAC的验证
- Asp.net Core 1.1 升级后操作mysql出错的解决办法
- 强烈推荐的一个工具ReSharper
- asp.net-mvc – 如何在ASP.NET MVC中生成弹出页面链接
- asp.net – Oracle.ManagedDataAccess:TNS:无法解析指定的
- asp.net-core – 如何使用FluentValidation.AspNetCore和Fl
- asp.net核心 – 如何排除在ASP.NET Core中发布文件?
- asp.net-mvc – ControllerActionInvoker
- asp.net-mvc – LabelFor和TextBoxFor不生成相同
- asp.net-mvc-3 – System.Web.Mvc.HandleErrorIn
- asp-classic – 如何使用AES在VBScript中进行加密
- asp.net-mvc – 删除布局将默认为_ViewStart,为什
- ASP.NET Web API,Web服务发现和客户端创建
- asp.net – FF和IE不从CSS加载img src
- asp.net-mvc-3 – 具有最佳实践的示例N层ASP.NET
- 在asp.net mvc中如何使用usercontrols来显示“岛
- asp.net-mvc – 如何在asp.net mvc中处理分页?
- asp.net-mvc – 命名约定 – 控制器的一个规则,没